星期二, 九月 05, 2006

好险!差一点把硬盘数据废了


以后再也不能胡乱dd引导记录了。

事情是这样的:
移动硬盘里有/dev/sda1 /dev/sda2 /dev/sda3 /dev/sda5这样几个分区
/dev/sda3是个只有6.5GB的FAT32。俺把电驴到的一些东西放这儿了,其中包括MIT那个线性代数的教学录像。

俺刚刚把/dev/sda1格了,想练习安装gentoo。刚刚想要安装个grub,可是usb上的磁盘似乎不太听话。于是,用旧系统的grub强行setup,未通过。于是想到
dd if=/boot/grub/stage1 of=/dev/sda bs=512 count=1

安装stage1,这一步挺好。
可是俺不知怎么的,糊里糊涂把ext2的stage1.5给写到stage1后头的分区表上了。结果,移动硬盘上的分区全都消失了。
GRUB给我的信息是:

GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUBGRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB
...


“饿地神啊!”俺的MIT录像啊!我可不想被那倒霉的电骡再折磨一次!1.xG的文件,队列循环的不是贼慢,也是小偷慢!!!于是赶紧回到Windows以应万全。

还好,用WinHex+EasyRecovery+PQMagic的那个分区表修改工具,俺还是把分区表手动修复了。因为前面几个分区没什么重要数据,俺直接忽略了。实践证明,应该先用WinHex编辑物理磁盘的功能,在适当的位置,开始搜索"FAT32 "(大写,有两个空格,胺ascii而非unicode查找),这是FAT32分区的fs类型标记。当然,结果还是要人工判读,以免你磁盘上大量充斥着“FAT32 ”字样的文件扰乱视听。找到结果,把那个扇区的offset的值记下来,除以512,得到sector号。这时,可以EasyRecovery上场了。

俺用的系onlinedown.net上的6.10 Professional版。选择的是“Data Recovery”的“AdvancedRecovery”。Advanced Options里面,先写好刚才查到的sector号作为起始扇区(,好像是要减1,大概是起点不太一样),然后在旁边的一个标签指定FAT32文件系统,其他的默认好啦!这样,可以找到FAT32文件系统的LBA地址(也就是8位的十进制扇区号,似乎等同于磁盘的geometry什么之类的,反正这么靠后,CHS不顶用了)。这样本来就好啦,你可以用EasyRecovery导出分区里面的文件,可是,EasyRecovery似乎不答应你修改磁盘的!你想恢复磁盘分区,只有靠自己的聪明才智啦!

众所不周知,PQMagic里面有一个小工具(至少8.0里面有,更新的版本就不晓得了,工具没必要跟潮流),那就是PTEdit32。这是专门手动修改分区表的,自由到除了定位分区表和提供分区类型之外,没什么其他有智慧的功能了。但是,这就足够了。

把WinHex计算出来的Sector号写在Sectors before(不晓得为什么中文版会混账的翻译作“扇区之前”!),结尾用EasyRecovery得到的那个,结尾减去起始,自然就是sector数,填入“扇区”一栏,前面就留作自由空间,数值类推。保存。这时,把磁盘拔下,再插上,已经可以看到FAT32分区了!如果你对分区表不满意,直接启动pqmagic,不是为了调整分区,而是任劳任怨的PQMagic自己看到分区表不顺眼——你自己写的不全嘛——会喋喋不休的帮你把它改过来。因为LBA是正确的,所以,CHS什么的会被LBA转过来的数据盖上。好啦!圆满啦!

此外,致谢:
Microsoft Windows 2k安装盘的支持工具中的dskprobe.exe,虽然拿出来看了看,不过还是一点忙也帮不上,白白让您老跑了一趟来着……

没有评论: