找回丢失的Linux分区及grub修复过程

上一篇 / 下一篇  2012-07-23 09:20:50 / 个人分类:Linux

51Testing软件测试网&qd^9d]/MSA?

  1、背景51Testing软件测试网K.} D z/r*H

^;L"y0CKJL3tY1Z0  原硬盘分区:C(NTFS)、D(NTFS)、E(350G, NTFS)

IX?*W$N6] R0

r1QlW&K1x0  下载ubuntu-12.04-desktop-i386.iso,硬盘安装ubuntu12.0451Testing软件测试网|H}*FO}0a

&W4_y2z/P0fy%^,X%D[0   安装时,在liveCD中将E盘分区删除,从尾部开始,新建一个100G的ext4分区,挂载到"/",再新建一个2G的SWAP分区,这时候在D盘和 SWAP之间剩余250G左右的未分配空间。继续安装,完成后grub装在了ext4分区上,系统通过grub引导,一切正常。51Testing软件测试网sh@ k]p!|

zq"H#pQ'\E0  重启后进入windows,用未分配的250G空间新建了一个新的NTFS分区:E盘。(注:由于windows下无法识别linux的ext文件系统,这步操作导致分区表里的ext4分区丢失,从而出现后面的问题)

G `W!u\:o!|U#N0E8H0

giq U w HDc0  2、Grub rescue

ZL|-\uFC051Testing软件测试网]$z |:M L9vPG

  再次重启系统,出现error: unknown filesystem,进入grub rescue模式51Testing软件测试网5k%U,W"D o3ig7us3W

error: unknown filesystem
1pY%Z-Ji2NG2R:U2f'P/B0grub rescue>

m a]Wxjlh0  输入ls命令查看分区

{^rKf5q&A0
grub rescue>ls
"|6m |z O3i0(hd0) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1)

8vf(A6Ze@MF0  对四个分区分别ls,尝试找到grub所在的分区51Testing软件测试网Fd(W!xO'c&X#L)J

grub rescue>ls (hd0,msdosX)

k.y9@0eb#Yq0  但是四个分区都返回error: unknown filesystem(注:这是因为分区表中已经不存在grub所在的ext4分区),直接在grub rescue下修复似乎不可能。好在还有liveCD可以看看硬盘究竟怎么了。

1}!q`w-L'kC0

QKs!e)@0  3、找回丢失的linux分区

!]`kc?K ^051Testing软件测试网PK9R{,m aBqy.\

   由于没有光驱,我优先考虑制作U盘liveCD,尝试了用UNetbootin和UltraISO把ubuntu-12.04-desktop- i386.iso镜像写入U盘,都没法启动(U盘也试过两块,一块1G的,一块16G的,都失败了,1G U盘拿来做win pe启动盘倒是成功了),具体原因我没有深究。为了节省时间,我借了个USB光驱和ubuntu12.04安装光盘。51Testing软件测试网%U%D i)h!o M W+E'T4[

51Testing软件测试网#L8f Kl4g/jD&al

  从liveCD进入ubuntu系统,用fdisk命令查看分区,果然已经看不到ext4分区了。51Testing软件测试网b0ri Z/?^)[

51Testing软件测试网 N Z'P7t+_$q

   传说testdisk是修复分区表的神器,apt-get失败后(原因未知),我手动下了个6.14版,运行,选择硬盘,扫描,一段时间后扫出七八个带 D标记的分区(Deleted),都是之前折腾分区的产物,找到其中start和end能和已有分区接上的那个Linux ext4分区,按P键查看分区文件列表,确定这就是丢失的那个分区,然后按左右键把这个分区标记从D改成*(Bootable Primary),不过在这之前要先把C盘的*标记改成P(Primary),可能是因为bootable分区只允许有一个。按操作提示把这些改动写入分 区表。

UPc0]1rc;VwO\pN051Testing软件测试网EHN \ x(b'R

  退出testdisk后,再次运行fdisk,可以看到ext4分区已经找回来了。

/v$@oE*@o8c0

a/J!T-`%T v}$V0  4、修复grub

0A A6_f8p se*[O{0

nH` h?g(@#Q0  重启,仍然进入grub rescue,用第二部分介绍的方法逐个分区ls,直到ls (hd0,msdosX)能列出分区下的文件,对于有多个linux分区的情况,需要进一步查看是否存在/boot/grub。51Testing软件测试网NI(p6[rfx"U@

51Testing软件测试网w Qe'Jk mNSl1SBt

  如果"/boot"没有单独挂载,用如下命令51Testing软件测试网I a#X5c t'{:H

grub rescue>ls (hd0,msdosX)/boot/grub
51Testing软件测试网#gYZ \q8E zn

  如果"/boot"挂载到一个独立的分区,用如下命令

_%vt9Not0
grub rescue>ls (hd0,msdosX)/grub

.T5FM(t.v,B lL5m0  回车后如果能列出一堆文件,说明找到了grub的位置,

UX%FMn q |)kw ^QG0
grub rescue>set root=(hd0,msdosX)51Testing软件测试网YxW4T%?#GK
grub rescue>set prefix=(hd0,msdosX)/boot/grub51Testing软件测试网*K*yWAaH7K
grub rescue>insmod /boot/grub/normal.mod

#}8Hv5jU.S%p`cvi g0  然后执行

*EoSGnHV.`0
grub rescue>normal

!wY:v vWY0  稍候,久违的grub菜单出现了。进入ubuntu,在终端执行

^(vi6Z-b _0
sudo update-grub51Testing软件测试网%M6R9P"o/Mi*NCK+Z
sudo grub-install /dev/sda
51Testing软件测试网ml _k's9s-rf M^

  其中sda是硬盘号,不是分区号

-pF(j U?5];^c051Testing软件测试网%R+{B/r B,VH

  重启后,直接进入了grub菜单,修复成功。51Testing软件测试网Z-l R p6B#_!K


TAG:

 

评分:0

我来说两句

Open Toolbar