簡體   English   中英

如何使用 mount(8) 和 fstab 注冊 FUSE 文件系統類型?

[英]How to register FUSE filesystem type with mount(8) and fstab?

我已經編寫了一個基於 FUSE 的小型文件系統,現在唯一缺少的部分是我想使用 fstab(5) 注冊它以在系統啟動時自動掛載它和/或僅使用mount /srv/virtual-db手動掛載它mount /srv/virtual-db 我怎樣才能做到這一點?

我知道,我可以從一些 init 腳本運行/usr/bin/vdbfs.py /srv/virtual-db ,但這並不完全正確。

我很抱歉,因為這可能不完全是一個編程問題,但它是高度相關的,因為打包和部署仍然是程序員的工作。

通常,通過創建可執行文件mount.fstype “注冊”新的掛載文件系統類型。

$ ln -s /usr/bin/vdbfs.py /usr/sbin/mount.vdbfs

如果vdbfs.py采用mount -ish 參數(即dev path [-o opts] ),則mount -t vdbfs並使用vdbfs作為fstab的第三個字段將起作用。 如果沒有,您可以創建一個包裝器,該包裝器確實采用該形式的參數並將它們映射到您的vdbfs.py采用的任何vdbfs.py

FUSE 還應該安裝一個mount.fuse可執行文件; mount.fuse 'vdbfs.py#dev' path -o opts將繼續調用vdbfs.py dev path -o opts 在這種情況下,您可以使用fuse作為您的文件系統類型,並使用vdbfs.py#您的設備添加前綴。

因此,為了澄清 ehemient 的答案,有兩種選擇:

  1. 像這樣編輯/etc/fstab

     # <file system> <mount point> <type> <options> <dump> <pass> # ... vdbfs.py#<dev> /srv/virtual-db fuse user,<other-opts> 0 0

    要么,

  2. 創建一個以“mount”為前綴的可執行文件。 (確保它可以與類似mount的選項一起使用):

     $ ln -s /usr/bin/vdbfs.py /usr/sbin/mount.vdbfs

    並像這樣編輯/etc/fstab

     # <file system> <mount point> <type> <options> <dump> <pass> # ... <dev> /srv/virtual-db vdbfs.py user,<other-opts> 0 0

關於啟動時自動安裝和使用mount手動安裝, usernoauto選項是相關的,並且由保險絲本身完全支持,因此您不必自己實現它們。 user選項允許作為“fuse”組成員的非特權用戶使用mount命令掛載您的文件系統,而noauto指示您的文件系統不在啟動時自動掛載。 如果不指定noauto ,它將自動掛載。

為了澄清@patryk.beza 對已接受答案的評論,掛載 FUSE 文件系統的正確方法是將文件系統類型設置為fuse.<subtype>

例如,以安裝s3fs熔絲實現,它不提供特定/sbin/mount.*包裝和用途通常是s3fs用戶命令裝入S3水桶,人們可以使用該命令作為根:

mount -t fuse.s3fs bucket-name /path/to/dir -o <some,options>

/etc/fstab這一行:

bucket-name /path/to/dir fuse.s3fs <some,options> 0 0

或者這個 SystemD 掛載單元(例如, /etc/systemd/system/path-to-dir.mount ):

[Unit]
Description=S3 Storage
After=network.target

[Mount]
What=bucket-name
Where=/path/to/dir
Type=fuse.s3fs
Options=<some,options>

[Install]
WantedBy=multi-user.target

這是如何工作的:當類型用句點格式化時(即<type>.<subtype> ), mount識別“文件系統子類型”的概念,因此格式為fuse.someimpl的類型被識別fuse.someimpl FUSE 掛載助手/sbin/mount.fuse FUSE 掛載助手然后將someimpl部分解析為 FUSE 實現,其方式與原始答案中使用的#格式相同(我認為這只是對名為<subtype>的程序的路徑搜索,但我不是100% 確定)。

您可以只使用保險絲文件系統類型。 以下適用於我的系統:

smbnetfs    /media/netbios    fuse    defaults,allow_other    0    0

另一個例子:

sshfs#user@example.com:/    /mnt    fuse    user,noauto    0    0

經過大量研究,發現此解決方案可以通過fstab條目掛載保險絲文件系統。 我正在使用 s3bucket 的保險絲安裝在本地 linux 機器上。

  • .passwd-s3fs :包含訪問您的 aws 帳戶的憑據 1] Secret key 和 2] Access Key 。
  • uid : 用戶 ID。 你可以輸入linux命令id就可以得到uid

句法:

s3fs#<Bucket_Name> <Mounted_Direcotry_Path> fuse _netdev,allow_other,passwd_file=/home/ubuntu/.passwd-s3fs,use_cache=/tmp,umask=002,uid=<User_Id> 0 0

例子:

s3fs#myawsbucket /home/ubuntu/s3bucket/mys3bucket fuse _netdev,allow_other,passwd_file=/home/ubuntu/.passwd-s3fs,use_cache=/tmp,umask=002,uid=1000 0 0

要掛載,您需要運行以下命令。

mount -a

要檢查您的存儲桶是否正確安裝,請使用以下命令檢查哪個顯示所有安裝點。

df -h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM