h]SI(f;R'O0x C0 1、背景
?na,H-q'\V6lu051Testing软件测试网:}ZM#RkC$B 原硬盘分区:C(NTFS)、D(NTFS)、E(350G, NTFS)51Testing软件测试网P1sS
C7i2iQ~/s
3utA#_WAe$F0 下载ubuntu-12.04-desktop-i386.iso,硬盘安装ubuntu12.04
f6R/}aKe D9h9v
Y@}051Testing软件测试网2O\O"@&Mka.n
安装时,在liveCD中将E盘分区删除,从尾部开始,新建一个100G的ext4分区,挂载到"/",再新建一个2G的SWAP分区,这时候在D盘和
SWAP之间剩余250G左右的未分配空间。继续安装,完成后grub装在了ext4分区上,系统通过grub引导,一切正常。51Testing软件测试网o6D[{2?c
C"nvrd3oWA0 重启后进入windows,用未分配的250G空间新建了一个新的NTFS分区:E盘。(注:由于windows下无法识别linux的ext文件系统,这步操作导致分区表里的ext4分区丢失,从而出现后面的问题)51Testing软件测试网9Kw:z"{{3m
51Testing软件测试网}'M\*P.AX+l 2、Grub rescue51Testing软件测试网u@$e~6]9Tg
51Testing软件测试网 ol+{'Id
|[r 再次重启系统,出现error: unknown filesystem,进入grub rescue模式
0{ p
HM.e4fq0error: unknown filesystem51Testing软件测试网x)X]G r grub rescue> |
P+X2mf't*O#_#_?0 输入ls命令查看分区51Testing软件测试网mO4E
x6H
Qvt
grub rescue>ls51Testing软件测试网1loO+Y+WC (hd0) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1) |
51Testing软件测试网#~'@axU
R;|h*} 对四个分区分别ls,尝试找到grub所在的分区
'F;?BGs-E"{0grub rescue>ls (hd0,msdosX) |
51Testing软件测试网2X7Z&\ eZ5e 但是四个分区都返回error: unknown filesystem(注:这是因为分区表中已经不存在grub所在的ext4分区),直接在grub rescue下修复似乎不可能。好在还有liveCD可以看看硬盘究竟怎么了。
:@^r;LM051Testing软件测试网 gg(S)e%hDD2F 3、找回丢失的linux分区51Testing软件测试网bUG*l#F%c"c
-XB0b
B5nV qR{0
由于没有光驱,我优先考虑制作U盘liveCD,尝试了用UNetbootin和UltraISO把ubuntu-12.04-desktop-
i386.iso镜像写入U盘,都没法启动(U盘也试过两块,一块1G的,一块16G的,都失败了,1G U盘拿来做win
pe启动盘倒是成功了),具体原因我没有深究。为了节省时间,我借了个USB光驱和ubuntu12.04安装光盘。51Testing软件测试网[
S2d"I`B*Z%j$M(A8C
51Testing软件测试网2k\HkC? 从liveCD进入ubuntu系统,用fdisk命令查看分区,果然已经看不到ext4分区了。51Testing软件测试网T} r/x(oDY
o3s5o
G
JI qx pw u9c0
传说testdisk是修复分区表的神器,apt-get失败后(原因未知),我手动下了个6.14版,运行,选择硬盘,扫描,一段时间后扫出七八个带
D标记的分区(Deleted),都是之前折腾分区的产物,找到其中start和end能和已有分区接上的那个Linux
ext4分区,按P键查看分区文件列表,确定这就是丢失的那个分区,然后按左右键把这个分区标记从D改成*(Bootable
Primary),不过在这之前要先把C盘的*标记改成P(Primary),可能是因为bootable分区只允许有一个。按操作提示把这些改动写入分
区表。
9W$V
s~8[E"l0ARmv'Rk0 退出testdisk后,再次运行fdisk,可以看到ext4分区已经找回来了。
(W&K_ fzG051Testing软件测试网h`p8hKeR 4、修复grub51Testing软件测试网 H)CItp;p0iOS
51Testing软件测试网^"VV:f7a/o)H 重启,仍然进入grub rescue,用第二部分介绍的方法逐个分区ls,直到ls (hd0,msdosX)能列出分区下的文件,对于有多个linux分区的情况,需要进一步查看是否存在/boot/grub。51Testing软件测试网
q4`,kUpr
51Testing软件测试网gDy1\*C8pZ\ 如果"/boot"没有单独挂载,用如下命令51Testing软件测试网#b/LGllf1dh
grub rescue>ls (hd0,msdosX)/boot/grub |
e-u"g2?4Q;I7{Z0 如果"/boot"挂载到一个独立的分区,用如下命令
9q[TG(EkQ;[0grub rescue>ls (hd0,msdosX)/grub |
9HY2BxO]!g0 回车后如果能列出一堆文件,说明找到了grub的位置,
%Zv*ebHVW,}0grub rescue>set root=(hd0,msdosX)51Testing软件测试网%YV B,Z+@"L \ grub rescue>set prefix=(hd0,msdosX)/boot/grub51Testing软件测试网 s9@
E,_8t!S grub rescue>insmod /boot/grub/normal.mod |
51Testing软件测试网9f-vq
s@Vq@)M 然后执行51Testing软件测试网
Y.~
\Rl:ee,gEs O
51Testing软件测试网:hv&Usufbw]8M,j? 稍候,久违的grub菜单出现了。进入ubuntu,在终端执行51Testing软件测试网J8d6ys!|[9o4LS
sudo update-grub 7B6SY
z4dE!Q0sudo grub-install /dev/sda |
R7JitKp5a2Q,t*c0 其中sda是硬盘号,不是分区号
7_?\"@8p-Zm/wR2C@051Testing软件测试网
T$g1|"n oc"`~ 重启后,直接进入了grub菜单,修复成功。51Testing软件测试网 J+l+YPB`