KVM虛擬機器通訊

2021-07-03 01:16:34 字數 1530 閱讀 9136

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之一。...