`
bcyy
  • 浏览: 1823295 次
文章分类
社区版块
存档分类
最新评论

分析一次磁盘分区表的误操作和恢复

 
阅读更多
前两天帮谢姨装Ubuntu到一个分区上做Win7和Ubuntu双系统,当时大脑发热就直接在Win7下把Ubuntu所在的分区格式化了。然后便是各种凶残的的误操作和恢复,折腾了一夜。现在把过程写下来,对于磁盘和数据大家以后千万要谨慎!

系统配置是AMD+ATI平台,320G硬盘。Win7所在分区是hd(0,1)。
___________________________________________________________________________________

修复引导

在Win7下用磁盘管理删除那个分区之后 发生分区表错误的几率很大。(具体原因我也没弄清楚)重新开机后就显示
grub rescue>
这里的Grub是一种用于帮助你引导系统的程序(百度百科)。Grub会根据磁盘分区中的menu.lst文件找出各个分区中的boot文件,从而启动操作系统。Grub支持linux和Windows多个版本的多操作系统启动引导。显示grub rescue说明引导坏了,目前是修复模式。

Grub出问题多数是以下几种情况:

  • 磁盘中menu.lst文件超过一个。(比如C盘里有一个,D盘里又有一个)
  • 找不到对应分区的boot文件
  • 分区表错误或是分区标号调整,例如某个分区hd(0,0)变为hd(0,1)的时候

我格式化了Ubuntu所在分区,那么必然是找不到Ubuntu文件系统里的boot文件,此时这里的Grub对Win7其实是一种半托管状态。因为Windous7是在Ubuntu之前安装的,所以在安装Ubuntu之前并没有Grub程序,只有原来自带的BCD引导方式(BCD是操作系统中的启动设置数据,系统通过bootmgr程序导入BCD文件完成启动菜单的引导),在这样的基础上安装Ubuntu就会在BCD基础上增加一个Grub。

假设Win7安装在C盘,Ubuntu安装在D盘,那么引导顺序如下:
(1)启动Grub,读取D盘中的boot数据
(2)让用户选择Ubuntu或是Windows7,选择Ubuntu则进入(3),选择Windows7进入(4)
(3)开始引导Ubuntu

(4)开始引导BCD,读取C盘中的BCD数据
(5)开始引导Windows7或BCD数据中的其他项
从上面这个流程可以看出,在先装Windows7后装Ubuntu的情况下Grub并没有直接引导Windows7(除非在Ubuntu下专门设置过)而是引导你进入BCD。既然现在Grub没有作用了那只需要从第四步开始就行。用磁盘软件重做MBR是个方便快捷的方式,比如Diskman或Diskgen都带有这样的工具,而Diskman和Diskgen这样的磁盘软件一般的Dos工具箱、WinPE系统都会有的。

重做MBR之后重启就可以看到Windows7的启动界面了。可是还存在一个问题,启动的时候会出现两次主板商标画面。其实这个没什么,不影响使用。实在要取消的话,就用软盘或U盘或任何盘引导DOS然后输入命令:

fdisk /mbr

没错,就是格式化MBR,这样就干净了。如果这一步之后会出错那还需要软件来做辅助性的修复。(比较复杂,不建议尝试。)

___________________________________________________________________________________

重建分区表

首先想到的还是WinPE维护盘 http://baike.baidu.com/view/27468.htm
很多版本的PE都带了分区表医生和引导修复,之前我自己的电脑(XP的系统)就用这张盘修复了好几次。正常的思路应该就是拿PE里自带的分区表医生来重做分区表,然后看看需不需要修复引导,最后成功启动。但是谢姨的这台电脑在使用PE的时候出了些问题:PE找不到硬盘。所以PE启动后没有空间可以加载附加程序,那么也就无法加载分区表医生(PTDD),之后的操作也是妄想了。

后来我想到可以把PE写到U盘里启动,PE在光盘里是READ-ONLY的状态,在U盘里就有可写的空间,这样加载程序就没有问题了,可是用U盘PE启动后,仍然只能看到U盘和PE这两个盘符,待修复的硬盘和分区根本没有影子。脑袋里闪过一个想法:要在实模式下修复才行吗?(后来证明不是的),实模式的修复工具……那只有PartitionManager和DiskGen了。PM(或PQ)是第一个可以被排除的工具,因为我在很多台电脑上都无法正常使用,那么做一个DOS启动然后加载DiskGen吧。

在这里分享一个U盘dos系统,可以用GHOST写入到U盘或者其它盘里,然后在手动添加dos下的软件。http://dl.dbank.com/c008ce4va7
还有dos版的diskgen http://dl.dbank.com/c0h18pjcmq

实际上,DiskGen在这里也浪费了太多时间。不知道是不是因为版本问题,diskgen找到的分区表根本是错的分区表,都是些1G、0.5G大小的分区。尝试交互模式也没有效果,遍历了整个320G硬盘之后什么也没得到。现在手里只剩下一个了——Windows7安装盘。非GHOST版Win7的安装盘都有带系统修复功能,声称是不管搞成什么样都能给你修好的那种。虽然没那么神,现在也无路可走,索性试一下。话了将近40分钟的自动修复,竟然成功了,重启之后成功引导并进入系统。唯一的缺陷是——只看到我们的C盘乖乖回来了。

剩下的分区在Windows的磁盘管理里边看得到,但就是无法管理,磁盘分区表医生现在仍然不能用:虽然C盘恢复了PE下看不到,Win7下PTDD无法写分区表。最后在网上搜到了解决办法:DiskGen的Win32版本可以解决这个问题!好的,最后这台可爱的硬盘终于被DiskGen Win32救活。原来DiskGen还是很厉害的,只是版本不够新罢了。
也给个下载地址 http://dl.dbank.com/c0uj346u4w
___________________________________________________________________________________

回头来思考PE

正常情况分区表都恢复了之后,盘符可以看到了,分区也可以正常使用,但是所有东西都恢复之后,启动PE仍然看不到任何分区!这又是什么问题呢?网上搜到的答案是主版的AHCI功能,PE系统没有对应的驱动。AHCI是如今硬盘IDE接口换成SATA接口之后能提高效率的一条总线。http://baike.baidu.com/view/915161.htm PE如果不支持,在BIOS设置里将AHCI模式调整成IDE模式或IDE/AHCI兼容模式即可。

如果之前早意识到这一点,调整为IDE模式,也就可以正常启动PE系统,用分区表医生PTDD来做分区表的修复了。所以这个小问题造成的巨大浪费实在是太不应该了……

___________________________________________________________________________________

再说分区表

1.磁盘分区是很脆弱的东西,而恢复分区表更要谨慎。当遇到分区表问题的时候,就不要再往磁盘里放东西了,尽量不要做写操作,不然分区表会很难恢复。然后,你最好回忆一下崩溃前每个磁盘容量分别是多大,分区表交互式修复时会有用。

2.对于工具的使用,个人觉得PTDD比较好用。但如果数据比较重要,更安全的办法当然是先用Windows安装盘修复了C盘然后再用DiskGen Win32。因为PTDD修复了一次之后就定型了,而DiskGen有回溯的功能。

3.理论上来说,也可以把分区表删掉,然后手动做一个。这要求你清楚的知道磁盘的分区和空闲空间,不至于将一个文件分在两个分区。

4.如果你是Windows用户,Linux的分区应该很难找回来的。如果需要,把硬盘卸下来挂载到另一套已装好Linux的主机上来恢复。

5.列出我在这个过程中的两个求助:
http://zhidao.baidu.com/question/288494082.html
http://zhidao.baidu.com/question/288516764.html


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics