昨天我为了安装新系统调整了一下分区,不过因为操作失误,把分区表弄坏了。今天终于得以恢复,高兴之余,作点记录。
问题引发的具体原因已经无从查起,首先发现/dev/sda2 不能mount成功。用磁盘实用工具查看发现文件系统是未知。
由此看来是分区引导记录损坏造成。用testdisk命令找回了分区。
可是,又一次操作失误,由于testdisk停止过早,还没扫描出后面有用分区,我就Write了。导致后面分区的丢失。
不过没有关系,用testdisk再找回来。成功找到了所有分区,Write。
此时硬盘使用中没有其他问题了,但是用GParted打开看到整个硬盘是未分配状态。
用 fdisk -l 依然能看到所有分区。
用磁盘实用工具查看,发现testdisk找回了分区,但是把分区结构搞错了,一个逻辑分区跑到了扩展分区外面。
由于用GParted不能识别和调整分区了,看来问题很严重。
经过搜索(Yahoo: GParted Unallocated Space),我找到了与我同样的问题:
http://ubuntuforums.org/showthread.php?t=1669219
解决方法是用sfdisk来调整,这是一个分区引导修复工具,这里简要提一下修复过程。
(这些命令需要su权限,做这些以前,务必先用testdisk找回所有分区,不管结构对不对)
首先 sfdisk -d /dev/sda > parts
然后调整分区的名字(逻辑分区要用sda5、sda6...来命名)、次序(逻辑分区那行放在扩展分区这行的后面)、大小(回忆以前的分区结构,重新估算每个分区大小以及扩展分区的起始偏移)
然后检查一下所有分区有没有重叠,有没有分区扩展到磁盘容量以外(GParted不能看到分区就是这个原因),这很关键。保存这个文件。
最后用 sfdisk --force /dev/sda < parts 写分区表,并用 partprobe 刷新分区
如果上面参数设置无误,是一定能将分区拯救回来的。这其中可能需要读者一定的估算和计算,才能把分区信息写正确。
然后GParted就可以看到所有分区了,之后做更多优化调整。我现在已经恢复所有分区了!
网上搜索类似的问题,最后往往是以“格式化”结贴的。所以最后,给大家的建议是,常记得备份数据、备份分区表、备份主引导,这样灾难就不会发生了。