我正在运行 ddrescue,试图将我快要坏掉的 2TB Seagate Baracuda 硬盘复制到新的 4TB 硬盘上。现在,它已经运行了 5 天,在终端屏幕上我看到了一些读取错误。目前救援工作大约完成了 33%。以下是我原始帖子的链接,用于了解背景原始帖子。
以下是今天的 ddrescue 日志文件:
# Mapfile. Created by GNU ddrescue version 1.26
# Command line: ddrescue -d -f -r3 /dev/sdb /dev/sdc sdc.log
# Start time: 2023-02-18 05:03:10
# Current time: 2023-02-23 10:44:03
# Copying non-tried blocks... Pass 1 (forwards)
# current_pos current_status current_pass
0x9873E60000 ? 1
# pos size status
0x00000000 0x47AC630000 +
0x47AC630000 0x00010000 *
0x47AC640000 0x01320000 ?
0x47AD960000 0x479140000 +
0x4C26AA0000 0x00010000 *
0x4C26AB0000 0x01320000 ?
0x4C27DD0000 0x2FA860000 +
0x4F22630000 0x00010000 *
0x4F22640000 0x01320000 ?
0x4F23960000 0x1F7230000 +
0x511AB90000 0x00010000 *
0x511ABA0000 0x01320000 ?
0x511BEC0000 0x32780000 +
0x514E640000 0x00010000 *
0x514E650000 0x01320000 ?
0x514F970000 0xC5D00000 +
0x5215670000 0x00010000 *
0x5215680000 0x01320000 ?
0x52169A0000 0x111D50000 +
0x53286F0000 0x00010000 *
0x5328700000 0x01320000 ?
0x5329A20000 0x2067810000 +
0x7391230000 0x00010000 *
0x7391240000 0x01320000 ?
0x7392560000 0xA39120000 +
0x7DCB680000 0x00010000 *
0x7DCB690000 0x01320000 ?
0x7DCC9B0000 0x1AA74C0000 +
0x9873E70000 0x1394D2A6000 ?
以下是终端的输出: ddrescue 终端输出
我耐心地让它再运行一周来完成复制。与此同时,我对进度感到焦虑。我不清楚:
- 日志文件中的“*”[失败的块未修剪],是否意味着这些区域/块中的部分或全部数据丢失了?
- 读取错误:10 [在终端窗口中]。目前已挽救了 33% 的情况有多糟糕?
计划是从这个中间副本制作另一个副本,然后尝试稍后在第二个副本驱动器上使用 TestDisk 恢复分区或数据。所以,如果这看起来很有希望,那么我应该继续执行该计划。
答案1
- 日志文件中的“*”[失败的块未修剪],是否意味着这些区域/块中的部分或全部数据丢失了?
没错。现在不用担心。未经修剪的木块不值得害怕。
- 读取错误:10 [在终端窗口中]。目前已挽救了 33% 的情况有多糟糕?
这取决于哪些扇区不可读,因为这些扇区的重要性并不相同。
最好的情况是所有错误都属于一个文件,而该文件的丢失您可以承受。但事实很可能并非如此。
最糟糕的情况是错误发生在基本元数据结构中。当您尝试使用 Testdisk 访问分区时,您就会看到这种情况。
如果失败,您将需要一个恢复程序来处理分区上文件系统的特定残留。如果没有可用的元数据剩余,Photorec 可能会帮助您作为防止数据丢失的最后一道防线。
如果您使用 ddrescue 的 mapfile 功能,数据恢复将非常高效(仅读取所需的块)。您也可以随时中断恢复,稍后再恢复
harrymc 引用的 ddrescue 手册中的那句话具有误导性并且是错误的!
什么是“需要的块”?!只需要使用过的块。要了解什么是使用过的块,您必须了解分区方案和文件系统。但 ddrescue 并非如此 - 它在各个方面都适用。它会尝试读取all blocks
您访问的设备,不仅是使用过的设备,还会尝试避开具有大量不可读扇区的区域。
答案2
您所说的日志文件实际上是映射文件,它用于跟踪后续 ddrescue 运行中仍需完成的工作。
您可以在 GNU ddrescue 手册:
ddrescue 的基本操作是全自动的。也就是说,您不必等待错误、停止程序、从新位置重新启动等。
如果您使用 ddrescue 的 mapfile 功能,数据恢复将非常高效(仅读取所需的块)。您还可以随时中断恢复,稍后在同一点恢复。mapfile 是 ddrescue 有效性的重要组成部分。除非您知道自己在做什么,否则请使用它。
要保留的要点:
- mapfile 是 ddrescue 的记录簿
- 在所有 ddrescue 调用中指定相同的 mapfile 非常重要,这样后续运行就不会重复已经成功的挽救操作
- 第一个 ddrescue 将复制所有容易挽救的扇区,因此从逻辑上讲它将是最慢的
- 后续运行将尝试恢复硬错误
- 并非所有扇区都需要恢复,只要足以恢复数据即可
- 如果您以后希望使用其他数据救援程序,则使用 ddrescue 的磁盘映像会比使用故障磁盘更有效率。