通过s3fs挂载OBS对象桶
应用场景
对于原本使用本地文件系统存储数据的用户,希望把数据存储在OBS上但不改变数据的访问方式,推荐使用s3fs。
s3fs是一款基于用户空间文件系统(Filesystem in Userspace,简称FUSE)的文件系统工具,支持您在Linux系统中,将OBS对象桶挂载到本地文件系统,让您能够像操作本地文件一样操作对象,实现数据的共享。关于s3fs的更多信息,请参见GitHub。如果您在s3fs使用过程中遇到问题,请参见常见问题进行排查。
方案优势
- 支持上传和下载文件、目录、 软链接、设置用户权限等POSIX文件协议标准的大部分功能。
- 支持多段上传。
- 可以使用本地磁盘作为缓存提高IO性能。
约束与限制
- 随机写或追加写文件场景需要重写整个文件,会有带宽浪费。
- 由于网络延迟,元数据操作(如列举目录)性能较差。
- 不支持文件或目录的原子性重命名。
- 支持挂载到多台云服务器,但数据一致性需由您自行维护,避免出现多台云服务器同时对一个文件并发写入的情况。
- 不支持硬链接。
- s3fs与存储服务端交互采用HTTP/HTTPS协议,客户端CPU开销会较大。
- 因为客户端存在操作系统元数据缓存,可能导致该缓存失效前,客户端元数据与存储服务端元数据呈现不一致现象。
- 因使用FUSE框架存在内核态与用户态切换,不适合高并发场景。
实施步骤
通过s3fs挂载OBS对象桶的步骤如下:
- 下载相关依赖:
yum install fuse sudo yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel
需要保证云服务器上fuse版本>= 2.8.4,部分过老操作系统可能不满足这个约束,需要自行适配。
- 支持通过以下两种方式下载s3fs。
- 方式一:镜像源安装。
# Ubuntu sudo apt install s3fs # CentOS sudo yum install epel-release sudo yum install s3fs-fuse
- 方式二:GitHub获取指定版本安装。
推荐使用s3fs 1.91 版本,下载以后自行编译安装。
- 方式一:镜像源安装。
- 编译。
进入s3fs-fuse解压目录,按照以下命令执行编译操作:
./autogen.sh ./configure make sudo make install
- 执行以下命令检查安装情况。
s3fs --version
当命令回显出现s3fs版本信息时,表示s3fs能够成功运行。
- 配置AK:SK。
按照以下命令配置AK:SK:
echo "AK:SK" >>/root/.passwd-s3fs chmod 600 /root/.passwd-s3fs
- 挂载。
按照以下格式执行挂载命令:
s3fs 对象桶名 本地挂载目录 -o passwd_file=密钥文件路径 -o url=区域终端节点地址 -o nonempty -o big_writes -o max_write=131072 其他挂载参数
例如,通过s3fs挂载华北-北京四区域的OBS对象桶“test-bucket”,命令示例如下:
s3fs test-bucket /s3fs-test -o passwd_file=/root/.passwd-s3fs -o url=https://obs.cn-north-4.myhuaweicloud.com -o nonempty -o big_writes -o max_write=131072
- 验证。
执行以下命令,检查挂载结果。
df -h
当界面显示如下类似回显信息时,表示对象桶挂载成功。
Filesystem Size Used Avail Use% Mounted on s3fs 16E 0 16E 0% /s3fs-test
如果没有显示以上类似回显信息,表示OBS桶挂载失败。此时可在执行的挂载命令后面添加以下参数,用以在回显中输出挂载过程以及详细调试日志:
-d -d -f -o f2 -o curldbg
常见参数说明
参数 |
说明 |
---|---|
umask |
参数解释: 配置文件权限的掩码,使用此参数会覆盖并行文件系统内所有文件的权限。 默认取值: 0000 |
nonempty |
参数解释: 添加该参数后允许在非空目录上挂载。 默认取值: 无 |
multipart_size |
参数解释: 以多段上传模式上传文件时,段的大小,单位为MB。段的大小会影响能够上传的文件大小,具体参考多段上传。 取值范围: 5~5120,单位:MB。 默认取值: 10 |
no_check_certificate |
参数解释: 对服务端的证书不做校验,仅在使用HTTPS协议时有效,默认开启证书校验。 默认取值: 无 |
use_cache |
参数解释: 用于本地文件缓存的地址,使用该参数后,IO性能会提升,但是磁盘占用会升高,可以和del_cache配合使用。 默认取值: ""(表示不使用缓存) |
del_cache |
参数解释: s3fs进程在启动和退出时删除本地缓存文件。 默认取值: 无 |
更多参数详见s3fs-fuse。