s3fs-fuse 把 s3-like 对象存储挂载到本地
s3fs-fuse
是一个采用 c++ 开发的开源应用,它的作用是可以将 AWS S3
以及兼容 S3 API
的第三方对象存储像普通文件系统一样挂载到本地计算机,由于这种功能通过 FUSE
实现,因此只能在 Linux 和 MacOS 上使用。
安装
包管理器安装
Debian 9 和 Ubuntu 16.04 及以上版本:
$ sudo apt install s3fs
发行版软件仓库中可能提供的不是最新版本
编译安装
如果希望使用最新版本,可以自己编译。
安装编译工具和依赖
$ sudo apt-get install automake autotools-dev fuse g++ git libcurl4-openssl-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
克隆仓库并编译
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git
$ cd s3fs-fuse
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
上述编译过程最后会将编译好的程序安装到 /usr/local
下的 bin
和 man
目录。
我通常会修改 ./configure
命令,添加 --prefix
参数去指定安装位置,比如:
$ ./configure --prefix=/opt/s3fs
这样最终编译好的二进制文件和手册就会被复制到 /opt/s3fs
目录,其实对于 s3fs-fuse
这个程序来说,最终有一个 s3fs
二进制文件。
对于桌面用户来说,完全可以把他放到 ~/.local/bin
下面,这样会比较便于管理。
使用
准备密码文件
S3 及兼容 API 的对象存储无一例外的都采用 ACCESS KEY
和 ACCESS SECRET
认证身份,为了方便配置,可以将认证 KEY 放到独立的密码文件中,s3fs
默认会从以下两个文件中读取认证信息:
- 用户家目录下的
.passwd-s3fs
文件 (例如 ~/.passwd-s3fs) - 全局文件
/etc/passwd-s3fs
任选其一即可,文件默认不存在,需要自己手动创建。
$ echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ~/.passwd-s3fs
$ chmod 600 ~/.passwd-s3fs
挂载 AWS S3
$ s3fs mybucket /path/to/mountpoint -o passwd_file=~/.passwd-s3fs
mybucket
替换成实际的 S3 Bucket/path/to/mountpoint
替换成本地挂载点-o
用来指定额外的参数,除非密码文件没有放在默认位置,否则不需指定密码文件。
挂载兼容 S3 API 的第三方对象存储
例如挂载阿里云 OSS,只需要用 -o
指定阿里云外网 Endpoint
地址即可。
$ s3fs mybucket /path/to/mountpoint -o url=https://oss-cn-shanghai.aliyuncs.com -o use_path_request_style
use_path_request_style
参数是对那些还不支持virtual-host
请求风格的对象存储而提供的参数,指定该参数会使用传统的 API 调用风格。实测表明,阿里云 OSS 不需指定该参数。
开机自动挂载
编辑 /etc/fstab
:
For S3
s3fs#mybucket /path/to/mountpoint fuse _netdev,allow_other 0 0
For S3-like
s3fs#mybucket /path/to/mountpoint fuse _netdev,allow_other,use_path_request_style,url=http://url.to.s3/ 0 0
注意:设置开机自动挂载可能需要把
s3fs
二进制文件放到/usr/local/bin
目录,还要使用全局配置文件/etc/passwd-s3fs
保存密码。
use_cache 使用缓存
设置 use_cache
将本地计算机的某个位置作为缓存,从而提高数据上传的效率。
$ s3fs mybucket /path/to/mountpoint -o url=https://oss-cn-shanghai.aliyuncs.com -o use_cache=/tmp
del_cache 删除缓存
指定 del_cache
参数,当 s3fs 启动和退出时会自动删除缓存文件。
性能优化
s3fs <bucket_name> <mountpoint> -o url=http{s}://<COS_endpoint> –o passwd_file=<credentials_file> \
-o cipher_suites=AESGCM \
-o kernel_cache \
-o max_background=1000 \
-o max_stat_cache_size=100000 \
-o multipart_size=52 \
-o parallel_count=30 \
-o multireq_max=30 \
-o dbglevel=warn
卸载
$ sudo umount /path/to/mountpoint
Background Knowlage
Filesystem in Userspace
简称 FUSE
。它允许 Unix 普通用户在不修改内核的条件下能够创建自己的文件系统。目前 Linux 通过内核模块对 FUSE 进行支持。一些文件系统如 ZFS、glusterfs 和 lustre 通过 FUSE 实现。