$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ステップでより多くの内容を読み直すことができます。