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

如何使用 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

如何修复此“输入/输出错误”?

答案1

你自己说的:你的磁盘坏了。你可以试试ddrescue,也许可以绕过损坏的路径。但要小心,否则你会丢失数据。

从备份恢复将更容易:)

正确的用法ddrescue如下:

sudo apt-get install gddrescue
sudo ddrescue /dev/sdc1 /dev/sda1

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

sudo ddrescue /dev/sdc1 /dev/sda1 | pv

答案2

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

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

或者,您也可以安装磁盘并复制文件。如果有大量空闲空间,或者您只需要某些特定文件,这种方法会快得多。警告:如果在 Linux 机器上执行此操作,则会丢失所有扩展属性,例如文件权限,因此对于 OS 文件来说这是一个非常糟糕的选择,但对于用户文件来说可以接受。从 Windows 执行此操作应该会保留这些属性,但可能无法顺利处理错误,可能会使其运行非常缓慢。

另一种真正“修复”扇区(而不仅仅是绕过它们)的方法是重新分配坏扇区。如果您知道扇区号(在您的例子中,假设 dd 中的块大小为 11233976,扇区大小为 512),只需运行此命令,然后对找到的每个新坏扇区再次运行:

hdparm –write-sector 11233976 –yes-i-know-what-i-am-doing /dev/sdb

警告:这将破坏该扇区上的数据。因此,请确保您确实知道自己在做什么。如果无法读取该扇区,则覆盖它将阻止错误,但这将意味着该扇区将包含垃圾,可能会损坏重要文件。

请参阅此以了解更多信息:http://www.sjvs.nl/forcing-a-hard-disk-to-reallocate-bad-sectors/

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

答案3

当磁盘的某些部分损坏时,您仍然可以复制磁盘的良好部分。

$ dd --help
...
 noerror   continue after read errors
...
sudo dd if=/dev/sdc1 of=/dev/sda1 conv=noerror

答案4

我有一个驱动器出现 IO 错误,最重要的是驱动器在读取几分钟后自行断开连接,但几秒钟后又恢复了连接,这也是我使用的原因,disk/by-uuid因为设备名称在发生这种情况后发生了变化。我扩展了丹尼斯的答案这个无限期运行:

#!/bin/bash
while [ true ]
do
    echo "start ddrescue"
    ddrescue -O  --retry-passes=3 /dev/disk/by-uuid/<uuid> /media/<other-disk>/data.img  /media/<other-disk>data_ddrescue_map
    echo "ddrescue end, sleep 30"
    sleep 30
done
    

这将使用带有映射文件的 ddrescue,这样您就可以重新启动程序,ddrescue 将继续执行之前的操作。它将数据恢复到 .img 文件。

-O参数的意思是“每次读取错误后重新打开输入文件”。

每次失败时,脚本都会休眠 30 秒,然后重试。经过近一天的时间,我已恢复 99%,之后它停滞了。我让驱动器冷却下来,然后重试,然后恢复到了 100%。

警告:脚本将永远运行,除非您自行终止它,否则您对结果不满意。

使用这些命令,您可以挂载创建的映像来浏览文件:

sudo mkdir /media/data-image
sudo mount -o loop,ro /media/<other-disk>/data.img /media/data-image

相关内容