Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第22章 書き込みバリア

書き込みバリアは、揮発性の書き込みキャッシュを備えたストレージデバイスの電源が切れた場合でも、ファイルシステムのメタデータが永続ストレージに正しく書き込まれ、順序付けられるようにするために使用されるカーネルメカニズムです。書き込みバリアが有効になっているファイルシステムでは、fsync() を介して送信されるデータが電源の切断後も持続します。
書き込みバリアを有効にすると、アプリケーションによってはパフォーマンスが大幅に低下する場合があります。具体的には、fsync() を頻繁に使用したり、多数の小さなファイルを作成および削除したりするアプリケーションは、実行速度が大幅に低下する可能性があります。

22.1. 書き込みバリアの重要性

ファイルシステムはメタデータを安全に更新し、整合性を確保します。ジャーナル化されたファイルシステムは、メタデータの更新をトランザクションにバンドルし、次の方法で永続ストレージに送信します。
  1. ファイルシステムは、トランザクションの本文をストレージデバイスに送信します。
  2. ファイルシステムは、コミットブロックを送信します。
  3. トランザクションとそれに対応するコミットブロックがディスクに書き込まれる場合、ファイルシステムは、トランザクションが電源障害に耐えられると想定します。
ただし、電源障害時のファイルシステムの整合性は、キャッシュが余分にあるストレージデバイスでは複雑になります。ローカルの S-ATA や SAS ドライブのようなストレージターゲットデバイスには、32MB から 64MB のサイズの書き込みキャッシュがある場合があります (最新のドライブを使用する場合)。ハードウェア RAID コントローラーには、多くの場合、内部書き込みキャッシュが含まれます。さらに、Net App、IBM、Hitachi、EMC などのハイエンドアレイにも大きなキャッシュがあります。
書き込みキャッシュがあるストレージデバイスは、データがキャッシュにあると I/O を「完了」と報告します。キャッシュが電力を失うと、そのデータも失われます。さらに悪いことに、キャッシュが永続ストレージにデステージされると、元のメタデータの順序が変更される可能性があります。これが発生すると、完全に関連付けられたトランザクションがない状態で、コミットブロックがディスクに存在する可能性があります。その結果、ジャーナルは、電力損失からの復旧中に、初期化されていないトランザクションブロックをファイルシステムに再生する場合があります。これにより、データの不整合や破損が発生する可能性があります。

書き込みバリアのしくみ

書き込みバリアは、I/O の前後でストレージの書き込みキャッシュフラッシュを介してLinux カーネルに実装されます。これは 順序が重要 となります。トランザクションが書き込まれた後、ストレージキャッシュがフラッシュされ、コミットブロックが書き込まれ、キャッシュが再度フラッシュされます。これにより、以下が確保されます。
  • ディスクに、すべてのデータが含まれている。
  • 順序の並べ替えは発生していません。
バリアを有効にすると、fsync() 呼び出しによりストレージキャッシュフラッシュも発行されます。これにより、fsync() が返された直後に電源損失が発生した場合でも、ファイルデータがディスク上の永続化されるようになります。