中断されたコピープロセスの再開

中断されたコピープロセスの再開

$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 skipBの実際のファイルサイズ(パーティションブロックサイズとは無関係)のオフセットを試しましたか?

これにより、欠けている部分が得られます。この時点で、catそれを新しいファイルに直接置くことができますcat "$B" "$A2" >> "$C"; #mv "$C" "$B"$Cもちろん、十分なスペースがあるパスに欠けている部分があります)。

catまた、単純なスクリプトマージのために複数のファイルヘッダーを持たないバイナリファイルをリンクするのにも適しています。先端が破損している可能性がありますが$B、この場合は長さを短くして、$A初期ddステップでより多くの内容を読み直すことができます。

関連情報