你好,我正在尝试修复硬盘损坏的 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