恢复中断的复制过程

恢复中断的复制过程

如何安全可靠地恢复使用或完成的将文件复制$A到备份位置的过程?$Bpv "$A" > "$B"cat "$A" > "$B"

(假设文件$A很大,例如LVM2快照文件)

可以通过 实现吗dd

首选:bash 或 python(最好是 python3)解决方案。

示例场景:pv "$A" > "$B"复制 90% 后中断。如何恢复它,以便完成复制过程而不再次重复整个工作?

答案1

是的,您可以使用 dd 跳过块。

A="file1"
B="file2"

BLOCKSIZE=512  # default bs for dd

size_b=$(stat -c "%s" "$B")
skip_blocks=$((size_b / BLOCKSIZE))

dd if="$A" of="$B" skip=$skip_blocks seek=$skip_blocks bs=$BLOCKSIZE

这里的重要参数skip还有seek

  • skip:跳过块ibs大小开始时的块输入
  • seek:跳过块obs 大小开始时的块输出

答案2

你要rsync

rsync -a --append "$A" "$B"

答案3

您是否尝试过dd skip使用 B 的实际文件大小的偏移量(与分区块大小无关)?

那会让你得到缺失的部分。此时,您可以将cat它们直接一起放入一个新文件中cat "$B" "$A2" >> "$C"; #mv "$C" "$B"(其中$C当然是具有足够空间的路径上缺少的部分)。

cat对于连接二进制文件也很有效,在这种情况下,您没有多个文件头来进行简单的脚本合并。的结尾有可能$B已损坏,但在这种情况下,您可以将其缩短并$A在最初的 dd 步骤中重新阅读更多内容。

相关内容