![使用 pygrub 在 Debian 6.0.4 Xen 上启动 Ubuntu 12.10 客户机](https://linux22.com/image/610852/%E4%BD%BF%E7%94%A8%20pygrub%20%E5%9C%A8%20Debian%206.0.4%20Xen%20%E4%B8%8A%E5%90%AF%E5%8A%A8%20Ubuntu%2012.10%20%E5%AE%A2%E6%88%B7%E6%9C%BA.png)
我正在尝试在 Debian 6.0.4 和 Xen-4.0 上运行 Ubuntu 12.10。我意识到 pygrub 可能无法解析 menu.lst(我将 menu.lst 符号链接到 /boot 中的 grub.cfg),最终得到以下配置:
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os {
insmod gzio
insmod ext2
search --no-floppy --fs-uuid --set=root 7098a9fb-df7a-4e37-841d-73641c6b79c5
loopback loop0 /sdd
set root=(loop0)
linux /boot/vmlinuz-3.5.0-27-generic root=UUID=7098a9fb-df7a-4e37-841d-73641c6b79c5 ro console=hvc0 splash quiet
initrd /boot/initrd.img-3.5.0-27-generic
}
但不幸的是,pygrub 仍然无法解析配置文件,并显示以下输出:
我发现 pygrub 的菜单项中的环回设备存在问题。我删除了有问题的行,并用一个简单的配置替换它们(类似于我的其他 Debian Xen 实例)。
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os {
insmod ext2
set root=(hd0)
linux /boot/vmlinuz-3.5.0-27-generic root=UUID=7098a9fb-df7a-4e37-841d-73641c6b79c5 ro console=hvc0 splash quiet
initrd /boot/initrd.img-3.5.0-27-generic
}
但不幸的是,这也无法启动:它显示 pygrub 菜单和一条错误消息:回溯(最近一次调用最后一次):
File "/usr/lib/xen-4.0/bin/pygrub", line 704, in <module>
chosencfg = run_grub(file, entry, fs, incfg["args"])
File "/usr/lib/xen-4.0/bin/pygrub", line 570, in run_grub
img = g.cf.images[0]
IndexError: list index out of range
root@xenhost7:~# Error: Boot loader didn't return any data!
该错误似乎表明 pygrub 能够解析数据,但不知何故无法找到内核。但内核是存在的。Fdisk 还显示 /boot 位于第一个分区上:
Disk part: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c7dc8
Device Boot Start End Blocks Id System
part1 1 3851 30924800 83 Linux
part2 3851 3917 529409 5 Extended
part5 3851 3917 529408 82 Linux swap / Solaris
请注意,使用外部内核启动机器实际上不是一个选择,因为所有虚拟机都是通过 iSCSI 启动的(我们将在不久的将来切换到 KVM)。原始 grub 配置中的环回设备在启动时也可能会产生问题。
有什么建议或想法吗?
答案1
我们能够使用指示的配置启动系统:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os {
insmod gzio
insmod ext2
set root='(hd0)'
linux /boot/vmlinuz-3.5.0-27-generic root=UUID=7098a9fb-df7a-4e37-841d-73641c6b79c5 ro console=hvc0 splash quiet
initrd /boot/initrd.img-3.5.0-27-generic
}
问题是我创建了一个 menu.lst 文件,pygrub 将其与 Grub 1.0(或 0.95)关联,并首先对其进行解析。然而,Ubuntu 12.10 中使用的文件格式是 Grub 2.0 文件。
因此,为了使用 pygrub 运行 Ubuntu 12.10,set root={...}
必须将该行替换为set root='(hd0)'
。