Назад | Перейти на главную страницу

Загрузка гостевой Ubuntu 12.10 на Debian 6.0.4 Xen с помощью pygrub

Я пытаюсь запустить 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)'.