歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 找回丟失的Linux分區及Grub修復過程

找回丟失的Linux分區及Grub修復過程

日期:2017/2/28 15:45:43   编辑:Linux教程

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菜單,修復成功。

Copyright © Linux教程網 All Rights Reserved