overlayfs、aufs、Unionfsのいずれかに依存するスクリプトがある場合、bashスクリプトで使用可能な項目を決定する最良の方法は何ですか? overlayfsを使用したいが使用できない場合は、aufsまたはUnionfsに置き換えます。カーネルバージョンを推測として受け入れることができます。しかし、カーネルバージョンが3.18以上であっても、overlayfsが組み込まれているという意味ではありません。確認できる非常に確実な方法はありますか?
答え1
Linuxでは、実行中のカーネルで利用可能なファイルシステムの種類をファイルで確認できます/proc/filesystems
。このファイルの内容は、カーネルが読み取るとリアルタイムで構成されるため、現在の状態を反映します。ファイル形式は少し迷惑です。各行には、8つのスペースの後にファイルシステムタイプが続き、nodev
3つのスペースの後にファイルシステムタイプが続きます。使用可能なファイルシステムの種類をインポートするgrep -w
(ファイルシステムの種類が見つからない限りnodev
)、使用するには各行の最初の8文字を削除します。
if grep -qw aufs /proc/filesystems; then
echo aufs is available
fi
ファイルシステムドライバが現在ロードされていないモジュールとして提供される可能性があるため、これは完全な話ではありません。モジュールをロードできるとし、ファイルシステムが利用できない場合はロードしてみてください。ファイルシステムモジュールには次の形式のエイリアスがあります(実際のモジュール名は通常ファイルシステムタイプの名前ですが、必ずしもそうではありません)。fs-FSTYPE
if grep -qw aufs /proc/filesystems; then
echo aufs is available
elif modprobe fs-aufs; then
echo now aufs is available
fi
これはカーネルファイルシステム用です。 FUSE ファイルシステムの場合は、ファイルfuse
システムが使用可能であることを確認し、ファイルシステムを実装する実行可能ファイルを探します。fuse
で見つけることができますが、/proc/filesystems
これは利用可能かどうかを知らせるだけでなく、プログラムにそれを使用するのに十分な権限があるかどうかを知らせません。実際、より信頼できるテストは/dev/fuse
。
if [ -w /dev/fuse ]; then
echo FUSE is available
if type unionfs-fuse >/dev/null 2>/dev/null; then
echo unionfs-fuse is available
fi
fi