使用 gddrescue 将设备克隆到多个映像文件中

使用 gddrescue 将设备克隆到多个映像文件中

我尝试使用 ddrescue 从 1TB 外部驱动器中拯救数据,因为我不小心删除了其中的所有内容。实际上,我必须面对与此处发布的完全相同的情况:如何分割 ddrescue 磁盘映像并如何再次使用它?但在那方面问题,第一部分,这是我的整个问题,尚未得到答复,在阅读论坛期间,我只能找到与我的情况不同的指南,即恢复到同一位置,恢复到与第一个驱动器具有完全相同存储容量的其他驱动器,将多个分区救援到容量大于第一个驱动器的外部硬盘驱动器所有必须获救的人一起等。

所以,我的问题是:我必须从 1TB 外部 HDD 中拯救数据。为此,我有一个外部 HDD,上面有大约 935 GB(不是 GiB)可用空间,此外,在我的笔记本电脑上的 Windows 分区(目前是空的)上,我有大约 222 GB 可用空间。我做了以下操作:我开始 ddrescue

/# ddrescue -n -s900GB /dev/sdc /media/misi/Maxtor/recovery/recovery_part1.img /home/misi/recovery_log.txt

仅将前 900 GB 保存到外部驱动器。一切都很顺利,我收到了以下输出:

GNU ddrescue 1.17
Press Ctrl-C to interrupt
rescued:   900000 MB,  errsize:       0 B,  current rate:   64104 kB/s
   ipos:   899999 MB,   errors:       0,    average rate:   38981 kB/s
   opos:   899999 MB,    time since last successful read:       0 s
Finished

然后,我继续将剩下的保存到windows分区:

/# ddrescue -n /dev/sdc /windows/recovery_part2.img /home/misi/recovery_log.txt

但它不起作用:

GNU ddrescue 1.17
Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:   900000 MB,  errsize:       0 B,  errors:       0
Current status
rescued:   900000 MB,  errsize:       0 B,  current rate:        0 B/s
   ipos:   900000 MB,   errors:       0,    average rate:        0 B/s
   opos:   900000 MB,    time since last successful read:       3 s
Copying non-tried blocks...
ddrescue: write error: Invalid argument

然而,根据上面发布的问题以及其他指南和手册页,它应该。我能够继续将文件保存到另一个外部硬盘上,并且我还能够重新启动 Windows 分区的整个过程。我中断了这两个进程,因为我只是想测试我的 Windows 分区是否有问题。我还尝试使用其他日志文件并手动指定从第一个日志文件检索的起始位置(自从我像前面提到的那样继续在那里救援几秒钟以来,它发生了一些变化):

/# ddrescue -n -i900862115840 -o900862115840 /dev/sdc /windows/recovery_part2.img /home/misi/recovery_log_2.txt

并收到Invalid argument与前面提到的相同的错误消息。我做错了什么,将数据的最大部分保存到另一个外部驱动器,并将其余数据保存到我的 Windows 分区的正确模式是什么?感谢您提前的回复!

答案1

我认为ddrescue从来没有被设计成以这种方式工作。分析自己做错了什么是没有意义的,因为正确的方法确实在这个答案到你提到的问题。我承认它在这种情况下的用法可能并不明显,特别是对于不熟悉 Unix 中“一切都是文件”概念的人来说。

答案描述了一种将两个文件连接ab一个虚拟设备(特殊文件)的方法/dev/mapper/merge

创建两个文件ab(看看如何做到这一点) 在您的两个可用文件系统中,因此它们的大小总和等于或超过您的/dev/sdc.

应用链接答案的此片段(使用正确的路径ab):

losetup /dev/loop1 a
losetup /dev/loop2 b
s() { blockdev --getsize "$1"; }
dmsetup create merge << EOF
0 $(s /dev/loop1) linear /dev/loop1 0
$(s /dev/loop1) $(s /dev/loop2) linear /dev/loop2 0
EOF

然后在调用中使用/dev/mapper/merge而不是。recovery_part1.imgddrescue

的内容/dev/mapper/merge与 的输出基本相同cat /your/path/to/a /your/different/path/to/b,但merge可写和可查找。

注意:/dev/mapper/merge重新启动后将无法幸存,但是您的文件当然ab/dev/mapper/merge如果您想在重新启动后使用它,您只需重新创建(使用上面的代码)。

答案2

编辑:工作不正常。

设置-i200Gib -s200Mib创建一个200G的文件,速度极快。显然我还没有理解这些参数,所以你最好忽略我下面所说的一切。我的错。我将回到绘图板 - 如果/当我解决它时,我将进行一些测试和更新。


对我来说工作得很好。我用来-i指示初始位置,并-s指示停止位置。我目前正在处理已损坏的 4TB WD“MyPassport”便携式驱动器。一次 200 GiB,然后使用摄影记录提取每个 200GiB 映像中的文件。我正在遵循在线算法部分末尾提供的示例地址救援手册 我对输出进行分块,因为:

  • 我的服务器阵列上没有足够的空间来存储完整的 4TB 映像,并且
  • 它让我放心,我正在恢复文件(而不是等待年龄对于全盘解救在恢复文件之前完成解析工作)

聚苯乙烯摄影记录认为它可以提取跨图像的文件(参见结尾本节)通过使用问号作为通配符,但我尚未验证这一点。

祝你好运!

相关内容