Я пытаюсь запустить Ubuntu 12.10 с Debian 6.0.4 и Xen-4.0. Я понял, что pygrub, возможно, не сможет проанализировать menu.lst (я сделал символическую ссылку menu.lst на grub.cfg в / boot), и в итоге получил такую конфигурацию:
#
# 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 и сообщение об ошибке: Traceback (последний вызов последний):
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 в какой-то момент в ближайшем будущем). Устройство loopback в исходной конфигурации grub также может вызывать проблемы при запуске.
Есть предложения, идеи?
Мы смогли загрузить систему с указанной конфигурацией:
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.
Итак, чтобы запустить Ubuntu 12.10 с pygrub, set root={...}
строку необходимо заменить на set root='(hd0)'
.