最近学习了使用如何使用天翼云对象存储挂载,通过FUSE实现对将对象存储挂载进用户的空间文件系统。
用户空间文件系统(Filesystem in Userspace,简称FUSE)是一个面向类Unix计算机操作系统的软件接口,它使无特权的用户能够无需编辑内核代码而创建自己的文件系统。当前Linux通过内核模块对此进行支持。一些文件系统如ZFS、glusterfs和lustre使用FUSE实现。Linux用于支持用户空间文件系统的内核模块名叫FUSE,FUSE一词有时特指Linux下的用户空间文件系统。Linux从2.6.14版本开始通过FUSE模块支持在用户空间实现文件系统。
这里我们关注的是如何挂载OOS,对于在云上创建OOS一笔带过,介绍主要流程和挂载思路,并分别介绍两种自动挂载方案。
一、天翼云OOS挂载主要流程
1、在天翼云oos中创建容器桶,创建accesskey,记录下容器名(桶名称)、endpoint、ak及sk信息
2、由于目前不是所有区域都支持oos,默认endpoint指向贵州节点(oos-cn.ctyunapi.cn)
其他地域的endpoint列表如下。
地区 | OOS API Endpoint |
北京2 | oos-bj2.ctyunapi.cn |
内蒙 | oos-nm2.ctyunapi.cn |
长沙 | oos-hncs.ctyunapi.cn |
西安 | oos-snxa.ctyunapi.cn |
杭州 | oos-hz.ctyunapi.cn |
江苏 | oos-js.ctyunapi.cn |
广州 | oos-gz.ctyunapi.cn |
北京 | oos-hq-bj.ctyunapi.cn |
上海 | oos-hq-sh.ctyunapi.cn |
3、进入客户主机系统安装fuse、编译安装环境及git
4、通过git克隆s3fs-fuse到本地编译安装
5、尝试手工挂载判断前面的桶名、endpoint、ak、sk等信息是否有误
6、设置自动挂载,两种方式(/etc/rc.local或/etc/fstab)
二、下载安装s3fs-fuse到本地的详细命令
yum install -y automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
./autogen.sh && ./configure && make && make install
第一行安装系统所需的编译环境与fuse支持,第二行通过git克隆s3fs-fuse的源码到本地目录,第三行进入本地克隆好的目录,第四行通过四条组合命令完成本地编译安装。
还有一种非常简单的安装方式,通过yum安装
yum install epel-release && yum install s3fs-fuse -y
一条命令搞定s3fs-fuse的安装。
三、了解s3fs-fuse的关键信息
s3fs允许Linux和macOS通过FUSE挂载S3存储桶。s3fs保留文件的本机对象格式,与Amazon S3,Google Cloud Storage和其他基于S3的对象存储兼容,天翼云的对象存储就是兼容S3的。
s3fs密码文件的默认位置:
在文件中输入您的凭据${HOME}/.passwd-s3fs
并设置仅所有者权限:
echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
chmod 600 ${HOME}/.passwd-s3fs
比如当前你使用root用户登陆,就在/root/下建立一个密码文件/root/.passwd-s3fs即可,文件采用纯文本形式,格式是ak:sk
四、手工挂载命令
桶名:mybucket
endpoint:oos-cn.ctyunapi.cn
ak:2d19d9ef0904a4d5accb
sk:94fd08d6517d43393117ae9ba93da8eb452df431
第一步生成用户认证文件
echo "2d19d9ef0904a4d5accb:94fd08d6517d43393117ae9ba93da8eb452df431" > /root/.password-s3fs && chmod 600 /root/.password-s3fs
第二步生成挂载目录
mkdir /home/bucket
第三步完成命令行挂载
s3fs mybucket /home/bucket -o passwd_file=/root/.passwd-s3fs -o url=http://oos-cn.ctyunapi.cn -o allow_other
五、自动挂载两种方式
1、将挂载命令行加入/etc/rc.local实现开机自动挂载
echo "s3fs mybucket /home/bucket -o passwd_file=/root/.passwd-s3fs -o url=http://oos-cn.ctyunapi.cn" >> /etc/rc.local
注意检查/etc/rc.local必须要有可执行权限。
2、利用/etc/fstab实现磁盘自动挂载
第一步编辑/etc/fstab,最后一行加入下面命令
s3fs#mybucket /home/bucket fuse _netdev,allow_other,use_path_request_style,url=http://oos-cn.ctyunapi.cn/ 0 0
第二步挂载
mount -a
六、debug挂载信息
s3fs mybucket /path/to/mountpoint -o passwd_file=${HOME}/.passwd-s3fs -o dbglevel=info -f -o curldbg
七、s3fs参数使用说明
-o allow_other
本参数用于设置挂载目录可以被任意登陆服务器的用户使用,且可以将该挂载目录用于创建NFS/SMB共享。
-o umask=0
本参数用于设置挂载挂载后资源的访问权限,确保挂载后所有用户能够对挂载目录下资源具有访问权限。umask与chmod配套,当设置umask=0时对于文件权限为777,若需要设置权限为755则设置umask=022,以此类推配置所需权限
-o max_write
本参数用于设置vfs的上传块大小,默认值为4096,可将该数值设置为fuse所支持的最大值128k(即设置-o max_write=131072),以提升性能。
-o use_cache
使用内存作为缓存目录,而非本地磁盘作为cache将提升文件读写性能,即将该值设置为-o use_cache=/dev/shm。如果系统内存使用较高则建议另外挂载一个SSD盘作为缓存目录
-o enable_noobj_cache
使用本参数后,将减少s3fs发送的列举桶的请求,从而提升性能。
-o big writes
开启本参数后,内核会进行IO合并,对于大块读写,提升性能。
-o sigv2
缺省值为采用V4鉴权,使用V2鉴权效率更高,兼容性更好。
-o del_cache
文件使用完成后及时清理缓存中的数据。