ddがキャッシュしない、またはキャッシュから読み取らない


22

私は、ddのbusyboxバージョンを使用した組み込みシステムで作業しています。外部ユーティリティからドライブへの消去をテストしようとしていますが、ddは消去後にディスクから再度読み取りを行いませんが、キャッシュされたデータを表示します。

最初のddを実行し、データを確認し、システムを再起動してキャッシュをフラッシュし、消去を実行し、ddを再度実行してすべてゼロになったため、ddに絞り込みました。

ただし、工場出荷時の設定でddを実行し、ドライブを消去し、再起動せずに再度ddを実行すると、再起動するまですべてのゼロが表示されません。

GNUのマンページで、ddはnocacheフラグを使用してiflag optをサポートしているが、busyboxはそのオプションをサポートしていないので、それは論外です。

私の質問は、ddにキャッシュからではなく、ディスクからの読み取りを強制するにはどうすればよいですか?


2
潜在的な不正選択ですが、... ddはキャッシュしません。カーネル/ディスクシステムはそうします。これがFrostschutzのコマンド(ddに送信されない)が機能する理由です。
ヘネス

スピンアップを待つのではなく、ドライブを起動状態に保つためにこれが必要です。
-neverMind9

回答:


11

試すことができます

sync
echo 3 > /proc/sys/vm/drop_caches

あらゆる種類のキャッシュをドロップします。

詳細については、を参照/usr/src/linux/Documentation/sysctl/vm.txtしてくださいdrop_caches

(注:質問はbusybox ddについてでしたが、これまではまだサポートしていませんiflag=direct。)


1
ただ注意:それはLinuxでのみ動作します。また、/procLinuxの一部の組み込み構成では、ファイルシステムが無効になっています。

@EvanTeitelmanそうですね、ここでうまくいくようですので、この答えを支持して受け入れます。
熱烈な

2
これが一度きりの効果があるのか​​、それとも進行中なのか疑問に思いました。よると、この効果は、一度オフになっています。
クレイグマックイーン

これはキャッシュをドロップしddますが、大量のデータを転送する場合、プロセスでキャッシュを破棄することを防ぐために何もしません。
Jan Hudec

9

@sendmoreinfoの回答に基づく:

dd if=/dev/device iflag=direct bs=1M

読み取りキャッシュには影響しません。


それは機能しますが、読み取られているものをキャッシュしませんか?
-neverMind9

1
正しい。それが目標です。
オレ丹下

8

ダイレクトI / O(オープンモードO_DIRECT)は動作するはずですが、カーネルやddサポートされていない可能性があります。


4
これは正しい答えです。ddif = / dev / device iflag = direct bs = 1M; 読み取りキャッシュには影響しません。
オレ丹下

1
@OleTange:なぜこれを自分の回答として投稿しないのですか?これは「dd no cache」で
グーグルで一番の

5

iflag = direct答えに小さな繁栄; 進行状況バーも提供します。

dd iflag=direct if=~/source.iso | pv | dd oflag=direct of=/dev/sdb bs=8M

iflag / oflagがなければ、PVは終了したことを報告し、ハングしたように見えます。しかし、デバイスへのddはまだキャッシュで動作しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.