恢复中断的复制过程

Grz*_*cki 9 storage backup file-copy

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

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

它可以实现dd吗?

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

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

Ulr*_*gel 12

是的,您可以使用 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
Run Code Online (Sandbox Code Playgroud)

这里的重要参数skip还有seek

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


Ted*_*ddy 10

你想要rsync

rsync -a --append "$A" "$B"
Run Code Online (Sandbox Code Playgroud)

  • @GrzegorzWierzowiecki:我没有注意到这种变化。我刚刚测试了它,确实`--append` 盲目地附加到文件中。`--append-verify` 做同样的事情,但在最后运行校验和,如果校验和不匹配 `rsync` 似乎做一个新的副本。 (5认同)