如何使用 dd 修复输入/输出错误?

Era*_*zer 18 hard-drive drive dd

嗨,我正在尝试用损坏的硬盘修复我的 Windows 7 系统,但它仍在运行。

我正在尝试将所有数据复制到新驱动器以重新安装 Windows 7。驱动器名为 SQSERVICE。

我根本无法复制 - 见下文:

$ sudo dd if=/dev/sdc1 of=/dev/sda1
dd: reading `/dev/sdc1': Input/output error
11233976+0 records in
11233976+0 records out
5751795712 bytes (5.8 GB) copied, 187.731 s, 30.6 MB/s
Run Code Online (Sandbox Code Playgroud)

如何解决这个“输入/输出错误”?

Den*_*ker 19

你自己说的:你的磁盘坏了。你可以试试ddrescue,它也许可以绕过损坏的路径。但请注意,您将丢失数据。

从备份中恢复会更容易:)

的正确用法ddrescue如下:

sudo apt-get install gddrescue
sudo ddrescue /dev/sdc1 /dev/sda1
Run Code Online (Sandbox Code Playgroud)

或者,如果您想通过管道stdout传输到进程监控工具:

sudo ddrescue /dev/sdc1 /dev/sda1 | pv
Run Code Online (Sandbox Code Playgroud)

  • 所以你的备份和你要备份的驱动器在同一个驱动器上?!*笨蛋* (2认同)

Pet*_*ter 7

我不知道这是否对任何人有用,但如果我在搜索中找到了这个页面,也许它会帮助某人(除了几个月前希望解决他的问题的 OP)。

在这种情况下,ddrescue 可能是最佳选择,用于数据恢复(不同于“修复”错误/磁盘,因为原始问题的措辞是这样的),正如丹尼斯所建议的那样。

或者,您也可以挂载磁盘并复制文件。如果有很多空白空间,或者如果您只想要一些特定文件,这会快得多。警告:在 Linux 机器上完成,这会丢失所有扩展属性,例如文件权限,因此对于 OS 文件来说是一个非常糟糕的选择,但对于用户文件来说是可以容忍的。从 Windows 执行它应该保留这些,但可能无法顺利处理错误,可能会使其运行速度非常慢。

实际“修复”扇区而不是绕过它们的另一种选择是重新分配坏扇区。如果您知道扇区号(在您的情况下,假设块大小为 11233976,假设块大小为 dd,扇区大小为 512),只需运行此程序,然后为您找到的每个新坏扇区再次运行:

hdparm –write-sector 11233976 –yes-i-know-what-i-am-doing /dev/sdb
Run Code Online (Sandbox Code Playgroud)

警告:这将破坏该扇区上的数据。所以一定要确保你真的知道你在做什么。如果无法读取该扇区,覆盖它会停止错误,但这意味着该扇区将包含垃圾,可能会损坏重要文件。

有关更多信息,请参阅:http : //www.sjvs.nl/forcing-a-hard-disk-to-reallocate-bad-sectors/

如果您的磁盘有大量(可能有数千个)坏扇区(被视为 Current_Pending_Sector、Offline_Uncorrectable 或 Reallocated_Sector_Ct),或者它是新的并且仍在保修期内,或者如果数量随着时间的推移持续增加,那么您应该更换磁盘反正。不要让他们告诉您重新分配可修复磁盘。它只修复已知的坏扇区并消耗为重新分配保留的扇区。如果磁盘容易出现更多坏道,问题就会不断出现,每次都会破坏一些数据。


小智 6

虽然磁盘的某些部分已损坏,但您仍然可以复制磁盘的完好部分。

$ dd --help
...
 noerror   continue after read errors
...
Run Code Online (Sandbox Code Playgroud)
sudo dd if=/dev/sdc1 of=/dev/sda1 conv=noerror
Run Code Online (Sandbox Code Playgroud)