私はddのbusyboxバージョンを備えた組み込みシステムに取り組んでいます。外部ユーティリティからドライブへの消去をテストしようとしていますが、消去後にddがディスクから再度読み取らず、キャッシュされたデータが表示されます。
最初のddを行ってデータを確認し、システムを再起動してキャッシュをフラッシュし、消去を行った後、ddに絞り込んだ後、もう一度ddを実行したところ、すべてがゼロになりました。
ただし、工場出荷時の設定でddを実行し、ドライブを消去し、再起動せずに再度ddを実行すると、再起動するまですべてゼロが表示されません。
私はGNUのマンページで、ddがnolagフラグを指定してiflag optをサポートしていることを読みましたが、busyboxはそのオプションをサポートしていないため、問題外です。
私の質問は、ddをキャッシュからではなくディスクから再度読み取るように強制するにはどうすればよいですか?
あなたは試すことができます
sync
echo 3 > /proc/sys/vm/drop_caches
あらゆる種類のキャッシュを削除します。
詳細については、/usr/src/linux/Documentation/sysctl/vm.txt
のdrop_caches
をご覧ください。
(注:これまでのところiflag=direct
をまだサポートしていないbusybox ddに関する質問でした。)
@sendmoreinfoの答えに基づいて:
dd if=/dev/device iflag=direct bs=1M
読み取りキャッシュには影響しません。
ダイレクトI/O(オープンモードO_DIRECT
)は動作するはずですが、カーネルやdd
がサポートしていない可能性があります。
Iflag = directの答えが少し繁栄します。プログレスバーも提供します:
dd iflag=direct if=~/source.iso | pv | dd oflag=direct of=/dev/sdb bs=8M
Iflag/oflagがないと、pvは終了したと報告し、ハングしたように見えます。しかし、デバイスへのddはまだキャッシュで機能しています。