将阿里云OSS挂载到Linux目录——ossfs

使用背景

前段时间使用阿里云oss,需要在前端编译完成后,将编译好的某些静态资源文件上传到oss(如js,图片等),主要是为了结合阿里云CDN做缓存,增加页面访问速度。
这时需要在编译完成后增加上传oss的动作,之前一直使用ossutil来上传。

ossutil工具有一些弊端,比如上传文件时,他会挨个对比上传的每一个文件和oss中已有的文件,遇到文件名相同的,它会对比文件的修改时间,如果这个同名文件的修改时间在oss上的文件修改时间之后,则上传,否则不上传。

当要需要同步的文件越来越多时,这个对比会耗时很长。比如有10万个文件,实际上里面只有几个文件是新增的,这10万个文件全部会对比一次,导致文件的同步时间相当慢。

由于前端编译生成文件时,如果文件有改动时则会生成新的文件名(在原来的文件名上增加版本号),也就是说文件名相同的肯定都是旧文件不需要上传到oss的,根本没必要对比修改时间,可是ossutil没有“文件名相同则忽略上传”的功能。

使用ossfs则可以将oss直接挂载到本地目录,操作oss就像操作本地目录一样,那么我们可以用拷贝命令来忽略文件名相同的文件了,可以大量减少同步oss的时间。

cp -rn ~/build/static-file  ~/oss-file 
# -n 表示不要覆盖已存在的文件  
# -r 表示递归拷贝  
# ~/build/static-file 为前端编译生成的文件目录 
# ~/oss-file 为oss的挂载目录

使用说明

  1. 以下载CentOS 7.0 (x64)版本为例:
wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm
  1. 安装
    CentOS6.5及以上系统版本的安装命令:
sudo yum localinstall your_ossfs_package
  1. 配置密码文件
    指定bucket的名字,osskeyId和ossKeySecret
echo my-bucket:my-access-key-id:my-access-key-secret > /home/deploy/.ossfs-pwd
  1. 挂载
    ossfs [bucket名字] [本地目录] <参数…>
ossfs my-bucket /opt/deploy/oss-file -ourl=oss-cn-xxx-internal.aliyuncs.com  -opasswd_file=/home/deploy/.ossfs-pwd -oallow_other -omp_umask=072

参数说明:参数以“-o”开头,后面接“参数名=参数值”

  1. url:指定oss的endpoint,如果你是用的阿里云的ECS,可以使用内网url,这样在上传和复制文件时比较快,而且内网不计流量费用。
  2. passwd_file:指定密码文件
  3. allow_other:表示将挂载的目录的所有权限都放开给所有的用户和组(即777权限),没有该参数则是700权限,只有执行这个挂载命令的当前用户才有操作权限该目录。
  4. mp_umask:配合allow_other一起使用,allow_other默认给定777权限,mp_umask则可以取消某些权限,比如-omp_umask=072,则实际权限是705(即777-072=705),(Linux权限说明:4-可读r ,2-可写w ,1-可执行x ) 。

说明:
挂载之后就可以像操作本地文件一样操作oss任意目录和文件了。
挂载的根目录(如上述示例中的/opt/deploy/oss-file)不能通过chmod修改权限,但是里面的子目录(即oss中的目录)可以通过chmod来修改权限。

  1. 卸载
    fusermount -u /opt/deploy/oss-file

使用过程遇到的坑

  1. 挂在时报错:ossfs: credentials file /home/deploy/.ossfs-pwd should not have group permissions
    不应有组权限。执行chmod修改权限即可。
chmod 600 /home/deploy/.ossfs-pwd  
  1. 上传的文件Content-Type全是”application/octet-stream”
    这个导致浏览器访问css等静态文件时报错,正确的类型应该是text/css。
    ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加:
    (1) 对于Ubuntu可以通过sudo apt-get install mime-support来添加。
    (2) 对于CentOS可以通过sudo yum install mailcap来添加。
    (3)也可以手动添加,每种格式一行,每行格式为:application/javascript js。
vi /etc/mime.types

在这里插入图片描述

  1. 使用其他oss管理工具增加文件时,在挂载的目录中看不到。
    因为挂在文件通过本地缓存来保存文件的元信息,可以在挂在时加上如下参数(禁用缓存):
    -omax_stat_cache_size=0
    不过这样每次进行ls等操作时会比较慢,因为每次ls都需要请求oss服务器。

参考

  1. ossfs工具官方文档
  2. 如何实现0770挂载权限
  3. ossfs常见问题





原创文章 21 获赞 13 访问量 8387

猜你喜欢

转载自blog.csdn.net/iteye_19045/article/details/103977703