
SquashFSは解凍をどのように処理しますか?私はSquashFSファイルシステム上のLZ4のオーバーヘッドに興味があります。私の理論は、SquashFSファイルシステムのファイルが読み取りプロセス中に解凍されることです。ディレクトリのリストはどうですか?
答え1
SquashFSにはいくつかの詳細なドキュメントがあります。カーネル文書から。 inodeおよびディレクトリエントリを含むSquashFSファイルシステムのすべてのコンテンツを圧縮でき、inodeおよびディレクトリエントリも圧縮率を向上させるように設計されています。
つまり、ファイルシステムから読み取られたすべてのデータまたはメタデータには解凍が含まれますが、オーバーヘッドは減ります。キャッシュの使用:
- ファイルデータはページキャッシュに解凍されるため、同じページを複数回読み取るときにデータを複数回圧縮する必要はありません。
- メタデータとフラグメント(テールエンドパックチャンク)は小さな特定のメタデータとフラグメントキャッシュに解凍されるため、同じメタデータチャンクを複数回読み取ることができます(例えばディレクトリの内容を一覧表示するとき)同じブロックを複数回解凍する必要はありません。
さまざまなインデックス(ブロック、ユーザー、グループ識別子、フラグメント)に関連する作業を高速化するためのさまざまなルックアップテーブルもあります。
答え2
man mksquashfs
(ハイライト内)から:
quashfsは、Linux用に高度に圧縮された読み取り専用ファイルシステムです。 gzip/xz/lzo/lz4/zstd 圧縮を使用します。圧縮ファイル、inode、およびディレクトリ。
したがって、ディレクトリの内容も圧縮します。
フラグを使用して、inode、uid / gidテーブル、データまたはデータフラグメントブロック、拡張属性が圧縮されるかどうかを制御できます-no{I,Id,D,F,X}
。
回答:オーバーヘッド:多くのシステムでは、解凍が永続リポジトリから読むよりもはるかに高速であるため、速度の観点からオーバーヘッドは事実上負です。