パーティションがマウント解除されるまで、ファイルの変更は表示されません。

パーティションがマウント解除されるまで、ファイルの変更は表示されません。

FAT32ファイルシステムがインストールされています。ファイルを変更した後に再度読み取ることができますが、それでも古いバージョンが表示されます。パーティションをアンマウントして再マウントするまで、変更は実際には保持されません。この動作は正常ですか?それではなぜ意味があり、なぜ必要なのでしょうか。変更が自動的に表示されるように設定する方法はありますか?

答え1

他のほとんどのオペレーティングシステムと同様に、Linux はディスク IO 操作をキャッシュします。syncこのコマンドを使用すると、ファイル変更を実行した後にカーネルにバッファをフラッシュするよう強制できます。ただし、このコマンドを使用すると、現在の「ダーティ」バッファがすべてディスクにフラッシュされ、全体的なシステムパフォーマンスが低下します。あるいは、fsyncCライブラリ関数を使用して特定のファイルに対する変更を更新できますが、この関数はファイルシステム全体がメディア上で一貫した状態であることを保証しません。

答え2

削除後も、ファイルシステムが必ずしも同じ場所に新しいファイルを保存する必要はないため、同じファイルの古いバージョンを見つけることができます。したがって、新しいファイルを別の空き場所に保存しても、必ずしも古いファイルを上書きするわけではありません。

パフォーマンス上の理由から、ファイルシステムで行われた変更はすぐにディスクに書き込まれません。オペレーティングシステムにバックグラウンドで作業を実行させることができますが、ファイルが実際に完全に物理的に書き込まれるまでプログラムを待機させるのはなぜですか。時々、これらの非同期動作は、ファイルが削除または作成された直後に上書きされ、物理ストレージがまったく必要ない場合など、書き込みを完全に保存することがあります。

マウントオプションを使用すると、ほとんどのファイルシステムでこの動作を無効にできますsyncsyncマウントを解除せずにデータをディスクに強制的に書き込むコマンドもあります。

ただし、ファイルシステムの生データにアクセスしないでください。 / dev / sdb1をマウントしてから別のシステムを使用して完全に同じファイルシステムをマウントすると(ネットワークブロックデバイスまたは他の手段を介して)、両方のシステムが同時に同じファイルシステムデータを使用するため、最終的に競合が発生します。特別な(クラスタ型)ファイルシステムのみがこのように動作します。他のすべての場合は、ネットワークファイルシステムが必要です(1つのシステムのみがディスクをマウントし、そのファイルをネットワーク経由で透過的に公開します)。

関連情報