2010年1月3日 星期日

修復GRUB2:當Win7 WinXP ubuntu9.10湊在一起

上一篇之後,我的舊電腦也安裝了ubuntu 9.10...

問題來了
Win7的boot loader蓋掉了原本放在sda的XP舊式boot loader後,再用ubuntu 9.10的grub2蓋一次
變成每次開機會先進入grub2選Win7的boot loader or ubuntu 9.10,再從Win7的boot loader選擇要進入Win7還是XP,就...一整個不爽啦~(翻桌)
於是趁著Win7的boot loader進入XP會找不到XP的boot loader時,來改掉這樣不合理的開機流程...
先來個使用前硬碟配置:
  • sda:
    • sda1:WinXP主分割區,NTFS,grub2導引 + XP boot loader + Win7 boot loader
    • sda2:Linux SWAP分割區
    • sda3:ubuntu 9.10 根目錄分割區,ext4,grub2 boot loader
  • sdb:Win7主分割區,NTFS
  • sdc:DATA分割區,NTFS

STEP1:還原XP的boot loader
就只是把XP安裝光碟放進去,進入修復主控台,執行"fixboot"跟"fixmbr"而已

STEP2:拔掉sda的電源線
這名奇妙的重要!因為XP、VISTA跟Win7的安裝光碟實在強大!明明在BIOS裡關掉的硬碟還是會被抓出來...
這步沒做,上一步就白做了,Win7的boot loader會再次蓋掉sda的XP boot loader,而不是放在sdb

STEP3:還原Win7的boot loader
一樣只是把Win7的安裝光碟丟進去,選修復模式,然後他會偵測到你的Win7沒有boot loader...廢話!不然我們前兩步就白做了...
於是就交給它修復,然後重開機一次後,一樣進入安裝光碟,一樣選修復模式。這次不會偵測到錯誤,會直接進入選單,選"修復錯誤"之類的...我懶得為了打文章再放Win7片子跑一次,反正不論是中文、英文、日文的安裝片,都會在地一個選項就是了

STEP4:還原GRUB2統整所有boot loader的地位
首先,請記得把sda的電源線接回去...
之後放入ubuntu 9.10的安裝光碟暨Live CD
然後參照這篇教學
進行到第9步...
$sudo grub-install /dev/sda
grub-probe: error: cannot find a grub drive for /dev/sda3. Check your device.map
...
嗯...囧了。try了n次都一樣,於是試了下面指令
$sudo grub-install --root-directory=/boot /dev/sda
OK了!?不過變成/boot底下還有一個boot/grub...
於是我就自作主張的把/boot/boot/grub/底下的東西COPY到/boot/grub底下,再跑一次
$sudo grub-install /dev/sda
這次也OK了...只是目前還抓不到其他boot loader

STEP5:重製GRUB2開機選單
雖然GRUB2回來了,不過執行update-grub還是抓不到其他的boot loader
所以我們這次要重開機,經過只有ubuntu的GRUB2選單後,終於又回到了熟悉的ubuntu桌面
這時我們一樣打開終端機,執行update-manager,終於又抓到其他的boot loader了~
重開機檢查,確認都有出現在選單上了
可喜可賀,可喜可賀

STEP6:收工
再來個使用後硬碟配置:
  • sda:
    • sda1:WinXP主分割區,NTFS,grub2導引 + XP boot loader
    • sda2:Linux SWAP分割區
    • sda3:ubuntu 9.10 根目錄分割區,ext4,grub2 boot loader
  • sdb:Win7主分割區,NTFS,Win7 boot loader
  • sdc:DATA分割區,NTFS

註:GRUB2仍然把Win7識別為VISTA...仔細看後面附帶"(Loader)"
可見由於VISTA跟Win7的boot loader是一樣的,所以想當然耳...
看不爽的話只好自己手動修改grub.cfg

沒有留言:

張貼留言