zwo*_*wol 6 large-files binary files
我有来自故障硬盘驱动器的两个部分磁盘映像。文件 B 包含磁盘的大部分内容,在扇区读取失败的地方存在间隙。文件 A 是告诉ddrescue
重试所有失败扇区的结果,因此它几乎完全是空白,但包含一些重读成功的地方。我现在需要将文件 A 的有趣内容合并回文件 B。算法很简单:
while not eof(A):
read 512 bytes from A
if any of them are nonzero:
seek to corresponding offset in B
write bytes into B
Run Code Online (Sandbox Code Playgroud)
我可以坐下来自己写这个,但我首先想知道是否其他人已经编写并调试了它。
(更复杂的是,由于空间有限,文件 B 和文件 A 位于两台不同的计算机上——这就是为什么我没有告诉ddrescue
首先尝试填补 B 中的空白——但 A 可以是通过网络传输相对容易,稀疏。)
您的算法是在 GNU 中实现的dd
。
dd bs=512 if=A of=B conv=sparse,notrunc
Run Code Online (Sandbox Code Playgroud)
请事先使用您选择的一些测试文件进行验证。您不想无意中损坏您的 File B
。更好的算法是检查B
该位置是否也有零,唉,这dd
是不行的。
对于两台不同的计算机,您有多种选择。使用支持写入时查找的网络文件系统(并非所有人都这样做);事先传输文件;或者像这样通过 SSH 管道:
dd if=A | ssh -C B-host dd of=B conv=sparse,notrunc
# or the other way around
ssh -C A-host dd if=A | dd of=B conv=sparse,notrunc
Run Code Online (Sandbox Code Playgroud)
该ssh -C
选项启用压缩,否则您将通过网络传输千兆字节的零。