找回丟失的linux分區及grub修復過程


1. 背景

原硬盤分區:C(NTFS)、D(NTFS)、E(350G, NTFS)

下載ubuntu-12.04-desktop-i386.iso,硬盤安裝ubuntu12.04

安裝時,在liveCD中將E盤分區刪除,從尾部開始,新建一個100G的ext4分區,掛載到"/",再新建一個2G的SWAP分區,這時候在D盤和SWAP之間剩余250G左右的未分配空間。繼續安裝,完成后grub裝在了ext4分區上,系統通過grub引導,一切正常。

重啟后進入windows,用未分配的250G空間新建了一個新的NTFS分區:E盤。(注:由於windows下無法識別linux的ext文件系統,這步操作導致分區表里的ext4分區丟失,從而出現后面的問題)

2. Grub rescue

再次重啟系統,出現error: unknown filesystem,進入grub rescue模式

error: unknown filesystem
grub rescue>

 

輸入ls命令查看分區

grub rescue>ls
(hd0) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1)

對四個分區分別ls,嘗試找到grub所在的分區

grub rescue>ls (hd0,msdosX)

但是四個分區都返回error: unknown filesystem(注:這是因為分區表中已經不存在grub所在的ext4分區),直接在grub rescue下修復似乎不可能。好在還有liveCD可以看看硬盤究竟怎么了。

3. 找回丟失的linux分區

由於沒有光驅,我優先考慮制作U盤liveCD,嘗試了用UNetbootin和UltraISO把ubuntu-12.04-desktop-i386.iso鏡像寫入U盤,都沒法啟動(U盤也試過兩塊,一塊1G的,一塊16G的,都失敗了,1G U盤拿來做win pe啟動盤倒是成功了),具體原因我沒有深究。為了節省時間,我借了個USB光驅和ubuntu12.04安裝光盤。

從liveCD進入ubuntu系統,用fdisk命令查看分區,果然已經看不到ext4分區了。

傳說testdisk是修復分區表的神器,apt-get失敗后(原因未知),我手動下了個6.14版,運行,選擇硬盤,掃描,一段時間后掃出七八個帶D標記的分區(Deleted),都是之前折騰分區的產物,找到其中start和end能和已有分區接上的那個Linux ext4分區,按P鍵查看分區文件列表,確定這就是丟失的那個分區,然后按左右鍵把這個分區標記從D改成*(Bootable Primary),不過在這之前要先把C盤的*標記改成P(Primary),可能是因為bootable分區只允許有一個。按操作提示把這些改動寫入分區表。

退出testdisk后,再次運行fdisk,可以看到ext4分區已經找回來了。

4. 修復grub

重啟,仍然進入grub rescue,用第二部分介紹的方法逐個分區ls,直到ls (hd0,msdosX)能列出分區下的文件,對於有多個linux分區的情況,需要進一步查看是否存在/boot/grub。

如果"/boot"沒有單獨掛載,用如下命令

 

grub rescue>ls (hd0,msdosX)/boot/grub

 

如果"/boot"掛載到一個獨立的分區,用如下命令

grub rescue>ls (hd0,msdosX)/grub

回車后如果能列出一堆文件,說明找到了grub的位置,

 

grub rescue>set root=(hd0,msdosX)
grub rescue>set prefix=(hd0,msdosX)/boot/grub
grub rescue>insmod /boot/grub/normal.mod

 

然后執行

grub rescue>normal

稍候,久違的grub菜單出現了。進入ubuntu,在終端執行

sudo update-grub
sudo grub-install /dev/sda

其中sda是硬盤號,不是分區號

重啟后,直接進入了grub菜單,修復成功。

5. 參考

[1] ljj_jjl2008. Grub Rescue修復方法(根據網上資料整理,介紹命令同時也介紹原理). Ubuntu中文論壇. 

        http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=348503

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM