Skip to content
Haoran Yang edited this page Feb 3, 2016 · 32 revisions

FAQ

  • Q: ossfs适合什么样的程序?

  • ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。

  • Q: ossfs有什么局限性?

  • 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异:

  • 随机或者追加写文件会导致整个文件的重写。

  • 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。

  • 文件/文件夹的rename操作不是原子的。

  • 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。

  • 不支持hard link。

  • Q: ossfs一定要阿里云的机器才能用么?

  • ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。

  • Q: ossfs能不能同时挂载多个OSS bucket

  • 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。

  • Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误?

  • 请先umount对应的目录。

  • 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。

  • 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com

  • Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory

  • 这是您未创建该目录导致的,在挂载前需要创建对应目录

  • Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么?

  • 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。

  • Q: ossfs挂载时如何设置权限?

  • 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数:

    • ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other
  • 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs:

    • sudo -u user mkdir /tmp/ossfs
    • sudo -u user ossfs bucket-name /tmp/ossfs
    • 注意:请确保/etc/passwd-ossfs这个文件存在,且权限为640。并且user和该文件的owner在同一个group内。假设/etc/passwd-ossfs的owner属于root这个group,而user不在,您需要将其添加到group中 usermod -g root
  • 为什么使用allow_other参数,仍然不能访问文件?

    • 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。
  • allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办?

    • 可以通过umask来设置,参见这里
  • Q: 如何开机自动挂载ossfs?

    • Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。
      • echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs
      • chmod 640 /etc/passwd-ossfs
    • Step 2 接下来针对不同的系统版本,设置方式有所不同
      • Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5)
        • 在/etc/fstab中加入下面的命令
        • ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0
        • 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。
        • 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。
        • 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令:
        • chkconfig netfs on
      • Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统)
        • 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。
        • 执行命令:chmod a+x /etc/init.d/ossfs
        • 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。
        • 执行命令:chkconfig ossfs on
        • 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。
    • 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。
  • Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载?

  • 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为:

    sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url

  • 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉)

  • Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决?

  • 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令

相关链接

  1. s3fs FAQ
  2. OSS官方论坛 FAQ
Clone this wiki locally