回答:
代わりにこれを使用してください:
sudo dd if=install57.fs of=/dev/sdc conv=fsync
これは、システムコールのfsync()
たびにをwrite()
呼び出します。これにより、dd
何もキャッシュされなくなります。fsync(man 2 fsync
)のマンページのこの部分を参照してください。
fsync() transfers ("flushes") all modified in-core data of (i.e., modified buffer cache
pages for) the file referred to by the file descriptor fd to the disk device (or other
permanent storage device) where that file resides. The call blocks until the device reports
that the transfer has completed. It also flushes metadata information associated with the
file (see stat(2)).
これはカーネルのデフォルトの動作です。Linuxカーネルは、次のように書き込みおよび読み取りキャッシュを管理しwrite()
ます。syscallが発行されると、データはすぐにキャッシュに書き込まれ、書き込み完了ステータスがプロセスに送信されます。バッファが必要なとき、またはバスに空き時間があれば、データはキャッシュからハードディスクに書き込まれます。
conv=fsync
ようにブロックデバイスに書き込むとき、それがデフォルトであるということdd
ですか?これに対する良い答えを探して:unix.stackexchange.com/questions/312687/...
これは、Linuxおよび他のほとんどのオペレーティングシステムが読み取りと書き込みの両方をキャッシュするために発生します。ほとんどの場合、これにより、オペレーティングシステムの応答性が向上します。
キャッシュされたデータが書き込まれたことを確認する場合はsync
、ご存じのようにを使用します。Linuxは、調整可能な多数の設定を公開しています。この記事では、いくつかの設定の概要を説明します。たとえば、vm.dirty_background_bytesを0に設定して、カーネルがフラッシャースレッドをすぐに開始するようにすることができます。
カーネルは、データをメモリに保持して、ディスクの読み取りと書き込みを(比較的遅い)行わないようにします。これによりパフォーマンスが向上しますが、コンピューターがクラッシュすると、データが失われたり、ファイルシステムが破損する可能性があります。同期により、メモリ内のすべてがディスクに書き込まれます。
注:(unmount
またはイジェクト)sync
通常のファイルシステムの使用でこれを「隠す」コールを自動的に呼び出します。
/dev/sdc
システムに実際のデバイスがあり、ファイルに書き込んでいないのは確かです/dev/sdc
か?デバイスを使用する場合はls --color /dev
-/dev/sdc
黄色にする必要があります。