[原]使用dd命令协助拯救0磁道损坏的硬盘
2021年8月25日 15:23
•
linux专区
dd 是Linux下面常见的一个按块大小操作数据拷贝的命令,在拷贝的同时还可以进行指定的转换工作。不过,我今天要说明的不是其转换的用法,而是用它来协助拯救0磁道损坏的硬盘。 大概的情况是这样的:有块硬盘,分了两个分区,分区一是系统分区,安装了Windows XP;分区二是数据分区,存放了大量的数据文件。几天前,突然报硬盘0磁道损坏,MBR不能读取,由于MBR损坏,导致分区表一同丢失,后使用坏道检测、分区表修复等工具尝试修复,均不成功。 解决过程:分区一基本是恢复无望了(坏道太多),而且数据不重要。考虑到硬盘存放数据的结构,分区二的数据应该还是正常的,但MBR不能正常读写,为此,我利用dd,把其上的数据拷贝到另一个硬盘上,然后通过修复分区表,最后成功恢复了分区二的所有数据。
一、原理 硬盘的逻辑结构可见: 这里。 简单来说,就是MBR是负责管理分区信息的,但实际数据,如文件名、目录信息、文件内容等都是放在分区地址后的实际磁盘扇区下面的。这就是分区表损坏,修复后数据不会丢失的原因。 这次,我的分区二是找到了,但写不进MBR里面,所以必须借助另一个硬盘。
二、解决过程 1、坏硬盘的情况 在修复前,需要确认该硬盘到底坏在那里。既然,BIOS里面可以识别到它,也就是硬盘主板是正常的。※ 修复的前提:为保证不会损坏数据,在修复时,务必需要小心,不要覆盖实际数据,对原实际数据不要进行任何写操作。
使用深山红叶工具光盘启动,运行PQMagic工具,报如下的错误:
引用
a、找一个比这个坏硬盘更大的硬盘A,然后用dd跳开坏的扇区,并拷贝剩余的数据到好的硬盘B上; b、使用Partition Table Doctor修复硬盘B上的分区表。
把两个硬盘都接到一台机器上,使用光盘启动,例如linux rescue进入光盘拯救模式,并运行:
引用
# dd if=/dev/hdc of=/dev/hda bs=1024 skip=80480 seek=80480 15621042424+0 records in 15621042424+0 records out 159959474176 bytes (160GB) copied,67808.1 seconds,2.4MB/s
其中,hdc是坏硬盘A,hda是好硬盘B,并跳过80480个块,每个块1K。这是为安全,我仅按每个块1K的大小来拷贝,所以速度非常慢。如果您想提高速度,可以加大每个块的大小,并计算跳过的块数量即可。 skip和seek分别表示跳过输入的和输出的块数量。
操作完成后,把坏硬盘A拿走,使用深山红叶上的“Partition Table Doctor”重建分区表: 三、其他 基于同样的原理,在某个项目中,也遇到一个盘柜,因用户误操作,导致盘柜的分区被更改为Sun OS格式。 但分区后,并没有进行格式化的工作。这时,盘柜中的实际数据一般也是没有丢失的。 所以,可以使用dd 先保存部分需要修改的数据信息:
# dd if=/dev/sdb of=/mnt/usb/databackup.dd bs=1024k count=1024
也就是备份1个GB的数据,万一出现问题,可以恢复。
然后,使用dd 删除Sun Label:
# dd if=/dev/zero of=/dev/sdb bs=512 count=1
最后,使用fdisk /dev/sdb按原来的大小重建分区表,保存后挂载,数据恢复。
Asianux 4.0 的拯救模式 Linux Magic Key——SysRq(R-E-I-S-U-B) [转]如何创建第三方驱动盘
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/105359.html