kvm虛擬機器除了用到qemu命令列介面進行操作,我們可以在建立虛擬機器的時候指定一些引數,可以讓我們通過socket unix通訊的方式,來控制虛擬機器。
qemu-system-x86_64-m 2048 -drive file=/var/disk/win.img,if=virtio -rtcbase=localtime -netnic,macaddr=00:11:22:33:44:aa,model=virtio -nettap,script=/var/etc/ovs-ifup,downscript=/var/etc/ovs-ifdown,ifname=vmwin7-chardev socket,id=img,path=/var/console/1.img,server,nowait -mon chardev=img,id=monitor,mode=readline-usb -usbdevice tablet -vnc :5
紅色字型是找那個要的**,實現新增乙個字元裝置,指定socket通訊的的id 和路徑(因為是指定的unix 域 socket通訊方式,所以要指定unix域檔案的路徑,server選項開啟監聽,nowait是非阻塞模式,
-mon chardev=img,id=monitor,mode=readline :setup monitor on chardev name建立監視器視窗在指定的字元裝置上)接下來就是讓我們進行通訊:寫乙個socket客戶端
int socketfd;
char buf[1024];
struct sockaddr_un sockaddr;//定義unix 域socket結構位址
socketfd = socket(af_unix,socket_stream,0);
if(socketfd<0)
printf("socket failure!");
return 0;
bzero(&sockaddr,sizeof(sockaddr));//使用之前清空位址
sockaddr.sun_family = af_unix(af_local);
srtcpy(sockaddr.sun_path,"******x");//***是unix域套接字的檔案路徑
int res = connect(socketfd,(struct sockaddr*)&sockaddr,sizeof(sockaddr));
if(res<0)
printf("connet failure");
return 0;
else
wtrite(socketfd,buf,strlen(buf));
return 0;
unix socket 通訊的大致流程就是這樣的
很重要一點,在和qemu monitor進行socket通訊的時候,發現每次只能夠傳送<=4個字元才可以正確接收,如果命令超過4個字元,那麼將命令分成多次進行傳送。每次傳送4個即可。
還有傳送完命令不要立刻關閉socket 或者 結束程式,等待qemu monitor執行完畢後,才可以關閉,一般上用sleep函式睡眠幾秒,等待完成。
kvm虛擬機器之間通訊
kvm虛擬機器間通訊,在不影響宿主機通訊或者各個虛機間通訊互不影響的情況下。各個虛擬機器網絡卡可以使用virtio驅動,使用宿主機的虛擬網橋進行通訊。1 首先使用brctl show檢視宿主機網橋使用情況。virbr0為宿主機預設建立的網橋,vnet0 vnet 均為虛擬介面 定義不一定準確 為虛擬...
KVM複製虛擬機器,KVM轉殖虛擬機器
1.關閉要轉殖的虛擬機器 2.語法 virt clone o 原虛擬機器 n 新虛擬機器 f 新虛擬機器存放的路徑 virt clone o centos7.0 n xuegod110 f var lib libvirt images xuegod110.img qcow2格式 virt clone...
KVM虛擬機器
一 kvm虛擬機器簡介 kernel based virtual machine的簡稱,是乙個開源的 系統虛擬化模組,自linux 2.6.20之後整合在linux的各個主要發行版本中。它使用linux自身的排程器進行管理,所以相對於xen,其核心原始碼很少。kvm目前已成為學術界的主流vmm之一。...