我已经发现了ubuntu-vm-builder工具,我已经安装了,然后在Ubuntu工作站上调用:
sudo vmbuilder xen ubuntu --suite maverick --flavour virtual --arch amd64 --mem=512 --rootsize 8192
但是,此工作站不是虚拟机的预期目标主机。 我想在运行Xen 3.0.3的Red Hat Enterprise Linux 5机器上托pipe这个guest虚拟机。
该命令的输出看起来是一个名为ubuntu-xen的文件夹,其中包含三个文件:
tmpXXXXXX ,一个非常大的文件,我认为是根分区映像 tmpYYYYYY ,我假设一个有点大的文件是交换分区映像 xen.conf ,一个文本文件 我已将xen.conf文件复制到新名称newvm下的RHEL服务器的/etc/xen目录中,并在将文件从本地工作站复制到RHEL服务器之后,调整文件中的tempXXXXXX和tempYYYYYY的path。 当我启动Virtual Machine Manager virt-manager ,我可以看到Dom0机器下面列出的newvm虚拟机。
当我尝试启动newvm ,出现错误:
Error starting domain: virDomainCreate() failed POST operation failed: (xend.err 'Error creating domain: Kernel image does not exist: None')
事实上,在xen.conf文件中存在一个入口kernel = 'None' 。 我如何找出内核的path应该是什么? 这个path应该是保存在RHEL5主机的本地文件系统中的内核,还是应该是来宾映像中的path?
我看到vmbuilder命令提供了一个--xen-kernel选项和一个--xen-ramdisk选项,但我不确定要使用哪一个。
我认为我应该能够得到这个工作,因为Ubuntu被认为是作为Xen来宾支持的 ,尽pipeXen 4.0.1文档仅支持一组有限的发行版本,Ubuntu排除了。
更新1
在我的本地工作站上运行vmbuilder ,我看到一个输出行说:
Calling hook: install_kernel
后来,输出行说:
update-initramfs: Generating /boot/initrd.img-2.6.35-23-virtual [...] run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.35-23-virtual /boot/vmlinuz-2.6.35-23-virtual
所以在xen.conf文件中,我尝试设置行:
kernel = '/boot/vmlinuz-2.6.35-23-virtual' ramdisk = '/boot/initrd.img-2.6.35-23-virtual'
当试图启动虚拟机,我得到了类似于上次的错误:
Error starting domain: virDomainCreate() failed POST operation failed: (xend.err 'Error creating domain: Kernel image does not exist: /boot/vmlinuz-2.6.35-23-virtual')
这使我认为RHEL5机器正在查找本地文件,而不是二进制客户机磁盘映像中的文件。
在我的工作站上运行sudo updatedb之后,没有find这些文件。 如果vmbuilder工具试图安装它们,它一定失败了。
更新2
我能够通过挂载客户机磁盘二进制文件来提取内核和initrd映像:
mkdir mnt_tmp sudo mount ubuntu-xen/tmpXXXXXX mnt_tmp/ -o loop cp mnt_tmp/boot/vmlinuz-2.6.35-23-virtual virtual_kernel_ubuntu cp mnt_tmp/boot/initrd.img-2.6.35-23-virtual virtual_initrd_ubuntu
将这两个文件复制到RHEL5服务器,并编辑xen.conf文件,将它们指向kernel和ramdisk 。
通过这样做,我可以在virt-manager “运行” newvm虚拟机,但遇到了这个消息
Console Not Configured For Guest
当我双击该条目打开虚拟机控制台。 正如一个论坛所build议的那样,我添加了这一行
vfb = [ 'type=vnc' ]
到configuration文件,重新创build虚拟机(一个〜10分钟的过程),这次得到的消息:
Connecting to console for guest
这一直是无限期的; select查看 – >串行控制台后,我发现一个内核恐慌:
[5442621.272173] Kernel panic - not syncing: Attempted to kill the idle task! [5442621.272179] Pid: 0, comm: swapper Tainted: GD 2.6.35-23-virtual #41-Ubuntu [5442621.272184] Call Trace: [5442621.272191] [<ffffffff815a1b81>] panic+0x90/0x111 [5442621.272199] [<ffffffff810652ee>] do_exit+0x3be/0x3f0 [5442621.272204] [<ffffffff815a5e20>] oops_end+0xb0/0xf0 [5442621.272211] [<ffffffff8100ddeb>] die+0x5b/0x90 [5442621.272216] [<ffffffff815a56c4>] do_trap+0xc4/0x170 [5442621.272221] [<ffffffff8100ba35>] do_invalid_op+0x95/0xb0 [5442621.272227] [<ffffffff8130851c>] ? intel_idle+0xac/0x180 [5442621.272232] [<ffffffff810072bf>] ? xen_restore_fl_direct_end+0x0/0x1 [5442621.272239] [<ffffffff815a48fe>] ? _raw_spin_unlock_irqrestore+0x1e/0x30 [5442621.272247] [<ffffffff8108dfb7>] ? tick_broadcast_oneshot_control+0xc7/0x120 [5442621.272253] [<ffffffff8100ad5b>] invalid_op+0x1b/0x20 [5442621.272259] [<ffffffff8130851c>] ? intel_idle+0xac/0x180 [5442621.272264] [<ffffffff813084e0>] ? intel_idle+0x70/0x180 [5442621.272269] [<ffffffff810072bf>] ? xen_restore_fl_direct_end+0x0/0x1 [5442621.272275] [<ffffffff8148a147>] cpuidle_idle_call+0xa7/0x140 [5442621.272281] [<ffffffff81008d93>] cpu_idle+0xb3/0x110 [5442621.272286] [<ffffffff815873aa>] rest_init+0x8a/0x90 [5442621.272291] [<ffffffff81b04c9d>] start_kernel+0x387/0x390 [5442621.272297] [<ffffffff81b04341>] x86_64_start_reservations+0x12c/0x130 [5442621.272303] [<ffffffff81b08002>] xen_start_kernel+0x55d/0x561
更新3
我尝试了一个i386架构,而不是amd64 ,但得到了同样的内核恐慌。
而且,Virtual Machine Manager似乎注意到了内核文件名的格式; 对于相同的内核二进制文件,我试着简单地命名为vmlinuz-virtual ,它抛出了关于无效内核的错误框。 当我把它命名为vmlinuz-2.6.35-23-virtual ,它并没有抛出这个错误,但是之后不久它仍然导致了内核恐慌。
您可能需要查看xen-tools软件包,如果您在xen-create-image命令中指定了--pygrub在--pygrub磁盘映像中embeddedkernel / initrd,这样可以更轻松地将guest映像系统。
您可能需要考虑升级您的xen基础架构,xen 3.x确实对其支持的guest虚拟机有限制。 看看下面的内容, http://www.redhat.com/resourcelibrary/articles/enterprise-linux-virtualization-support
你有没有尝试过一个旧的Ubuntu的版本?
你应该使用(已经使用过)Ubuntu提供的linux-image-virtual内核,以及一个更新的Xen hypervisor(可能使用pygrub或类似的)。
但是,你的问题是陈旧的,现在你不会使用Ubuntu-10.10,而在较新的版本中,你使用Xen(hvm和paravirt)和裸机上的相同内核。