如何编辑 ddrescue 日志文件以便从某个位置恢复?

如何编辑 ddrescue 日志文件以便从某个位置恢复?

我正在尝试使用GNU ddrescue日志文件对 500GB 的磁盘进行映像。我达到 420GB 后,我用 停止了它ctrl+c。一段时间后,我再次运行该命令,尽管有一个日志文件,但它又重新开始了。

旧日志文件已被覆盖ddrescue

就像我说的,到目前为止,我的映像文件占了 420GB,而磁盘大小为 500GB。我该如何编辑日志文件或指示从 420GB 左右ddrescue恢复?我花了好几天的时间ddrescue才达到 420GB。我不想重新开始这个过程。

这是日志文件:

# Mapfile. Created by GNU ddrescue version 1.21
# Command line: ddrescue /dev/sdd /media/myname/New Volume4/backup.dmg /media/myname/New Volume4/logfile.log
# Start time:   2016-05-17 13:08:39
# Current time: 2016-05-17 13:08:48
# Copying non-tried blocks... Pass 1 (forwards)
# current_pos  current_status
0x0C770000     ?
#      pos        size  status
0x00000000  0x0C770000  +
0x0C770000  0x7464496000  ?

这就是sudo fdisk -l我想要映像的磁盘的内容:

Disk /dev/sdd: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disk identifier: 0xeea5da13

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1              63   976768064   488384001    7  HPFS/NTFS/exFAT

答案1

日志文件中的十六进制数字0x0C770000表明读取了大约 200 MiB。这证实了您的说法,即ddrescue重新开始。

要进行修改,首先获取图像的十六进制近似大小:

printf "%x\n" $(($(wc -c < "/media/myname/New Volume4/backup.dmg")-4096))

(为了以防万一,我4096从实际尺寸中减去了它。这可能没有必要,但不会造成任何损害。)

然后0C770000用结果数字替换日志中的每个数字(需要替换三次)。请注意,有0x一个前缀您不应该碰。要使用 执行此操作sed

sed -i 's/0C770000/the_resulted_number_here/' "/media/myname/New Volume4/logfile.log"

注意:我不知道为什么第二次尝试要重新开始而不是继续。日志文件现在(几乎)和你中断的传递后一样(如果没有读取错误),因此这种行为可能会因为相同(尚不清楚)的原因而再次出现。

重新开始ddrescue

ddrescue /dev/sdd "/media/myname/New Volume4/backup.dmg" "/media/myname/New Volume4/logfile.log"

相关内容