• 关于

    版本控制文件怎么用

    的搜索结果

问题

Git学习之思维导图

本文只是整理一下git的大纲,如果想要行云流水的使用,请参考相关文档。 注意:思维导图的最后是终端命令,由于字体的关系--连成一起,读者看到长的—其实就是-- ...
技术小菜鸟 2019-12-01 21:11:54 2919 浏览量 回答数 1

回答

一般指的是去中心化;去中心化是分布式的子集。 git 可以在没有中心服务器的情况下完成几乎所有所有工作;而 svn 你总得有一个 server 端充当中央仓库,哪怕是跟 client 装同一台电脑上。 无论是 git 也好、svn 也罢,都是版本控制工具,从来没说自己是团队协作工具。 git 可以在没有一个中央仓库的情况下完成代码的版本控制管理工作,甚至你都不需要联网。比如你需要出差 2 个月,不能连公司内网电脑,但还是得写代码啊,难道这 2 个月内你就干脆不 commit 了,等回公司再一次性提交好几十、几百个文件上去?这时候用 git,你想怎么 commit 怎么 commit、想怎么 revert 怎么 revert,等回公司再 push / merge 就好了。当然了,也可能需要解决冲突,但 svn 不也一样可能冲突? 而且因为可以没有中央仓库,所以 git 中任意两个节点,都可以彼此做交换,也就是每个节点直接的身份是相同的、平等的,不存在 server / client、master / slave 之分。而用 svn,两个 client 想同步代码,你只能先提交到中央仓库、然后另一台从中央仓库上拉取。 以上就是去中心化。
DM。 2020-05-31 17:33:31 0 浏览量 回答数 0

问题

团队10+人,用svn版本控制工具,大家是怎么控制代码的? 400 请求报错 

前置条件如标题:团队10+人,用svn版本控制工具。   说一说我们团队现在的方式: 1. 代码使用有且只有一个分支; 2. 程序员提交代码; 3. 与线上文件做...
kun坤 2020-05-29 11:50:55 1 浏览量 回答数 1

阿里云爆款特惠专场,精选爆款产品低至0.95折!

爆款ECS云服务器8.1元/月起,云数据库低至1.5折,限时抢购!

回答

引用来自“不必在乎我是谁”的答案 python 2.7 表示没有任何问题,无论是在控制台还是用 .py 文件。 用python2.5.1和python2.6.6 会出现这个问题,安装了python2.7就没有这个问题了。 ######python 2.7 表示没有任何问题,无论是在控制台还是用 .py 文件。######回复 @不必在乎我是谁 : 我全部删除干净了,安装还是不行,我换了个pywin32-218.win-amd64-py2.7这个版本,安装可以,但双击pythonwin时,提示下面的错误:应用程序无法启动,因为应用程序的并行配置不正确。我要怎么解决呢?######回复 @火影熊 : 可能是你安装的版本太多了,版本之间有冲突。最好卸载掉所有版本后删除Python文件夹,再重新安装试试######回复 @不必在乎我是谁 : 我安装pywin32-214.win32-py2.7,之后在E:\Python27\Lib\site-packages\pythonwin路径下双击pythonwin图标后,就提示错误,信息如下:The application can not locate win32ui.pyd(or python)(126)找不到指定的模块。请问要怎么解决呢?谢谢######回复 @火影熊 : 我的确实可以跑,win7 x64 + py2.7……######你好,谢谢你的帮助。我在python2.5和2.7上都试了我的这段程序,还是同样的错误。###### class Thread: __initialized = False # Need to store a reference to sys.exc_info for printing # out exceptions when a thread tries to use a global var. during interp. # shutdown and thus raises an exception about trying to perform some # operation on/with a NoneType __exc_info = _sys.exc_info # Keep sys.exc_clear too to clear the exception just before # allowing .join() to return. #XXX __exc_clear = _sys.exc_clear def __init__(self, group=None, target=None, name=None,args=(), kwargs=None, *, daemon=None): assert group is None, "group argument must be None for now" if kwargs is None: kwargs = {} self._target = target self._name = str(name or _newname()) self._args = args self._kwargs = kwargs if daemon is not None: self._daemonic = daemon else: self._daemonic = current_thread().daemon self._ident = None self._started = Event() self._stopped = False self._block = Condition(Lock()) self._initialized = True # sys.stderr is not stored in the class like # sys.exc_info since it can be changed between instances self._stderr = _sys.stderr _dangling.add(self)###### 试试 t=Mythread(None) ######还是一样的错误!######用 python 2.6.6 就好啦!我用的就是个者版本号,没有报错现象 ######我安装pywin32-214.win32-py2.7,之后在E:\Python27\Lib\site-packages\pythonwin路径下双击pythonwin图标后,就提示错误,信息如下:The application can not locate win32ui.pyd(or python)(126)找不到指定的模块。请问要怎么解决呢?谢谢
爱吃鱼的程序员 2020-06-05 13:05:16 0 浏览量 回答数 0

问题

OSS FTP工具发布啦

OSS FTP工具发布啦! 如果您正望着各种繁杂的安装部署命令一脸茫然, 如果您正纠结于其他工具上传时的文件大小限制, 如果您想双击鼠标就完成文件的上传和下载, 如果您有通过FTP协议使用OSS...
oss-dev 2019-12-01 20:54:45 9860 浏览量 回答数 3

回答

版本管理工具(svn, p4, git等)只是项目开发中必要的一个工具集(当然还包括什么文档对比工具等)。 对应的系统设计说明书,模块设计分析等资料还是要有的。 除了上面两个以外,还有个人员职责分工的方案要有。 最后,还有个测试平台的方案。主要针对整体/连调测试。 不要动不动就是git,git只是第一大类工具集里的一个小玩意。git用的再熟练,组织化开发的思维和方法不清楚,仍然毫无帮助。哈。而且git很不适合公司这种类型的组织化的开发方式。 ######基本都是…svn…这些工具~方便点!######就是说涉及到一个文件是由多个人写的?######恩…及时提交就行…###### y一般用git进行版本管理。 ######其实无论是一个人写代码还是团队协作,都应该使用版本管理。######恩.但你想想,需要合并的都是很少数的文件啊.工具类?不能一个人负责么?配置文件什么的可能没有办法,只能合并处理.######svn怎么调试? 是服务器调试, 还是本地每一份调试库?######回复 @hnxymjj : 那就得分N份db, 源码, 图片之类的了.######本地调试######代码控制可以将所有代码设置成不允许多人同时编辑的,这样就可以解决工具类多人编辑的问题了######小团队及企业内部开发SVN是首选######为什么不用VSS呢? ==========================
kun坤 2020-06-14 08:13:33 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:18 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:14 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:18 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 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: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 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: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint 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: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 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命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:16 0 浏览量 回答数 0

问题

怎么把vue打包出来的文件上线?

打包项目上线,如果配置vue.config.js 最近在开发一个项目,本地已经开发完毕了,想放到内网服务器上测试,但是不知道该怎么配置config.js,build之后d...
问问小秘 2020-01-09 17:49:50 52 浏览量 回答数 2

问题

用 Django 的 Pipeline 优化网站前端:报错

本文来自 @图拉鼎 的博客: 今天开始一步步优化网站,尽可能的让其响应更快、更省流量。第一步就是优化前端。 以前在玩Rails的时候,很羡慕它全自动化的Assets Pip...
kun坤 2020-06-07 10:24:47 0 浏览量 回答数 1

问题

用 Django 的 Pipeline 优化网站前端 403.10 禁止访问:配置无效 

本文来自 @图拉鼎 的博客: 今天开始一步步优化网站,尽可能的让其响应更快、更省流量。第一步就是优化前端。 以前在玩Rails的时候,很羡慕它全自动化的Assets Pipeline&#x...
kun坤 2020-05-28 13:28:15 1 浏览量 回答数 1

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

阿里极客公益活动:或许你挑灯夜战只为一道难题或许你百思不解只求一个答案或许你绞尽脑汁只因一种未知那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了他们用户自己手中的技术来帮助用户成长本次活动特邀百位阿里技术专家对javascript常...
管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

问题

开放存储服务(OSS)工具推荐集合

开放存储服务(OSS)工具推荐集合 官方推荐工具/插件: cloudfs4oss 基于linux的磁盘映射工具 下载链接 : linux版本地址 工具介绍࿱...
否极泰来 2019-12-01 21:58:54 21142 浏览量 回答数 2

回答

回 2楼(阿king) 的帖子 文档这块我们正在尝试改进。如果在查看文档时有任何的疑问,非常欢迎在文档中心填写意见反馈,或者直接在工单中指出问题,我们会及时对文档中的问题进行修正。希望有大家的帮助,让OSS更加方便简单。 ------------------------- Re:ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) 引用第6楼真的小白于2015-03-23 11:12发表的 ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) : 我一直没搞懂那个 跨域资源共享  貌似在控制台叫cros设置   这个功能是干嘛的啊 ? 跨域资源共享(Cors)是Html5协议解决ajax跨域资源调用问题的功能。如您的程序为Web站点或基于Html5开发的APP应用可以通过跨域资源共享解决这个问题,其他使用场景用不到这个功能。   由于ajax等的同源策略 ,会禁止获取其他域名的资源。 比如,这样的操作是被禁止的。 xhr.open("GET", "http://www.taobao.com/pic.jpg", true);   以前要实现跨域访问,可以通过JSONP、Flash或者服务器中转的方式来实现,但是现在我们有了CORS。 现在大部分浏览器都可通过名为Cross-Origin Resource Sharing(CORS)的协议支持ajax跨域调用。 ------------------------- Re:ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) 引用第5楼宝宝助手于2015-03-23 11:11发表的 ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) : 我最近上传的时候都返回地址了。但是用地址访问内容时却是 0KB 没有上传成功? 用的php SDKV2          pubObject 的时候偶尔就会这样! 到底怎么回事!!我都想转到七牛去了。前几天七牛的人才来拿服务比较 人家还上传下载双向CDN    如果上传后返回了200,表示这次上传是成功的。并且可以在上传时带入数据的MD5值,服务器端会帮用户做校验,防止网络传输中出现数据丢失。 有其他的可能的类似问题,可以提交工单,客服同学会帮你仔细排查问题。 同时,建议使用php sdk v1版本。v2版本已不再维护增加新功能。 如果使用OSS中任何困扰,欢迎使用工单,论坛等方式告知我们,我们需要你的声音。 ------------------------- Re:ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) 引用第14楼我是菜鸟2于2015-03-23 12:32发表的 ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) : oss-example.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=xxx&Expires=xxx&Signature=xxx 问题1  【Signature代表什么 】 问题2 【如何向这个地址(oss-example.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=xxx&Expires=xxx&Signature=xxx)上传文件】 ....... 这段url表示使用url签名的方式来直接访问OSS资源,主要针对 【客户端/服务器端】 这样的用户场景: Access key 存储在服务器端,客户端想访问一个OSS资源没有权限,需要先向服务器端发送操作信息(包括操作哪个资源,完成什么操作等)。服务器端根据信息与Access key生成Signature(签名信息),并以一个url的形式传给客户端。客户端使用该url完成之前约定的操作。 问题1  【Signature代表什么 】 签名(Signature)信息是用户的服务器端生成的身份签名,用户的客户端使用该签名来完成操作。OSS根据这个签名来判断操作是否合法。 问题2 【如何向这个地址(oss-example.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=xxx&Expires=xxx&Signature=xxx)上传文件】 该url只能完成特定的操作,比如控制台上生成的签名url是用于用户发送get请求,获取object。用户如果要生成put操作的签名url,可以参考JAVA SDK中的实现: 点击这里 。 对于想参考实现签名算法,这里给一些建议: 1. OSS api 接口基于标准的http协议规范,签名是通过对请求的方法,资源位置,请求头等以AccessKeySecret为秘钥按照统一方法加密生成的。具体方法可以参考API文档: 点击这里 2. 论坛中提供了一个可视化签名demo,希望能对你有所帮助: 点击这里 3. 各个SDK版本都已开源的,可以尝试参考一下。后续也会推出更多语言的SDK。 4. 如果对签名还有疑惑与困难,告知我们,后续会考虑推出更多帮助文档以及demo来帮助用户 ------------------------- Re:ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) 引用第19楼老陈小安于2015-03-24 13:19发表的 ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) : 我想问几个问题: 1、OSS选定存储区域后,在这个区域里有什么数据可靠性措施?比如一般的存3份? 2、OSS选定存储区域后,可以跨区域存储吗?比如我觉得只存在杭州一个区域不安全,我希望在北京存储区域再放一份,可以实现吗? 3、OSS能提版本控制功能吗?一个文件,我在下载到本地修改后,再上传,能提供上一次的版本控制吗? 4、OSS只有官方推荐第三方管理软件,有没有官方自己的管理软件? ....... 【问题】 OSS选定存储区域后,可以跨区域存储吗?比如我觉得只存在杭州一个区域不安全,我希望在北京存储区域再放一份,可以实现吗? 暂时不支持此功能,因为OSS底层已经实现了3分数据备份,所以您大可以放心您的数据安全。且如果您的数据很多,多存一份也会增加您的存储成本。 【问题】 OSS能提版本控制功能吗?一个文件,我在下载到本地修改后,再上传,能提供上一次的版本控制吗? 不支持版本控制 上传相同名的object在OSS端是覆盖原有信息。 OSS只有官方推荐第三方管理软件,有没有官方自己的管理软件? 官方推出过命令行工具,OSSCMD。 官方推荐的客户端工具是经过我们安全部门认证审核的,保证安全性与质量。 同时我们会推动我们的合作伙伴服务商推出更多工具。 【问题】 OSS的API与其他厂商的兼容吗?比如和X牛? 不支持 【问题】 OSS后续有什么新功能设计?比如音视频转码? 新功能的上线尽请期待我们的官网公告。 音视频转码服务主要通过阿里云其他云产品支持,比如可以使用MTS做视频转码。 【问题】 OSS存储计费,是用阶梯方式计费吗?还是按传统的,我用了600G,就按600G范围的单价计算?,如果是按阶梯计费方式,这有什么优势呢? 存储和流量都是按照阶梯计费的。采用的是类似计税使用的超额累进的方式,将你使用的资源量切分成不同段,按不同价格计费。 比如600T的存储费用=(50-0)*价格1+(500-50)*价格2+(600-500)*价格3 采用这样的方式,对用户来说使用资源量越大,价格会越便宜。 【问题】 最后,能说说OSS的定位是什么?面向服务商的,还是面向最终客户的? OSS的最终面向用户是开发者用户,为有存储需求的用户提供海量,安全,高可靠,支持高并发的企业级云存储服务。 ------------------------- Re:ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) 引用第29楼fds-em于2015-03-25 20:45发表的 ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) : 域名绑定。CNAME跟我网站的A记录冲突怎么解决啊?而且子域名先认证文件然后把A记录删除后。然后再用CNAME。那么访问也是没用啊 参考下这个教程 http://docs.aliyun.com/#/oss/getting-started/bucket-attributes&cname 注意核对您的区域(您的Bucket所在区域不同cname地址也不同) ------------------------- Re:ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) 引用第38楼金龟于2015-03-26 13:01发表的 ReOSS大学堂OSS产品技术互动第一期OSS的介绍及控制台操作(3.23-3.27) : 为什么没有 批量转移目录,全选等功能 您可以使用这个客户端工具解决您的需求 http://bbs.aliyun.com/read/231195.html   ------------------------- 回 18楼(渴望更高) 的帖子 您可以使用移动端的SDK,直接通过手机上传图片到OSS, SDK文档: android-sdk http://docs.aliyun.com/#/oss/sdk/android-sdk ios-sdk http://docs.aliyun.com/#/oss/sdk/ios-sdk ------------------------- 回 17楼(寂寞先生) 的帖子 您可以参考下这个帖子 http://bbs.aliyun.com/read/233791.html
ossbaymax 2019-12-02 01:54:17 0 浏览量 回答数 0

问题

OSS FTP工具发布啦

OSS FTP工具发布啦! 如果您正望着各种繁杂的安装部署命令一脸茫然, 如果您正纠结于其他工具上传时的文件大小限制, 如果您想双击鼠标就完成文件的上传和下载, 如果您有通过FTP协议使用OSS...
oss-dev 2019-12-01 22:09:23 54337 浏览量 回答数 41

问题

【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手中的技术来帮助用户成长 本次活动特邀百位阿里技术专家对Java常...
管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询