如何使用mount(8)和fstab注册FUSE文件系统类型?

时间:2009-10-12 12:03:37

标签: linux filesystems gnu mount fuse

我已经编写了一个基于FUSE的小文件系统,现在唯一缺少的是我想用fstab(5)注册它以在系统启动时自动挂载它和/或用{{1}手动挂载它}}。我怎样才能做到这一点?

我知道,我可以从一些初始化脚本运行mount /srv/virtual-db,但这并不完全正常。

我很抱歉,因为这可能不是一个编程问题,但它是高度相关的,因为打包和部署仍然是程序员的工作。

5 个答案:

答案 0 :(得分:31)

通常,通过创建可执行文件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中的第3个字段将工作。如果没有,您可以创建一个包装器,它接受该表单的参数并将它们映射到vdbfs.py所需的任何内容。

FUSE还应安装mount.fuse可执行文件; mount.fuse 'vdbfs.py#dev' path -o opts会继续拨打vdbfs.py dev path -o opts。在这种情况下,您可以使用fuse作为文件系统类型,并使用vdbfs.py#为设备添加前缀。

答案 1 :(得分:19)

因此,为了澄清ephemient的答案,有两种选择:

  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
    
  3. 关于启动时自动安装和使用mount手动安装,usernoauto选项是相关的,并且完全由保险丝支持,因此您不必自己实现它们。 user选项允许作为“fuse”组成员的非priveleged用户使用mount命令装入您的文件系统,noauto指示您的文件系统不会在启动时自动挂载。如果您未指定noauto,它将自动挂载。

答案 2 :(得分:3)

要弄清@ patryk.beza对已接受答案的评论,挂载FUSE文件系统的正确方法是通过将文件系统类型设置为fuse.<subtype>

例如,要挂载s3fs-fuse实现,该实现不提供特定的/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

这是如何工作的:mount在使用句点(即<type>.<subtype>)对类型进行格式化时认识到“文件系统子类型”的概念,从而使格式为fuse.someimpl的类型为被认为是FUSE挂载助手/sbin/mount.fuse的责任。然后,FUSE安装帮助程序将someimpl部分解析为FUSE实现,就像在原始答案中使用#格式一样(我认为这只是对名为{的程序的路径搜索{1}},但我不确定100%。

答案 3 :(得分:1)

您可以使用fuse文件系统类型。以下适用于我的系统:

smbnetfs    /media/netbios    fuse    defaults,allow_other    0    0

另一个例子:

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

答案 4 :(得分:0)

经过大量研究后,发现此解决方案可通过输入fstab来装入保险丝文件系统。我正在使用s3bucket的保险丝来安装在本地linux机器上。

  • .passwd-s3fs:包含用于访问aws帐户1]密钥和2]访问密钥的凭据。
  • 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