SquashFS
SquashFS は、オープンソースの、読み込み専用の圧縮されたファイルシステムです。他のファイルシステムのように、SquashFS は渡されたデータの重複排除を行うことができ、データをさらに圧縮するのを助けます。正しく動作するためには必須ではありませんが、Live メディア (LiveUSB や LiveCD) で使用される場合、SquashFS は典型的にはなんらかのユニオンファイルシステムと組み合わせて使用されます。
インストール
カーネル
SquashFS サポートのためには、以下のカーネルオプションの有効化が必須です:
File systems --->
[*] Miscellaneous filesystems --->
[*] SquashFS 4.0 - Squashed file system support
オプションの SquashFS サポート
File systems --->
[*] Miscellaneous filesystems --->
File decompression options (Decompress file data into an intermediate buffer) --->
Decompressor parallelisation options (Single threaded compression) --->
[*] Squashfs XATTR support
[*] Include support for ZLIB compressed file systems
[*] Include support for LZ4 compressed file systems
[*] Include support for LZO compressed file systems
[*] Include support for XZ compressed file systems
[*] Use 4K device block size?
[*] Additional option for memory-constrained systems
(3) Number of fragments cached
USE フラグ
Linux の多くのファイルシステムと同様に、SquashFS ファイルシステムツールは個別のパッケージとして提供されます。このパッケージは sys-fs/squashfs-tools と呼ばれています。USE フラグを調節して、パッケージに求めるサポートを設定してください。
USE flags for sys-fs/squashfs-tools Tools to create and extract Squashfs filesystems
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
lz4
|
Enable support for lz4 compression (as implemented in app-arch/lz4) |
lzma
|
Support for LZMA compression algorithm |
lzo
|
Enable support for lzo compression |
xattr
|
Add support for extended attributes (filesystem-stored metadata) |
zstd
|
Enable support for ZSTD compression |
emerge
フラグを希望通り設定したら、変更を反映するためにシステムを更新してください:
root #
emerge --ask --changed-use --deep sys-fs/squashfs-tools
使い方
ファイルシステムの作成
SquashFS ファイルシステムの作成は mksquashfs コマンドを使用して行われます。larry という名前のユーザのホームディレクトリのSquashFS ファイルシステムを作成するには、次のコマンドを使用できます:
larry@example $
mksquashfs /home/larry /home/larry/home.squashfs
カーネルの SquashFS サポートで選択されている機能に応じて、mksquashfs コマンドの出力は次のようになるでしょう:
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on /home/larry/home.squashfs, block size 131072.
[=========================================================================|] 4/4 100%
Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
compressed data, compressed metadata, compressed fragments, compressed xattrs
duplicates are removed
Filesystem size 0.82 Kbytes (0.00 Mbytes)
58.79% of uncompressed filesystem size (1.39 Kbytes)
Inode table size 104 bytes (0.10 Kbytes)
46.02% of uncompressed inode table size (226 bytes)
Directory table size 96 bytes (0.09 Kbytes)
77.42% of uncompressed directory table size (124 bytes)
Number of duplicate files found 1
Number of inodes 7
Number of files 5
Number of fragments 1
Number of symbolic links 0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 2
Number of ids (unique uids + gids) 1
Number of uids 1
larry (1001)
Number of gids 1
larry (1001)
コマンドは、新しく作成された home.squashfs ファイルに何が入れられたかについて、すばらしいサマリを提供しています。ファイルシステム、inode テーブル、ディレクトリテーブルのサイズや、重複ファイル、UID、GID の数といった情報がすぐに分かりります。この情報はファイルシステムの特定の情報を収集しようとするときにとても便利です。
マウント
SquashFS をマウントするには、昇格された特権を使用して mount コマンドの -o loop
オプションを使用してください:
larry@example $
mkdir ~/tmp
larry@example $
mount -o loop ~/home.squashfs ~/tmp
mount コマンドが失敗した場合、下のトラブルシューティング節の関連する項目を確認してください。
これで home.squashfs に含まれるすべてのファイルが ~/tmp マウントポイントの下で利用可能になりました。すべてのファイルを確認するために -la
オプションを使用して、ディレクトリ内のファイルを一覧表示してください:
larry@example $
ls -la ~/tmp
total 3 drwxr-xr-x 3 larry larry 125 Mar 31 13:51 . drwxr-xr-x 1 larry larry 130 Mar 31 13:52 .. -rw------- 1 larry larry 10 Mar 31 13:49 .bash_history -rw-r--r-- 1 larry larry 127 Mar 24 13:19 .bash_logout -rw-r--r-- 1 larry larry 193 Mar 24 13:19 .bash_profile -rw-r--r-- 1 larry larry 551 Mar 24 13:19 .bashrc -rw-r--r-- 1 larry larry 0 Mar 31 13:51 home.squashfs drwx------ 2 larry larry 3 Oct 23 06:52 .ssh
アンマウント
ファイルシステムをアンマウントするには、昇格された特権を使用して umount を使用してください:
larry@example $
sudo umount ~/tmp
展開
SquashFS ファイルは unsquashfs を使用して展開することができます。上の手順で、~/tmp ディレクトリと ~/home.squashfs ファイルがすでに作成されていると仮定すると:
larry@example $
unsquashfs -d tmp/ -f home.squashfs
* ファイルシステムターゲットが指定されていない場合 (上の例では ~/tmp がターゲットです)、unsquashfs は squashfs-root という名前のフォルダをカレントディレクトリ内に作成し、そこにファイルを展開します。[1]
- unsquashfs コマンドが実行される前からディレクトリが存在している場合、既存のディレクトリへの SquashFS の展開を強制するには、
-d <ディレクトリ>
と-f
オプションを使用する必要があります。[1] - 新しいディレクトリへ展開する場合は、
-f
オプションは不要です。
unsquashfs は SquashFS 内の特定のファイルを展開するためにも使用できます。再び、上の手順で ~/home.squashfs ファイルが作成されていると仮定して、.bashrc ファイルを ~/tmp ディレクトリに展開するには:
larry@example $
unsquashfs -d ~/tmp -f ~/home.squashfs -e .bashrc
Parallel unsquashfs: Using 4 processors 1 inodes (1 blocks) to write [===========================|] 1/1 100% created 1 files created 1 directories created 0 symlinks created 0 devices created 0 fifos
ls コマンドを使用して展開されたファイルを確認してください:
larry@example $
ls -la ~/tmp
total 4 drwxr-xr-x 1 larry larry 14 Mar 31 13:51 . drwxr-xr-x 1 larry larry 156 Mar 31 14:32 .. -rw-r--r-- 1 larry larry 551 Mar 24 13:19 .bashrc
トラブルシューティング
mount: "--options" オプションを使用できるのは root だけです (mount: only root can use "--options" option)
エラーメッセージの言う通りです。root としてログインするか、sudo を使用して、昇格された特権を使ってファイルシステムをマウントしてください。
関連項目
- Aufs — an advanced multi-layered unification filesystem.
- OverlayFS — Linux 上でユニオンファイルシステムの機能を提供する、カーネル内の試みです。
- Wikipedia:ja:UnionFS - オリジナルのユニオンファイルシステム。
外部資料
- YouTube 上の SquashFS に関する解説動画。
- フォーラムスレッド TIP: Compressing portage using squashfs: initscript method
- Article/Script portage ツリーの保管・更新のために SquashFS を利用する
- Portage tree using squashfs and overlayfs
- GitHub - nrdvana/squash-portage: Script to generate squashfs files of the Gentoo portage tree
参照
- ↑ 1.0 1.1 Artemiy I. Pavlov、Marco Cecchetti。The SquashFS tools exposed、The Linux Documentation Project、2008 年 7 月 24 日。2015 年 4 月 8 日取得