書き込みキャッシュを無効にした状態で単一コマンドを実行する

書き込みキャッシュを無効にした状態で単一コマンドを実行する

USBドライブに大量のファイルを書き込むたびに、書き込みキャッシュが原因でプロセスを追跡するのは非常に困難です。echo 1000000 > /proc/sys/vm/dirty_bytes問題を解決するのと同じように、さまざまな方法で無効にできます。ただし、以前の設定を再度有効(または再起動)する必要があります。

シングルライトコマンドのダーティバイトを完全にバイパスするようにシステムに指示するにはどうすればよいですか?たとえば、次のようになります。

DIRTYBYTES=nope pv file.bin > /dev/sdb1

または

pv file.bin | cache_buster > /dev/sdb1

説明:現在の動作は、pv file.bin > /dev/sdb1メーターが直ちに100%に達し、USBが実際に書き込みを完了するのを待ってコマンドが中断されることです。代わりに、コマンドを修正し、メーターをUSBドライブへのおおよその正しい書き込み速度に徐々に増やしたいと思います。変わらないダーティバイトなどは、次の命令もキャッシュを迂回するように設定される。

答え1

syncそしてwatch-flush

キャッシュを許可できますが、それを追跡してください。結局使用するには理由があり、オフにすると効率が少し落ちます。

sync1つの方法は、書き込みプロセスが完了した後にバッファフラッシュを開始し、バッファサイズを監視することです。私はシェルスクリプトを使用してwatch-flushバッファのサイズ、指定された「ダーティ」データを監視しますgrep Dirty: /proc/meminfosync操作が完了すると、データがドライブに完全に書き込まれたことがわかります。

watch-flushこれに属するシェルスクリプトにあります。mkusbu、そのまま使用、修正、概念を借りて独自のツールを作成できます。

ddそしてfsync

使用したい場合は、他のオプションに基づいてくださいddconv=fsync

ddを使用してISOイメージをUSBフラッシュドライブに書き込むときにスティックを取り外すことができるかどうかはどうすればわかりますか?

答え2

dd私はandを試してみますoflag=direct status=progress。速度が遅くなることがあります。

努力する:

dd oflag=direct status=progress bs=16M if=file.bin of=/dev/sdb1

期待どおりに作業を完了する必要があります。

関連情報