背景:电脑Win7、Ubuntu双系统(64bit),买电脑时分好了区,C盘分了100G,后来装Ubuntu,调整了C盘大小,具体怎么弄得忘了,反正最后的分区情况是:
主分区:
Recovery 25G FAT32 出厂时分的一个还原的
C: 40G NTFS Win7系统
/ 15G EXT3 Ubuntu根目录
扩展分区:
Swap 4G Ubuntu交换分区
/Home 35G EXT3
D: 90G NTFS
E: 100G NTFS
F: 150G NTFS
Ubuntu在下了两个Android源码编译之后就已经基本没空间了,又不想重新分区安装,所以决定把D盘删除了合并到/home中,所以就先到Win7中将D盘所有东西移走,然后将D盘删除,悲剧就此上演,删除的过程中不知咋的蓝屏了,重启后,好家伙,带着/home和交换分区全给删了,启动Ubuntu提示找不到/home。
分区丢失这种情况自己移动硬盘遇到过几次,所以也没心急,知道数据还在,平常是用DiskGenius这个软件来搜索丢失分区进行恢复,所以试着恢复,DiskGenius能够很容易的搜索到删除的D盘,却死活找不到/home分区了,勉强找到也是无法识别,这点也容易明白linux下能识别ntfs分区,但是windows下识别不了ext分区,所以看来找回分区还得到ubuntu下去才行。
所以呢,进入Ubuntu的LiveCD(我的移动硬盘做成了启动盘),然后找到了传说中的神器:testdisk,果然,轻松找回了swap、home和之前的D盘,恢复后windows、ubuntu都启动OK,文件也未丢失。
到这里貌似要结束了,可是很显然没这么简单,之前说了,我需要删除D盘合并到/home,在不删除文件的情况下调整分区大小,使用的是Ubuntu下的gparted,可这次启动gparted之后,问题来了,整个硬盘显示未分配,无法显示分区信息,使用命令sudo parted /dev/sda print ,显示“错误: 无法让分区超出磁盘!”,sudo fdisk -lu ,信息如下:
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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: 0x38601c96
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 52430847 26214400 c W95 FAT32 (LBA)
/dev/sda2 52430848 134350832 40959992+ 7 HPFS/NTFS/exFAT
/dev/sda3 134350848 163647487 14648320 83 Linux
/dev/sda4 163647540 976784129 406568295 f W95 Ext'd (LBA)
/dev/sda5 163649536 169648111 2999288 82 Linux swap / Solaris
/dev/sda6 169650176 259014655 44682240 83 Linux
/dev/sda7 259028992 457605119 99288064 7 HPFS/NTFS/exFAT
/dev/sda8 457607168 667322367 104857600 7 HPFS/NTFS/exFAT
/dev/sda9 667324416 976771071 154723328 7 HPFS/NTFS/exFAT
可以看到/dev/sda4,就是扩展分区,end为 976784129,而磁盘总大小只有 976773168,所以提示超过了边界。
最后在网上搜索,看到这个方法http://blog.qijianjun.me/2011/02/16/over-disk-partation-error-practice.html,自己手动调整分区表大小,文章中说到一定要保证分区的开始位置跟之前一致,我在删除了/dev/sda4~/dev/sda9后重建/dev/sda4,start跟之前一样,end调整为 976773168,然后在建立/dev/sda5时start位置不允许使用163649536,因为正好这里是交换分区,所以影响不大,最后sda4和sda5的start位置都没有跟之前一致,其它几个分区保持了一致。
调整完后写入,重启,OK,文件没丢失,gparted也能显示分区信息了,然后就是在livecd中用gparted删除D盘,扩大/home,最终一切搞定!
这次分区恢复和调整总结了几点:
1.不要windows合linux下的磁盘工具交叉使用,很容易引起问题(我的估计就是这样引起)
2.linux下能兼容ntfs分区,windows中不兼容ext分区,所以双系统情况下对磁盘的操作最好在linux下进行。
3.这几个磁盘工具软件:windows下的DiskGenius,Linux的testdisk、gparted,都是比较给力的工具,还有就是fdisk,相关命令最好熟悉。