明確化された質問:
OS がセクタをディスクに書き込むコマンドを送信するとき、それはアトミックですか? つまり、新しいデータの書き込みは完全に成功するか、書き込みコマンドの直後に電源が落ちた場合、古いデータはそのまま残ります。複数のセクターの書き込みで何が起こるかは気にしません - 破れたページは許容されます。
古い質問:
ディスク上に古いデータ X があり、その上に新しいデータ Y を書き込むと、その書き込み中に木が電力線に落ちるとします。派手な UPS やバッテリーでバックアップされたディスク コントローラがなければ、ディスク上のデータが一部 X と一部 Y である破れたページになってしまう可能性があります。 、一部ゴミ?
私はデータベースのような ACID システムの設計を理解しようとしてきましたが、私の素朴な考えでは、先行書き込みログを使用しない firebird は、特定の書き込みが古いデータを破壊しないことに依存しているようです (X) -新しいデータを完全に書き込めないだけです (Y)。つまり、X の一部が上書きされた場合、保持しようとしている X の部分ではなく、上書きされている X の部分のみを変更できます。
明確にするために、これは、保持したい半分Y、半分Xで満たされたページサイズのバッファ、たとえば4096バイトがある場合、OSにそのバッファをXに書き込むように指示した場合、深刻なディスク以外の状況はないことを意味します保持したい半分の X が書き込み中に破損するという障害。