如何告诉 rsync 跳过损坏硬盘块上的文件,而不是卡在尝试读取它

如何告诉 rsync 跳过损坏硬盘块上的文件,而不是卡在尝试读取它

我正在尝试从存在硬件错误的磁盘恢复文件。

磁盘实用程序已修复磁盘,但它告诉我磁盘已损坏,因此我需要在发生故障之前备份所有内容。

所以我尝试通过 Finder 复制文件,但卡住了。尝试了其他实用程序,当磁头碰到损坏的块时,它们在尝试复制文件时卡住了。

因此我尝试使用 rsync,它似乎可以工作;但是当我遇到坏块时,它需要很长时间。

所以我想知道,如果花费的时间太长,是否有办法告诉 Rsync 甚至不要理会文件?我可以指定每个文件的尝试次数,或者每个文件需要尝试多长时间?

老实说,我不确定这个驱动器可以使用多长时间,所以我想尽快获取所有数据,同时我仍然可以安装它并在 Finder 中查看其上的数据。

这就是我正在使用的命令;请建议是否有任何方法可以减少文件的尝试,这样我就可以让 rsync 尝试读取损坏的块,但避免在特定扇区上停留太久。

rsync -arv -e--ignore-errors --partial-dir=/Volumes/backup/partial /Volumes/work /Volumes/backup

提前致谢。

答案1

简短回答:rsync在这种情况下,它不是合适的工具:使用它甚至可能有害。
改用ddrescue(优于dd_rescue)。它能够满足您的要求。


如果磁盘受到物理损坏,则有可能任何试图修复它的尝试。

这不仅仅是关于使用你的时间,当rsync接近损坏的扇区时似乎会永远挂起。问题是,随着重复操作,可能会发生无法修复的故障,然后您将无法再在不更换昂贵部件的情况下挽救数据(如果仍然可能并且您没有砖砌的你的硬盘)。

在这种情况下,我发现最安全的方法是

  1. 要创建一个原始图像在另一个未损坏的磁盘上。
  2. 要创建一个复制该图像的
  3. 处理副本以修复文件系统并拯救文件

为什么要复制?因为如果它失败了文件系统修复步骤你可以随时重新开始,而不需要再次接触原来的损坏硬盘

我建议你使用ddrescue,制作原始磁盘映像,包括缺陷,因为即使出现读取错误,它也能正常工作。


如何做ddrescue

您可以ddrescue完全按照自己的意愿使用rsync,跳过损坏的扇区而不重试或拆分它们,复制尽可能多的数据。
此命令如下(而不是/dev/hda1您将放置设备):

ddrescue --no-split /dev/hda1 imagefile logfile

之后你就完成了第一段(更快的一个),可以尝试优化一下,多试3次,以免出错。

ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile 

您可以继续完善图像,重复ddrescue使用其他选项的命令调用,每次都尝试提取更多数据(请参阅参考资料)。完成后,您可以创建副本(如果您拥有所有所需的空间),然后修复文件系统

请注意,原始图像将与原始图像一样大硬盘您可以在互联网上、
这个网站上以及 StackExchange 的其他网站上找到许多问题和答案关于如何使用ddrescue或其他工具拯救数据。

参考:

答案2

我在寻找从故障 SD 卡(Ubuntu 20.04)保存数据的解决方案时发现了这个主题。

答案哈斯塔很棒,尽管这些命令在 Ubuntu 20.04 上对我来说不起作用。

基于格伦普芬布尔评论和ddrescue --help

  • 标志已被删除,因此 --no-split可以使用--no-scrape

    -n, --no-scrape 跳过抓取阶段

ddrescue --no-scrape /dev/hda1 imagefile logfile

并且精炼的命令也发生了改变。

  • 使用-d--idirect直接访问输入文件的磁盘

    -d, --idirect 使用直接磁盘访问输入文件

  • 我们可以--max-retries=3使用-r--retry-passes=<n>

    -r, --retry-passes=重试通过后退出(-1=无穷大)[0]

ddrescue --idirect --retry-passes=3 /dev/hda1 imagefile logfile 

我认为这篇文章没有任何功劳,它只是对答案的更新哈斯塔

相关内容