侧边栏壁纸
博主头像
黑山老妖博主等级

记录精彩的坎坷人生

  • 累计撰写 80 篇文章
  • 累计创建 77 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

使用ossfs将OSS Bucket挂载到Linux系统的本地目录

我是我村的希望
2024-02-26 / 2 评论 / 2 点赞 / 47 阅读 / 6038 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-02-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

功能原理

3fs是一个用户空间文件系统(userspace filesystem),它允许您在Linux系统上将Amazon S3存储桶挂载为本地文件系统。ossfs基于s3fs构建,具有s3fs的全部功能。其中包括:

  • 支持POSIX文件协议标准的大部分功能,例如上传下载文件、目录,设置用户权限等。
  • 默认使用OSS的分片上传和断点续传功能上传文件。
  • 支持MD5校验,保证数据的完整性。

运行环境

ossfs基于FUSE(Filesystem in Userspace)用户态文件系统开发,只能运行在支持FUSE的机器上。ossfs提供Ubuntu系统和CentOS系统的安装包。如果需要在其他环境下运行,可以通过源码方式构建目标程序。

Linux系统

CentOS 7.0及以上版本。

Ubuntu 14.04及以上版本。

Anolis7及以上版本。

fuse软件

2.8.4以上版本。

使用如下命令判断fuse版本:fusermount -V

返回结果如:fusermount version: 2.9.2,表示fuse满足版本要求。

使用限制

ossfs将远程Bucket数据及功能映射到本地文件系统,在使用上存在如下限制:

  • 不适合高并发读写的场景。
  • 不支持文件硬链接。
  • 不支持访问未解冻的归档(未开启归档直读)、冷归档、深度冷归档类型的文件。
  • 多个客户端挂载同一个OSS Bucket,且同时写入同一个文件时,无法保证数据的一致性。

操作步骤

以下操作步骤均以ecs-user用户进行演示,若使用root用户,请去除命令开头的sudo

下载地址

以下列表中提供了常用系统的安装包,如果您的系统版本不在以下列表中,请通过源码编译。源码地址以及如何进行源码编译

Linux发行版下载
Ubuntu 22.04 (x64)ossfs_1.91.1_ubuntu22.04_amd64.deb
Ubuntu 20.04 (x64)ossfs_1.91.1_ubuntu20.04_amd64.deb
Ubuntu 18.04 (x64)ossfs_1.91.1_ubuntu18.04_amd64.deb
Ubuntu 16.04 (x64)ossfs_1.91.1_ubuntu16.04_amd64.deb
Ubuntu 14.04 (x64)ossfs_1.91.1_ubuntu14.04_amd64.deb
CentOS 8.0 (x64)ossfs_1.91.1_centos8.0_x86_64.rpm
CentOS 7.0 (x64)ossfs_1.91.1_centos7.0_x86_64.rpm
Anolis8/Alibaba Cloud Linux 3ossfs_1.91.1_anolisos8.0_x86_64.rpm
Anolis7/Alibaba Cloud Linux 2ossfs_1.91.1_anolisos7.0_x86_64.rpm

快速安装

  1. 安装ossfs。 Ubuntu系统 以Ubuntu 16.04 (x64)版本为例,依次执行以下命令安装ossfs。
sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.1_ubuntu16.04_amd64.deb
sudo apt-get update
sudo apt-get install gdebi-core
sudo gdebi ossfs_1.91.1_ubuntu16.04_amd64.deb

CentOS系统/Anolis系统 以CentOS 7.0(x64)版本为例,安装命令如下:

sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.1_centos7.0_x86_64.rpm
sudo yum install ossfs_1.91.1_centos7.0_x86_64.rpm

对于使用yum安装rpm包的客户端,如果客户端节点网络环境特殊,无法直接使用yum下载依赖包。您可以在网络正常的、相同版本操作系统的节点上,使用yum下载依赖包并拷贝到网络特殊的节点。例如,ossfs需要依赖fuse 2.8.4以上版本,可使用如下命令,下载yum源中最新的fuse到本地:

sudo yum install --downloadonly --downloaddir=./ fuse

如果需要下载其他依赖包,请将fuse换成对应包的名称。

  1. 如果您希望上传文件的Content-Type和文件扩展名匹配,您需要添加mime.types文件。 如果您不添加mime.types文件,ossfs默认将上传文件的Content-Type设置为application/octet-stream。 通过命令添加mime.types文件的示例如下。

Ubuntu系统 您可以通过以下命令添加mime.types文件。

sudo apt-get install mime-support

CentOS系统/Anolis系统 您可以通过以下命令添加mime.types文件。

sudo yum install mailcap

确认fuse版本

fusermount -V

返回结果如:fusermount version: 2.9.2,表示fuse满足版本要求。

挂载访问

1、选择需要进行本地挂载的Bucket。

不推荐挂载低频访问或者开启了归档直读类型的Bucket。向这些类型的挂载点上传文件时,可能会出现两次上传请求,第一次是生成一个0大小的对象,然后上传有效数据,生效新对象。 由于文件都是低频/归档属性,所以0大小的文件会按照低频/归档文件的计费逻辑被收取64KB 30天的费用,导致产生预期外的费用。

2、配置账号访问信息。

将Bucket名称以及具有该Bucket访问权限的RAM用户的AccessKey ID和AccessKey Secret信息存放在/etc/passwd-ossfs文件中,并设置文件的权限为640。

sudo sh -c 'echo <BucketName>:<yourAccessKeyId>:<yourAccessKeySecret> > /etc/passwd-ossfs'
### root 用户可使用以下命令:###
# echo <BucketName>:<yourAccessKeyId>:<yourAccessKeySecret> > /etc/passwd-ossfs
sudo chmod 640 /etc/passwd-ossfs

BucketName、yourAccessKeyId、yourAccessKeySecret请按需替换为您实际的Bucket名称、AccessKey ID和AccessKey Secret,例如:

sudo sh -c 'echo bucket-test:LTAIbZcdVCmQ****:MOk8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs'
sudo chmod 640 /etc/passwd-ossfs

3、将Bucket挂载到指定目录。

sudo ossfs <BucketName> <mountfolder> -o url=<Endpoint>
  • 将杭州地域名称为bucket-test的Bucket挂载到/tmp/ossfs目录下的示例如下:
sudo mkdir /tmp/ossfs
sudo ossfs bucket-test /tmp/ossfs -o url=http://oss-cn-hangzhou-internal.aliyuncs.com

如果您使用从阿里云购买的云服务器ECS来提供ossfs服务,您可以使用内网域名,但是需要注意,使用内网Endpoint要求您的ECS必须和即将挂载的Bucket处于同一地域。例如,在该示例中您可以将OSS Endpoint 修改为oss-cn-hangzhou-internal.aliyuncs.com,从而节省流量费用。

4、您可以像访问本地文件系统一样读取Bucket中的对象。

查看文件列表

sudo ls -lh /tmp/ossfs

otmbvscw.png

元数据操作(例如list directory)需要远程访问OSS服务器,存在网络延迟。

5、如果您不希望继续挂载此Bucket,您可以将其卸载。

sudo fusermount -u /tmp/ossfs
2
广告 广告

评论区