Linux

使用 pygrub 在 Debian 6.0.4 Xen 上引導 Ubuntu 12.10 來賓

  • April 30, 2013

我正在嘗試在 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 輸出

我認為 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)。原始 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 文件。

因此,為了使用 pygrub 執行 Ubuntu 12.10,該set root={...}行必須替換為set root='(hd0)'.

引用自:https://serverfault.com/questions/503893