在Centos 7.0上启动qemu-kvm虚拟机时,如何传递参数或共享目录/文件。

4
我需要能够在虚拟机启动时传递一些参数,以使其正确设置。为了做到这一点,我要么必须将信息嵌入到映像中,要么以某种方式将其作为参数传递给我的qemu-kvm命令。这些参数很少,如果使用VMware,我们只需将其作为ova paramas传递,并在VM启动时调用ova-environment即可获取这些参数。但是从qemu-kvm启动它时,我没有这样的选择。我做了一些功课,发现可以使用virtio-9p驱动程序在主机和客户机之间共享文件。不幸的是,RHEL / Centos已决定不支持9p。

如果无法重建启用了9p选项的RHEL内核,我该如何解决上述问题?两个解决方案都可以,即传递/共享某种json文件到VM(预先在主机上填充),该文件将读取此文件并进行设置,或者设置某种“环境变量”,我可以从VM内部查询这些参数并继续设置。任何指针将有所帮助。

4个回答

6
如果您的QEMU版本支持,可以使用其-fw_cfg选项将信息传递给客户端。如果运行有启用了CONFIG_FW_CFG_SYSFS的Linux内核的客户机,则可以从sysfs中读取信息。例如:
如果您这样启动VM:
qemu-system-x86_64 <OPTIONS> -fw_cfg name=opt/com.example.test,string=qwerty

从虚拟机内部,您可以通过sysfs获得该值:

cat /sys/firmware/qemu_fw_cfg/by_name/opt/com.example.test/raw

似乎也有一些Windows的驱动程序,但我从未使用过。


1

我只是在搜索看看这种情况是否有所改善,然后发现了这个问题。显然它没有得到改善。

我的做法是将变量数据输出到临时文件中(例如/tmp/xxFoo)。通常我会直接将文本或tar写入该文件,然后将其截断为最小大小和512字节的倍数,如64K,否则磁盘控制器无法配置它。然后VM使用该文件作为原始驱动器启动。启动VM后,临时文件将被删除。从客户端内部,您可以读取/ cat原始块设备并获取变量数据(在BSD中使用 分区作为原始驱动器)。

在Windows客户机中,访问数据比较棘手。理论上,您可以读取\\.\PhysicalDriveN,但我从未能够使其正常工作。Cygwin可以做到这一点,并且与Linux类似。另一个选择是将临时文件制作成分区和格式化的映像,但这很麻烦,需要创建和更新。

至于共享文件夹,我使用适用于几乎所有系统的Samba。我通常使用几个具有不同配置的smbd实例。


0

当您使用-kernel-initrd启动虚拟机时,您应该能够通过-append传递环境变量。

缺点是您必须在磁盘映像之外跟踪当前的内核和initrd。

其他可能性包括准备一个小型的磁盘映像(如您所说)或通过网络/dhcp或串行链接进入您的虚拟机等,这取决于您的环境。


0

一种选择是创建一个ISO文件并将其作为参数传递。这适用于主机Win和Ubuntu以及客户机Win和Ubuntu。您可以在客户操作系统中读取已挂载的CD-ROM。

>>qemu-system-x86_64  -drive file=c:/qemuiso/winlive1.qcow2,format=qcow2 -m 8G  -drive file=c:\qemuiso\sample.iso,index=1,media=cdrom


On Guest Linux Mount CDROM in Ubuntu:-
>>blkid     //to check if media is there
>>sudo mkdir /mnt/cdrom
>>sudo mount /dev/sr0 /mnt/cdrom    //this step can also be put in crontab
>>cd /mnt/cdrom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接