なぜオーバーレイファイルシステムはホームサーバーのコンテナ書き込みを増幅させるのか?

エヴァ・ウォン は テクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

オーバーレイファイルシステムは、イメージ層のファイルを変更する際に、新しいデータが書き込まれる前に書き込み可能な層へコピーが必要になるため、ホームサーバーのコンテナ書き込みを増幅させます。

この増幅は、アプリケーションが大きな下位層ファイルを変更したり、メタデータが多いツリーを作成したり、アクティブなデータをコンテナのルートファイルシステム内に保持している場合に最も顕著です。見かけ上の書き込みは小さくても、OverlayFSは不変のイメージ層を保持し、マージされた名前空間を更新し、すべての変更を別の上位ディレクトリに向けなければなりません。

最初の下位層の変更がコピーアップを引き起こす

OverlayFSは読み取り専用の下位ファイルをその場で編集できません。最初の変更時に、ファイルまたは必要なメタデータを上位層にコピーし、そこで変更を適用します。OverlayFSコピーアップガイドは、この動作が遅い書き込み、inodeの検索、層の増加にどう関係するかを説明しています。

大きなファイルに対する1キロバイトの編集でも、実際には1キロバイト以上の読み書きが発生する可能性があります。後の編集は通常、上位コピーを直接対象とするため、すべての書き込みで同じペナルティがかかるわけではありません。ワークロードの履歴も重要で、新しいコンテナのベンチマークは、すでにコピーアップが完了しているウォームコンテナよりもこのイベントを捉えやすいです。

大きなペイロードなしにメタデータの変更が増幅することもある

名前の変更、削除、所有権の変更、ディレクトリ操作はマージされたビューを変更します。ホワイトアウトは下位のエントリを隠しますが、不変のイメージからは削除しません。また、ディレクトリのメタデータは独自の上位層表現が必要になる場合があります。最新のコンテナストレージ内部ガイドは、下位、上位、作業、マージディレクトリがどのように連携するかを説明しています。

パッケージマネージャーやアプリケーションアップデーターは特に負荷が高く、多数のファイルを置き換え、権限を調整し、インデックスを更新します。出力は数メガバイト程度の増加にとどまることが多いですが、ファイルシステムは数千のメタデータ操作を実行します。

コンテナの操作 Overlayの作業 潜在的な増幅 より良い場所
小さな下位層設定の編集 コピーアップしてから修正 変更バイト以上のコピー 永続的なら設定ボリューム
パッケージツリーの更新 多数のコピーアップとメタデータ変更 高いinodeとジャーナルトラフィック 可能ならイメージを再構築
データベースの書き込み 初回コピー後の繰り返し上位層書き込み ファイルシステムとデータベースの増幅 専用ボリューム
イメージファイルの削除 ホワイトアウトの作成 下位バイトは保持される 再構築したイメージ層で削除

基盤ファイルシステムが二重のCoW層を追加することもある

OverlayFSがコピーオンライトNASファイルシステム上にある場合、1つのコンテナ変更がまず上位ディレクトリにコピーし、その後基盤ファイルシステムが新しいブロックとメタデータを割り当てることがあります。スナップショットは以前のブロックを保持し、ライブコンテナ層を超えたスペースコストを拡大します。

これはすべてのCoWの組み合わせが使えなくなるわけではありません。実際の書き込みパスに複数の割り当て境界があることを意味します。Overlayストレージドライバーのパフォーマンスガイドは、書き込みが多いパスをボリュームに移動してイメージ層のコピーアップパスを回避することを推奨しています。

ボリュームは書き込み可能なイメージ層をバイパスする

マウントされたボリュームは選択したディレクトリに独自のストレージパスを提供します。そこに書き込まれるデータベースページ、アップロード、キャッシュ、ログはイメージの下位ファイルを最初に変更しません。これによりオーバーレイの作業が減り、永続データがコンテナの置き換えから分離されます。

OverlayFSとボリュームマウントの書き込み性能研究では、一部の環境で大きな差が見られました。正確な比率は環境によって異なりますが、アーキテクチャ上の境界は明確で、ボリュームはマウントパスに対してオーバーレイルートファイルシステムを回避します。

アプリケーションの出力だけでなくホストの書き込みも測定する

アプリケーションのバイト数とファイルシステムおよびデバイスの書き込み量を比較し、最初の変更時と安定状態の両方をテストしてください。上位層のサイズ、inodeの活動、ジャーナルトラフィック、スナップショットの増加、SSDのホスト書き込みカウンターを監視します。高い比率はデータベース、オーバーレイのコピーアップ、基盤CoW、またはフラッシュのガベージコレクションによるものかもしれません。

コンテナデータとSSD摩耗に関する議論はホームサーバーのライフサイクルの文脈を加えています。ログ、一時ファイル、アクティブなボリュームはすべて別々に管理し、すべての書き込みをイメージデータとして扱うべきではありません。

よくある質問

OverlayFSは下位層のファイルを編集のたびにコピーしますか?

通常、主要なコピーアップは最初の変更時に発生します。後の書き込みは上位コピーを対象としますが、ジャーナリング、スナップショット、アプリケーションの動作により物理的な書き込みが増幅し続けることがあります。

名前付きボリュームはすべての書き込み増幅をなくしますか?

いいえ。そのパスに対してはオーバーレイのコピーアップを回避しますが、データベース、ジャーナル、コピーオンライトファイルシステム、RAID、SSDのガベージコレクションは依然として増幅を引き起こす可能性があります。

なぜファイルを削除してもイメージ層は縮小しないのですか?

下位のイメージ層は不変です。上位層はエントリが隠されていることを記録しますが、元のバイトは基盤のイメージ層が参照されなくなり削除されるまで残ります。

テック&AIハブ

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.