Linux

如何通過 bash 腳本確定文件系統的可用性?

  • November 20, 2015

如果我的腳本依賴於以下其中一項存在:overlayfs、aufs、unionfs - 確定 bash 腳本中可用的最佳方法是什麼?我想使用overlayfs,但如果它不可用,則回退到aufs 或unionfs。我可以將核心版本視為猜測-但僅僅因為它是> = 3.18核心並不意味著內置了overlayfs-是否有一種合理的萬無一失的檢查方法?

在 Linux 下,您可以在文件/proc/filesystems. 這個文件的內容是核心在讀取時實時建構的,所以它反映了目前的狀態。這個文件的格式有點煩人:每行要麼包含 8 個空格,後跟一個文件系統類型,要麼nodev是 3 個空格,後跟一個文件系統類型。去掉每行的前 8 個字元以獲得可用的文件系統類型,或使用grep -w(只要您不是在尋找名為 的文件系統類型nodev)。

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

引用自:https://unix.stackexchange.com/questions/244218