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
キャッシュを許可できますが、それを追跡してください。結局使用するには理由があり、オフにすると効率が少し落ちます。
sync
1つの方法は、書き込みプロセスが完了した後にバッファフラッシュを開始し、バッファサイズを監視することです。私はシェルスクリプトを使用してwatch-flush
バッファのサイズ、指定された「ダーティ」データを監視しますgrep Dirty: /proc/meminfo
。sync
操作が完了すると、データがドライブに完全に書き込まれたことがわかります。
watch-flush
これに属するシェルスクリプトにあります。mkusbu、そのまま使用、修正、概念を借りて独自のツールを作成できます。
dd
そしてfsync
使用したい場合は、他のオプションに基づいてくださいdd
。conv=fsync
ddを使用してISOイメージをUSBフラッシュドライブに書き込むときにスティックを取り外すことができるかどうかはどうすればわかりますか?
答え2
dd
私はandを試してみますoflag=direct status=progress
。速度が遅くなることがあります。
努力する:
dd oflag=direct status=progress bs=16M if=file.bin of=/dev/sdb1
期待どおりに作業を完了する必要があります。