1

停電が発生した場合に備えて、ディスク上のデータを頻繁に更新する必要があるプロジェクトがあります。ファイル内の正確に 512b (ドライブの 1 セクター) を同じ長さのデータで上書きすると、ファイル システムは変更されたセクターをマークし、フラッシュの準備ができたときにディスク上でそれらを更新しますか? それとも、変更をフラッシュするたびにファイル全体を書き込みますか? 私は主に ext4 に関心がありますが、それがすべてのファイル システムで同じであるかどうかに興味があります。

標準が変更を追跡するのではなく、ファイル全体を上書きすることである場合、これを変更する方法はありますか? いくつかの書き込みオプション?

4

1 に答える 1

1

一般に、Linux ファイルはページ キャッシュにキャッシュされ、ページがダーティかどうかはページ レベルで追跡されます。Intel x86 プラットフォームでは、ページ サイズは 4k であるため、4k ページをダーティにすると、書き戻されるのは 4k ページです。

単一の 512 バイト セクターのみを上書きする場合、および 512 バイト セクターを含む HDD がある場合、O_DIRECT フラグを使用してファイルを開くことができます。 512 バイトであり、書き込み元のメモリ バッファーも 512 バイトにアラインされている場合、ページ キャッシュをバイパスでき、書き込みはディスクに直接行われます (したがって O_DIRECT)。

最近のディスクの多くは実際には 4k の物理セクターを使用していますが、下位互換性のために 512 バイトのセクターをエミュレートしていることに注意してください。これらのディスクは、512e セクター (エミュレートされた e) と呼ばれることがあります。これらのドライブでは、512 バイトのセクター書き込みを行うと、ドライブは内部的に一度に 4k しか書き込めないため、ディスクは読み取り-変更-書き込みサイクルを実行します。これはパフォーマンス ヒットとして目に見えますが、機能的な観点からは、従来の旧式の 512 セクター HDD と同じように見えます。

于 2016-08-01T23:25:24.963 に答える