Linuxでは、単一のファイルに対してダーティページがディスクに書き戻される順序は何ですか?最初から最後までですか、それとも混乱ですか?
シナリオ 1: 適用範囲なし
(ディスクに)ファイルを作成し、大量のデータをすばやく(順次)書き込みます。今、私はこれが複数のページキャッシュにあると仮定します。ダーティページを書き換えると、ページは順番に書き換えられますか?
たとえば、ファイルの書き込みが完了する前にサーバーがシャットダウンしたとします。
これで、再起動後にディスクファイルを次の状態にすることができます。
|--正しいデータ--|---データが設定されていない/ごみ---|--正しいデータ--|
つまり、ファイルの最後のバイトセットが不完全である可能性がありますが、その間のデータも不完全である可能性があることを理解しています。
シナリオ2:上書き(ループ/リングバッファのようなものを試してください)
- ファイルが作成され、データが書き込まれ、最大サイズに達した後、「fsync」(つまり、データ+メタデータ同期)が呼び出されます。
- これで、ファイルポインタがファイルの先頭に移動し、データが順次書き込まれます。 (fsyncが完了していません)
これでサーバーがダウンしているので、再起動するとディスクファイルを次の状態にできますか?
|--Newly written data--|--Old data--|--New data--|...
つまり、新しいデータの場合、一部のページは順序なしでディスクに書き込まれます。
または
私はいつもそうだと思います。
|--新しく作成されたデータ---|----新しく作成されたデータ---|--既存のデータ--|
つまり、古いデータと新しいデータは混同されません(古いデータは、ファイルがある場合はファイルの末尾にのみ表示されます)。