如何安全可靠地恢复使用或完成的将文件复制$A
到备份位置的过程?$B
pv "$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 步骤中重新阅读更多内容。