我试图写一个脚本,从头开始创建一个虚拟机。我使用python3和libvirt来实现这一点。我知道使用命令行工具很简单,但对于我的特定应用程序,我不能使用这些工具。你知道吗
我的虚拟机定义如下:
<domain type='qemu'>
<name>QEMU_test</name>
<memory>219200</memory>
<currentMemory>219200</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
</os>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw' />
<source file='/vm/ubuntu-18.04.2-desktop-amd64.iso'/>
<target dev='hdc'/>
<readonly/>
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' />
<source file='/vm/test/test2.img'/>
<target dev='hda'/>
</disk>
<graphics type='vnc' port='-1'/>
<interface type='network'>
<source network='default'/>
<model type='virtio' />
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
<mac address="00:11:22:33:44:55"/>
</interface>
</devices>
</domain>
我所做的就是创建一个到'qemu:///system'的连接,将XML配置文件读入一个变量并执行'createXML'来创建一个临时来宾域。你知道吗
我遇到的问题可能部分是因为我不了解操作系统是如何启动的。 文件“test2.img”是使用“/dev/zero”生成的文件。它是按照这里描述的过程创建的: Python libvirt API - create a Virtual Machine
尝试启动此计算机会导致内核死机:
Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
我猜这是因为需要为空磁盘指定XML中的'initramfs'参数,否则需要有一种方法来对磁盘进行分区,以便存在预期的根分区。你知道吗
那么我的问题是:有没有一种可移植的方法可以使用Python来实现这些功能?你知道吗
我不想显式地指定任何路径,因为我希望这个脚本尽可能可移植(除非有一个标准我可以用于我所缺少的所有操作系统)。如果可能的话,我也希望我不需要分发除了脚本以外的任何东西来让它工作。你知道吗
编辑以澄清行为:如果我使用Debian CD,我可以看到带有安装选项的初始菜单弹出,但是一旦我选择了一个,就会导致内核死机。你知道吗
使用/dev/zero创建一个“原始”磁盘映像应该是可行的,但是对于这些类型的东西,通常最好使用“qemu-img”。不管是哪种方式,仅仅创建这样一个磁盘映像,然后尝试从中引导都是行不通的,因为里面没有可供引导的操作系统。你知道吗
虚拟机真的是从ubuntu的CDROM介质启动的吗?即使test2.img完全为空,我也希望它能工作,然后您可以使用ubuntu安装程序来填充test2.img。你知道吗
好吧,妈的。在搞乱了调试开关并最小化了virt-*工具作为默认值创建的配置之后,我终于找到了它不起作用的原因:
我没有给虚拟机足够的内存。你知道吗
这会导致不同操作系统的内核恐慌。例如,Ubuntu抱怨找不到rootfs。Debian抱怨它未能杀死init。你知道吗
内存的默认单位是KibiBytes,即1024字节。这意味着我的配置给了虚拟机214兆字节(2^20字节)多一点的工作空间。结果发现,除了抱怨,你什么都做不了。你知道吗
相关问题 更多 >
编程相关推荐