[Fedora12]Linux的GRUB修復,安裝GRUB

大家在製作多重開機時都會遇到這個問題
就是不管是XP先安裝或是Linux先安裝

都會有開機資訊被覆蓋的情況

先講重要概念

————————————————————————–

重要概念

1. MBR為Master Boot Record每顆硬碟只有一個,寫在硬碟的第0軌上

2. 每切出的分割,除了裡面有檔案系統的資訊外,還有一個開機資訊(boot sector)

3. 大致的開機流程是,當BIOS控制權轉交到一顆硬碟上,會先讀取該硬碟的MBR
再由MBR裡寫的資訊(如果沒有則為active的分割區),載入該分割區的(boot sector),再經由該資訊,找到系統重要檔案,載入作業系統

4. 而多重開機則大多為在MBR裡寫入開機管理程式,顯示介面讓使用者選擇到開機的分割區或是其他資訊
(也有些開機管理程式程式太大,MBR的空間塞不進去,會從MBR中導到某個分割區的boot sector,再從該資訊載入開機管理程式)

5. 而Linux比較特別,可以直接從GRUB直接載入核心,載入作業系統 

解決辦法如下:

————————————————————————–

winXP下的開機資訊修復

放入XP安裝光碟,用它開機

按R進入Recovery Console下打fixmbr修復

或是使用spfdisk的修復MBR功能

A:\>spfdisk /mbr

————————————————————————–

Linux下的開機選單(GRUB)修復

放入你使用的Linux版本的LiveCD,用它開機
在登入到桌面之後,打開命令列

以Fedora 12為例 (GRUB 1版的做法)

(註:以下這段ubuntu就不適用,因為它使用GRUB 2版。做法為另一種)
(該做法不限定在Fedora,Redhat系列的都可以用,像是RHEL,Cent OS … 等等)

先打入fdisk -l查看磁碟分割的狀況

[root@localhost ~]#fdisk -l

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x129dfc88

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63    18844244     9422091    7  HPFS/NTFS
/dev/sda2        18844245   625137344   303146550    f  W95 Ext’d (LBA)
/dev/sda5        18860310    52516484    16828087+   7  HPFS/NTFS
/dev/sda6        52516548    60918479     4200966   83  Linux
/dev/sda7        60918543    62990864     1036161   82  Linux swap / Solaris
/dev/sda8        62990928    96454259    16731666    7  HPFS/NTFS
/dev/sda9        96454323   625137344   264341511    7  HPFS/NTFS

 

找到Fedora安裝的分割區(ext3或ext4分割,該目錄含有GRUB的資訊)
我的電腦為/dev/sda6

打入grub進入頁面

[root@localhost~]#grub

切換根目錄為Fedora安裝的目錄

grub> root (hd0,5)
root (hd0,5)
 Filesystem type is ext2fs, partition type 0x83

這個時候可能要嘗試一下,大約是在前面查到的sda6的上一號或下一號
出現ext2fs字樣就可以繼續

 

範例1:

寫入開機資訊到該硬碟的MBR

grub> setup (hd0)
setup (hd0)
Checking if “/boot/grub/stage1” exists… no
Checking if “/grub/stage1” exists… yes
Checking if “/grub/stage2” exists… yes
Checking if “/grub/e2fs_stage1_5” exists… yes
Running “embed /grub/e2fs_stage1_5 (hd0)”…  15 sectors are embedded.
succeeded
Running “install /grub/stage1 (hd0) (hd0)1+15 p (hd0,5)/grub/stage2
/grub/grub.conf”… succeeded
Done.

出現類似succeeded字樣就成功了

 

範例2:

寫入開機資訊到Fedora的該分割區的開機磁軌
(我的是sda6,也就是這裡的(hd0,5)每台電腦環境不同,請以你的為主)

grub> setup (hd0,5)
setup (hd0,5)
 Checking if “/boot/grub/stage1” exists… yes
 Checking if “/boot/grub/stage2” exists… yes
 Checking if “/boot/grub/e2fs_stage1_5” exists… yes
 Running “embed /boot/grub/e2fs_stage1_5 (hd0,5)”… failed (this is not fatal)
 Running “embed /boot/grub/e2fs_stage1_5 (hd0,5)”… failed (this is not fatal)
 Running “install /boot/grub/stage1 (hd0,5) /boot/grub/stage2 p /boot/grub/grub.conf “… succeeded
Done.

出現類似succeeded字樣就成功了

————————————————————————–

這篇很簡略的寫出操作的重點

詳細請看

http://linux.vbird.org/linux_basic/0510osloader.php#grub_install

http://bentai.wordpress.com/2006/08/16/%E5%9C%A8windows-xp-sp2%E4%B8%8B%E4%BF%AE%E5%BE%A9mbr/

在〈[Fedora12]Linux的GRUB修復,安裝GRUB〉中有 1 則留言

  1. 我在未正常關機的情況下直接切斷電源
    結果開機卡在GRUB
    利用範例一成功救回並可正常使用
    謝謝惹~~

留言功能已關閉。