我发现了该工具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 机器上托管客户机。
该命令的输出似乎是一个ubuntu-xen
包含三个文件的文件夹:
tmpXXXXXX
,这是一个非常大的文件,我认为它是根分区映像tmpYYYYYY
,这是一个相当大的文件,我认为它是交换分区映像xen.conf
,文本文件
我已将文件复制到新名称下的xen.conf
RHEL 服务器目录中,并在将文件中的和路径从本地工作站复制到 RHEL 服务器后调整它们。启动虚拟机管理器时,我可以看到Dom0 机器下列出的虚拟机。/etc/xen
newvm
tempXXXXXX
tempYYYYYY
virt-manager
newvm
当我尝试启动时newvm
,出现错误:
Error starting domain: virDomainCreate() failed POST operation failed: (xend.err 'Error creating domain: Kernel image does not exist: None')
kernel = 'None'
确实,文件中存在一个条目xen.conf
。我如何找出内核的路径应该是什么?这个路径应该是存储在 RHEL5 主机本地文件系统上的内核,还是应该是客户机映像内的路径?
我看到该vmbuilder
命令提供了一个--xen-kernel
选项,以及一个--xen-ramdisk
选项,但我不确定该使用什么。
我认为我应该能够让它工作,因为 Ubuntu表示支持作为 Xen 访客,即使Xen 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
,这两个文件都没有找到。如果该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
。
完成此操作后,我可以newvm
从内部“运行”虚拟机virt-manager
,但遇到了消息
Console Not Configured For Guest
当我双击该条目打开虚拟机控制台时。按照论坛的建议,我添加了以下行
vfb = [ 'type=vnc' ]
到配置文件,重新创建虚拟机(约 10 分钟的过程),这次收到消息:
Connecting to console for guest
这种情况一直持续;在选择“查看”->“串行控制台”后,我发现内核崩溃:
[5442621.272173] Kernel panic - not syncing: Attempted to kill the idle task!
[5442621.272179] Pid: 0, comm: swapper Tainted: G D 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
,但仍然出现了同样的内核恐慌。
此外,虚拟机管理器似乎会注意内核文件名的格式;对于同一个内核二进制文件,我尝试将其简单地命名为vmlinuz-virtual
,结果会抛出一个有关内核无效的错误框。当我将其命名为时vmlinuz-2.6.35-23-virtual
,它不会抛出错误,但不久之后仍会导致内核崩溃。
答案1
你可能想看看xen工具如果您--pygrub
在xen-create-image
命令中指定该包,它会将内核/initrd 嵌入到客户磁盘映像中,这可以让您更轻松地在系统之间传输客户映像。
答案2
您可能需要考虑升级您的 xen 基础架构,xen 3.x 对其支持的客户端确实存在限制。请查看以下内容,http://www.redhat.com/resourcelibrary/articles/enterprise-linux-virtualization-support
你尝试过旧版本的 ubuntu 吗?
答案3
您应该使用(已经使用过?)Ubuntu 提供的 linux-image-virtual 内核,以及较新的 Xen 虚拟机管理程序(可能带有 pygrub 或类似程序)。
但是您的问题已经过时了,现在您不会使用 Ubuntu-10.10,而在较新的版本上,您在 Xen(hvm 和 paravirt)和裸机上使用相同的内核。