
次のコマンドを使用して、USB スティックに ISO をコピーしようとしています:
sudo dd bs=4M if=lubuntu-17.04-desktop-amd64.iso of=/dev/sdc status=progress
非常に簡単です。iso のサイズは 912 MB です。なぜここで出力テキストがプログラムを終了するのではなくフリーズするのでしょうか?
956301312 bytes (956 MB, 912 MiB) copied, 11.216 s, 85.3 MB/s
プログラムの実行を止めることすらできませんctr-c
。
答え1
表示されている動作は、dd
操作後にディスク上のデータを同期するだけです。 IO 操作を最適化するために、Linux は要求されたよりも大きなチャンクでデータを読み取り (先読み)、書き込みを遅らせて結合できるようにします (ダーティ キャッシュ)。 操作の最後に、dd
ディスク上のファイルを同期するか、カーネルが暗黙的に同期し、すべての書き込みが完了するまでプロセスはアクティブなままになります。
マシン上で他の大規模な IO 操作が行われていない場合は、「Dirty:」値 (ディスクへの書き込みが保留中のデータの合計量) を確認することで、書き込むデータが残っているか/proc/meminfo
どうかを推定できます。
システムがメモリに一度に書き込まずに残すことができるデータの量は、次の sysctl チューニング ノブで制御できます。デフォルトでは比率のみが使用されます。値はパーセント (比率) またはバイトで定義できます。
vm.dirty_background_ratio
vm.dirty_ratio
vm.dirty_background_bytes
vm.dirty_bytes
これらのパラメータの公式ドキュメントはここにあります: