Bashスクリプトでファイルシステムの可用性を確認するには?

Bashスクリプトでファイルシステムの可用性を確認するには?

overlayfs、aufs、Unionfsのいずれかに依存するスクリプトがある場合、bashスクリプトで使用可能な項目を決定する最良の方法は何ですか? overlayfsを使用したいが使用できない場合は、aufsまたはUnionfsに置き換えます。カーネルバージョンを推測として受け入れることができます。しかし、カーネルバージョンが3.18以上であっても、overlayfsが組み込まれているという意味ではありません。確認できる非常に確実な方法はありますか?

ベストアンサー1

Linuxでは、実行中のカーネルで利用可能なファイルシステムの種類をファイルで確認できます/proc/filesystems。このファイルの内容は、カーネルが読み取るとリアルタイムで構成されるため、現在の状態を反映します。ファイル形式は少し迷惑です。各行には、8つのスペースの後にファイルシステムタイプが続き、nodev3つのスペースの後にファイルシステムタイプが続きます。使用可能なファイルシステムの種類をインポートする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

おすすめ記事