`if`と`of`にすでに同じ内容がある場合、ddはデータを変更しますか?

`if`と`of`にすでに同じ内容がある場合、ddはデータを変更しますか?

私はdd(dd if=/dev/arch_data/root of=/dev/sdd3)を使ってあるパーティションを別のパーティションにコピーしようとしましたが、うまくいきました。しかし、誤って同じコマンドを再実行しましたが、時間がかかり、Ctrl + Cを押しました。

これddでデータが変わりますか?

答え1

短い答えは安全でなければならないということです。もし/dev/arch_data/root2つのコマンド/dev/sdd3の間に他の何も変更されていません。dd

デフォルトでは、ddデータはハードドライブの標準セクタサイズの512バイトブロックにコピーされます。(参考1参照)。つまり、ddを早く停止すると、ハードドライブのセクタ全体を書き込もうとした後に停止します。どんな状況でも、ddはディスクに何かを書き込んでから変更しません。したがって、早く停止すると、dd が停止する前に最後に実行する操作は、オペレーティングシステムにセクタ全体をディスクに送信するように要求するため、何も変更されません。


注1

近年、4096バイトのセクタで構成されたハードドライブが大量生産されています。ハードドライブはオペレーティングシステムが512バイトのセクタをサポートしていると報告し、オペレーティングシステムが512バイトの書き込みを試みると正常に動作します。ただし、操作を実行するために、ハードドライブは内部で4096バイトのセクタを読み取り、512バイトを変更してから4096バイト全体を書き換えます。これは腐敗につながりません。ただし、これを行うと書き込み速度が遅くなります。お持ちのハードドライブが何であるかわからない場合は、ハードディスクを設定しておくことをおbs=4096勧めします。

答え2

はい、dd呼び出すたびにデータがコピーされます。明らかに入力ファイル(で指定)を変更しないと、if=出力ファイル(で指定of=)は同じになります。ただし、ファイルを最後に読み書きした時間(atimeおよび)などの一部のメタデータは変更されます。mtime

関連情報