Linuxでddの進行が無意味になるのを防ぐ方法は?

Linuxでddの進行が無意味になるのを防ぐ方法は?

LinuxでISOをコピーするコマンドを実行すると、dd長時間(数分)開いている進行状況の印刷が表示されます。そして最後にもう一つあります。

問題は、非常に大きなキャッシュが使用され、dd出力が歪んでいるようです。

sudo dd bs=4M if=my.iso of=/dev/sdc status=progress

出力(最初の行が長い間表示されます)

1535115264 bytes (1.5 GB, 1.4 GiB) copied, 1.00065 s, 1.5 GB/s
403+1 records in
403+1 records out
1692844032 bytes (1.7 GB, 1.6 GiB) copied, 561.902 s, 3.0 MB/s

進行状況出力が意味を持つように、このようなことが発生しないようにする方法はありますか?

ベストアンサー1

dd最初の行を見ると、1秒間に1.5GBを読み書きすることがわかります。 SSDでさえそれほど速く書くことはできません。

/dev/sdcブロックデバイスはそれを許可しますが(再書き込み)、それをディスクに送信するのではなくバッファリングし、ディスクが許容できる速度でディスクに書き込みを開始します。約3MiB/s。

システムはこのようにデータを無期限にバッファリングすることはできず、コミットされていないデータに保持するのに十分なデータしか許可できません。汚い状態。したがって、一定時間が経過すると(あなたの場合は1.5 GB以上を書き、2秒未満が経過した後(進行線が毎秒書き込まれるため))、データがディスクにフラッシュされるまでシステムコールがブロックされますddwrite()進行メッセージを書き込めません)。時間が経過すると、dd欠落している数メガバイトが追加で送信される可能性があり、これは1秒以内に発生するため、追加の進行状況ラインのみを取得できます。

他の動作を表示するには、書き込みを同期的に強制できます。つまり、データがディスクにコミットされない場合は返されません。たとえば、oflag=sync oroflag=dsyncまたはを使用しますoflag=direct(推奨されませんが)。

おすすめ記事