我编写了一个基于 FUSE 的小型文件系统,现在唯一缺少的部分是我想用 fstab(5) 注册它,以便在系统启动时自动挂载它和/或手动挂载它mount /srv/virtual-db。我怎样才能做到这一点?
我知道,我可以/usr/bin/vdbfs.py /srv/virtual-db从一些初始化脚本运行,但这并不完全漂亮。
我很抱歉,因为这可能不完全是一个编程问题,但它是高度相关的,因为打包和部署仍然是程序员的工作。
我编写了一个基于 FUSE 的小型文件系统,现在唯一缺少的部分是我想用 fstab(5) 注册它,以便在系统启动时自动挂载它和/或手动挂载它mount /srv/virtual-db。我怎样才能做到这一点?
我知道,我可以/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用作 in 的第三个字段fstab将起作用。如果没有,您可以创建一个包装器,该包装器确实采用该形式的参数并将它们映射到您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-like 选项一起使用):
$ 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选项是相关的,并且由 fuse 本身完全支持,因此您不必自己实现它们。该user选项允许作为“fuse”组成员的非特权用户使用该mount命令安装您的文件系统,并noauto指示您的文件系统不要在启动时自动安装。如果不指定noauto,它将自动挂载。
为了澄清@patryk.beza 对已接受答案的评论,安装 FUSE 文件系统的正确方法是将文件系统类型设置为fuse.<subtype>.
例如,要挂载一个s3fs-fuse实现,它不提供特定的/sbin/mount.*包装器并且通常使用s3fs用户命令来挂载 S3 存储桶,可以以 root 身份使用此命令:
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
这是如何工作的:mount当类型被格式化为句点(即)时,识别“文件系统子类型”的概念<type>.<subtype>,因此具有该格式的类型fuse.someimpl被识别为 FUSE mount helper 的责任/sbin/mount.fuse。FUSE mount helper 然后将部分解析为someimplFUSE 实现,与原始答案中使用的格式相同#(我认为这只是对名为 的程序的路径搜索<subtype>,但我不是 100% 确定它)。
您可以只使用 fuse 文件系统类型。以下适用于我的系统:
smbnetfs /media/netbios fuse defaults,allow_other 0 0
另一个例子:
sshfs#user@example.com:/ /mnt fuse user,noauto 0 0
经过大量研究后,发现这个解决方案可以挂载 fuse 文件系统起诉fstab条目。我正在使用 s3bucket 的保险丝安装在本地 linux 机器上。
.passwd-s3fs:包含访问您的 aws 帐户的凭据 1] 密钥和 2] 访问密钥。uid: 用户身份。你可以输入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