web-dev-qa-db-ja.com

pygrubを使用してDebian6.0.4XenでUbuntu12.10ゲストを起動する

Debian6.0.4とXen-4.0からUbuntu12.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 Output

Pygrubにはmenuentryのループバックデバイスに問題があることがわかりました。問題のある行を削除し、単純な構成に置き換えました(他の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

すべてのVMはiSCSI経由で起動されるため、外部カーネルを使用してマシンを起動することは実際にはオプションではないことに注意してください(近い将来、KVMに切り替えます)。元のgrub構成でも、起動時に問題が発生する可能性があります。

何か提案、アイデアはありますか?

1
Pascal

示された構成でシステムを起動できました。

_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
}
_

問題は、pygrubが最初に解析されたGrub 1.0(または0.95)に関連付けるmenu.lstファイルを作成したことでした。ただし、Ubuntu12.10で使用されるファイル形式はGrub2.0ファイルです。

したがって、pygrubを使用してUbuntu 12.10を実行するには、_set root={...}_行をset root='(hd0)'に置き換える必要があります。

2
Pascal