ubuntu和分区表都崩溃之后的修复经验

起因是手贱,经过是系统进不去,分区表搞坏,结局是重装系统.
期间学习了分区表基本知识和fdisk的基本使用方法…
首先让我来讲述整个事情的经过,然后说明解决方案…

首先是手贱把ubuntu升级到了11.04,系统开始各种出错,不过还勉强能用,接下来更加手贱的在gnome3发布的第一时间更新了gnome3…然后重启之后停留在登录界面,不能选择用户,只有一个按钮,点开是 重启 挂起 关机…很多人都遇到了这个问题.据说,杯具的源头是使用ppa源不能正确的安装gnome-shell,这时可以进入恢复模式之后,使用apt-get install unity或者apt-get install gnome-shell来解决,但我实在没搞明白在命令行中怎么连网,于是这条路断了.
接下来的考虑是使用livecd来重新安装ubuntu,于是刻了个盘,启动,安装,一切正常–直到选择分区的时候–只能检测到硬盘,不能检测到分区信息.在这里(orz billbear大神)查到了解决方案.原因就是分区表中有错误,扩展分区的结尾扇区超过了总扇区数.也就是parted爆的错误”Can’t have a partition outside the disk!”

下面是我的分区表信息,重点关注红色部分

ubuntu@ubuntu:~$ sudo fdisk -lu

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: 0x3dfce8ac

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 20408319 10203136 7 HPFS/NTFS
/dev/sda2 20408320 20613119 102400 7 HPFS/NTFS(c盘)
/dev/sda3 20613120 174580399 76983640 7 HPFS/NTFS
/dev/sda4 174580434 625153409 225286488 f W95 Ext'd (LBA)
/dev/sda5 174583808 338423807 81920000 7 HPFS/NTFS(d盘)
/dev/sda6 338425353 368418640 14996644 83 Linux(挂载到/)
/dev/sda7 368418708 372418811 2000052 82 Linux swap / Solaris(swap)
/dev/sda8 372418893 382411252 4996180 83 Linux(挂载到/tmp)
/dev/sda9 382411323 625137338 121363008 83 Linux(挂载到/home)

可见sda4的end比total sectors还要大..

我也不知道这个错误是怎么产生的,不过貌似大部分的电脑分区表都有这样或那样的错误,大部分情况下都不影响使用,但linux的parted是错误零容忍的,于是使用这里的方式手动修改分区表.然后又遇到了问题…
修改的分区表的思路就是先删除扩展分区,然后重新建立扩展分区和其中所有的分区,并且把错误的end sector修正过来,我顺利的删除了sda4,然后重建了sda4和sda5,但是当重建sda6的时候,明明在start sector输入了大于sda5 end sector的数值,依然提示”allocated”就是已经被分配了.一番google无果,考虑到ubuntu升到11.04之后已经很不稳定,而且一直想调整/home的分区大小无果,就决定直接删掉所有的ubuntu分区重新安装,反正既然能正确的重建sda5,就能保住d盘,c盘(sda2)也不动,这样windows也没有影响,而且经测试重建了sda4就可以被ubuntu安装程序正常识别分区信息,遂删除sda6789.
重启之后杯具袭来,因为这时系统还是tmd万恶的grub引导的,然后grub找不到ubuntu的分区了…
不过其实也无所谓,进livecd直接重装ubuntu,问题解决,windows无恙.

结论1,不要当小白,比如11.04和gnome3
结论2,随时备好livecd是好习惯
结论3,分区表很脆弱,win和linux的分区系统其实还是有细微差别的,使用第三方分区软件,或者品牌机的系统恢复分区,ms的动态分区什么的,都会导致分区表出现错误不能被parted识别.这是请fdisk看下是不是有分区范围越界,分区重叠,等错误,手动修改就好.