ddrescue 日志文件表示什么?

ddrescue 日志文件表示什么?

我正在运行 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 终端输出

我耐心地让它再运行一周来完成复制。与此同时,我对进度感到焦虑。我不清楚:

  1. 日志文件中的“*”[失败的块未修剪],是否意味着这些区域/块中的部分或全部数据丢失了?
  2. 读取错误:10 [在终端窗口中]。目前已挽救了 33% 的情况有多糟糕?

计划是从这个中间副本制作另一个副本,然后尝试稍后在第二个副本驱动器上使用 TestDisk 恢复分区或数据。所以,如果这看起来很有希望,那么我应该继续执行该计划。

答案1

  1. 日志文件中的“*”[失败的块未修剪],是否意味着这些区域/块中的部分或全部数据丢失了?

没错。现在不用担心。未经修剪的木块不值得害怕。

  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 的磁盘映像会比使用故障磁盘更有效率。

相关内容