Mount

fusermount 的使用者特定 fstab

  • May 25, 2015

我想知道 fusermount 是否有類似“使用者特定 /etc/fstab”的東西?~/.fstab、~/.config/fstab 之類的東西,可以與 FUSE 配合使用。

我用了

sshfs foo.bar: foo.bar/

從主目錄連接到遠端目錄(有 foo.bar 目錄,我相應地設置了 .ssh/config)。但我不喜歡 foo.bar 的重複,想用簡單的命令

$$ cmd $$foo.bar/ 掛載遠端目錄。經過一番Google搜尋後,我發現簡單的“mount foo.bar/”可以與 /etc/fstab 中的以下行一起使用(還需要在 /etc/fuse.conf 中啟用“user_allow_other”)

login@foo.bar:  /home/user/foo.bar  fuse.sshfs  user,IdentityFile=/home/user/.ssh/id_rsa,port=12345,allow_other  0  0

現在“mount foo.bar”按預期工作(並且“umount”也可以工作)。但是為了使用者特定的目的編輯系統範圍的文件似乎有點奇怪。.ssh/config 中的設置也在那裡重複(埠),必須指定身份文件。為更多站點(使用者)維護這個似乎很不方便,而且顯然不是 /etc/fstab 的用途。另一個奇怪的地方 - 使用此解決方案時,FUSE 由 root (afaictl) 執行。

我更喜歡帶有使用者特定 fstab 的“fusermount foo.bar/”之類的東西。

有這樣的事嗎?

沒有每個使用者等效的/etc/fstab. 您可以編寫一個 shell 腳本來讀取您選擇的文件並呼叫適當的掛載命令。請注意,從參數foo.bar中,您必須推斷出多條資訊:伺服器位置foo.bar、伺服器上的目錄(這裡是您的主目錄),首先是它是 SSHFS 掛載的事實。

#!/bin/bash
####
if [ -e ~/.fstab ]; then
 args=("$@")
 ((i=${#args[@]}-1))
 target=${args[$i]}
 while read filesystem mount_point command options comments; do
   if [[ $filesystem = \#* ]]; then continue; fi
   if [[ $mount_point = "$target" || $filesystem = "$target" ]]; then
     if [[ -n $options ]]; then
       args[$((i++))]=-o
       args[$((i++))]=$options
     fi
     args[$((i++))]=$filesystem
     args[$((i++))]=$mount_point
     exec "$3" "${args[@]}"
   fi
 done
fi
## Fall back to mount, which looks in /etc/fstab
mount "$@"

(警告:未經測試的程式碼。)

這個片段解析一個文件~/.fstab,其語法讓人聯想到/etc/fstab:“設備”、掛載點、文件系統類型、選項。請注意,這裡的文件系統類型是要執行的命令,而“設備”是文件系統相關的。並非所有 FUSE 文件系統命令都使用這種語法,“設備”後跟一個掛載點,儘管這是一個常見的約定。

身份文件、遠端使用者名等 SSH 選項可以保留在~/.ssh/config. 放入它們的唯一原因/etc/fstab是允許所有使用者使用這些選項。

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