2012年6月10日 星期日

openSUSE 12.2 Beta 1 + Windows 8 RP 雙系統 - grub2 篇

Situation:

Before
sda: [sda1: System Reserve] [sda2: Windows 8] [sda3: Extended] < (sda5: Data 1) (sda6: Windows 8 ISO) (sda7: Data 2) (sda8: openSUSE 12.2 Beta 1) > [sda4: /Home]

上圖是我 S10 灌完 Windows 8 RP + openSUSE 12.2 Beta 1 之後的硬碟狀況,因為 DVD-RW 片讀不到(應該是壞了),只好透過 NTT HDD Installer 用硬碟來灌 Windows 8 RP,如今灌好之後,想說要回收這劃規出來當 Disc 的磁區,如有需要下次重灌(應該等 RTM 了吧!^^)前再重分割就好,當下也沒多想,用 Windows 裡的 Disk Management 砍了 sda6 收工。

結果一會兒後開機時就囧了,grub 居然跟我說:「找不到 partition」,壞去!這次我把 openSUSE 裝在 Extended partition 裡,而非 primary,一直感覺不出不把 system 放在主分割區有什麼差?這下自食惡果,因為刪了 sda6 導致後面磁區的代號變動(sda7→sda6, sda8→sda7),如果是放在 sda4 還不受影響,但不巧的是,openSUSE 被我放在 sda8,結果就讓 grub rescue> 跑出來(這也間接證明 grub.cfg 有用到 sdaX 來做設定)


Solution:

這裡 grub rescue 應該是 grub2 的,現行在 openSUSE 裡談 grub2 的文章並不多,多數是 grub,有談到 grub2 的幾乎都是 Ubuntu,雖然是東拼西湊,總算找到方法進入 openSUSE:

ls
> (hd0), (hd0,msdos1), (hd0,msdos2), ..., (hd0,msdos9)
ls 跟 linux 底下的一樣,可列出資料夾下的明細,我的 S10 硬碟裡有這幾個 parts, 並非所有 msdosY 可以對應到 sdaX, 其間是有未分割區、Linux Swap 的存在,X, Y 不盡然相等,前後查看[ls (hd0,msdosY)]一下內容應該就可以找出 openSUSE 的磁區,我的是 (hd0,msdos9)

set prefix=(hd0,msdos9)/boot/grub2

insmod (hd0,msdos9)/boot/grub2/linux.mod

load 完 linux module 後,字體顏色會從淡灰色變白

set root=(hd0,msdos9)

linux /boot/vmlinuz root=/dev/sda7
(或 linux /boot/vmlinuz-3.4.0-2-default root=/dev/sda7)
因為 vmlinuz 是 symbolic link 指向 vmlinuz-3.4.0-2-default

initrd /boot/initrd
同理 initrd 亦是 symbolic link

boot
之後就會照著正常開機程序進入 openSUSE

本來是想用 Ubuntu 底下常用的 grub-install 來重新安裝,
(# grub-install /dev/sda --no-floppy)
但 openSUSE 底下 grub-install 不允許接參數,而 # grub-install 會直接使用 YaST 裡的 Boot Loader 來運作,以下分成兩種狀況探討:


<Note> su fdisk -l 
可查看磁碟的相關資訊(開機磁區, 磁柱分配, 磁區格式, ...)
  1. Type GRUB2:
    Boot Loader Location - Custom Boot Partition [/dev/sda] 需要手動輸入沒得選
    這樣設定我不確知是否可正常修正 grub2,理論上應該沒問題,但當初因為不知道要選 Custom Boot Partition,我的樣本是先透過 grub 修正再轉成 grub2,這點是有待確認的
  2. Type GRUB:
    Boot Loader Location - Custom Boot Partition [/dev/sda] 可用下拉式選單選取
    確實可修正回 grub, 但 Windows 的分區需用 chainloader 來添加,可供設定的細項比較多
總之,原則上就是透過 grub rescue> 下指令先能進入 openSUSE,然後再用 YaST 的 Boot Loader 做修復


Reference

Grub Rescue
Grub Knowledge
  1. GRUB 2 bootloader - Full tutorial - http://www.dedoimedo.com/computers/grub-2.html
  2. Grub2/Installing - https://help.ubuntu.com/community/Grub2/Installing
    Reinstall Grub2 in Ubuntu
<Note> if "grub.cfg" lost, # grub-update need to be used to recreate "grub.cfg"

沒有留言:

張貼留言