如果无法重建启用了9p选项的RHEL内核,我该如何解决上述问题?两个解决方案都可以,即传递/共享某种json文件到VM(预先在主机上填充),该文件将读取此文件并进行设置,或者设置某种“环境变量”,我可以从VM内部查询这些参数并继续设置。任何指针将有所帮助。
如果无法重建启用了9p选项的RHEL内核,我该如何解决上述问题?两个解决方案都可以,即传递/共享某种json文件到VM(预先在主机上填充),该文件将读取此文件并进行设置,或者设置某种“环境变量”,我可以从VM内部查询这些参数并继续设置。任何指针将有所帮助。
-fw_cfg
选项将信息传递给客户端。如果运行有启用了CONFIG_FW_CFG_SYSFS
的Linux内核的客户机,则可以从sysfs中读取信息。例如: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的驱动程序,但我从未使用过。
我只是在搜索看看这种情况是否有所改善,然后发现了这个问题。显然它没有得到改善。
我的做法是将变量数据输出到临时文件中(例如/tmp/xxFoo
)。通常我会直接将文本或tar写入该文件,然后将其截断为最小大小和512字节的倍数,如64K,否则磁盘控制器无法配置它。然后VM使用该文件作为原始驱动器启动。启动VM后,临时文件将被删除。从客户端内部,您可以读取/ cat原始块设备并获取变量数据(在BSD中使用 分区作为原始驱动器)。
在Windows客户机中,访问数据比较棘手。理论上,您可以读取\\.\PhysicalDriveN
,但我从未能够使其正常工作。Cygwin可以做到这一点,并且与Linux类似。另一个选择是将临时文件制作成分区和格式化的映像,但这很麻烦,需要创建和更新。
至于共享文件夹,我使用适用于几乎所有系统的Samba。我通常使用几个具有不同配置的smbd实例。
当您使用-kernel
和-initrd
启动虚拟机时,您应该能够通过-append
传递环境变量。
缺点是您必须在磁盘映像之外跟踪当前的内核和initrd。
其他可能性包括准备一个小型的磁盘映像(如您所说)或通过网络/dhcp或串行链接进入您的虚拟机等,这取决于您的环境。
一种选择是创建一个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