[英]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 的答案,有兩種選擇:
像這樣編輯/etc/fstab
:
# <file system> <mount point> <type> <options> <dump> <pass> # ... vdbfs.py#<dev> /srv/virtual-db fuse user,<other-opts> 0 0
要么,
創建一個以“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
手動安裝, user
和noauto
選項是相關的,並且由保險絲本身完全支持,因此您不必自己實現它們。 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.