使用 ossfs 挂载阿里云 OSS 至本地文件系统

ossfs 能让您在 Linux 系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享。

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

ossfs 支持在阿里云内网以及互联网环境下使用。在内网环境下时,建议使用内网访问域名,以提升访问速度和稳定性。

以 CentOS 8.X 为例, ossfs 依赖 fuse ,使用 yum 安装可以解决依赖问题

1
yum install -y https://gosspublic.alicdn.com/ossfs/ossfs_1.91.1_centos8.0_x86_64.rpm

ossfs 下载地址

配置账号访问信息

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

1
2
sudo echo BucketName:yourAccessKeyId:yourAccessKeySecret > /etc/passwd-ossfs
sudo chmod 640 /etc/passwd-ossfs

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

1
2
sudo echo bucket-test:LTAIbZcdVCmQ****:MOk8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs
sudo chmod 640 /etc/passwd-ossfs

将Bucket挂载到指定目录

1
sudo ossfs BucketName mountfolder -o url=Endpoint

示例: 将杭州地域名称为 bucket-test 的 Bucket 挂载到 /tmp/ossfs 目录下的示例如下:

1
2
sudo mkdir /tmp/ossfs
sudo ossfs bucket-test /tmp/ossfs -o url=http://oss-cn-hangzhou.aliyuncs.com

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

1
sudo fusermount -u /tmp/ossfs

ossfs 除了可以把整个存储空间挂载到本地文件系统外,还可以通过设置前缀,把存储空间下的某个文件目录挂载到本地文件系统。命令格式如下:

1
ossfs bucket:/prefix mount_point -ourl=endpoint

通过这个方式挂载时,需要确保存储空间里存在 ${prefix}/ 对象。您可以通过 ossutil 的 stat(查看Bucket和Object信息)命令查询该对象是否存在

示例:将位于杭州地域的存储空间 bucket-ossfs-test 下的 folder 目录挂载到 /tmp/ossfs-folder

1
ossfs bucket-ossfs-test:/folder /tmp/ossfs-folder -ourl=http://oss-cn-hangzhou.aliyuncs.com

通过 fstab 的方式自动挂载

/etc/fstab 中加入如下命令:

1
ossfs#zr-repo mount_point fuse _netdev,url=url,allow_other,nonempty 0 0

保存 /etc/fstab 文件。 执行 mount -a命令,如果没有报错,则说明设置正常

通过 systemd 开机自动进行挂载

创建 /usr/lib/systemd/system/ossfs.service/etc/sysconfig/ossfs

/usr/lib/systemd/system/ossfs.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[Unit]
Description=Mount an Alibaba Cloud OSS bucket as a file system
After=syslog.target network.target remote-fs.target

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/ossfs
ExecStartPre=
ExecStart=/usr/local/bin/ossfs $BUCKETNAME $MOUNTPOINT -o url=$ENDPOINT
ExecReload=
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

/etc/sysconfig/ossfs

1
2
3
BUCKETNAME=bucket-ossfs-test
MOUNTPOINT=/tmp/ossfs-folder
ENDPOINT=http://oss-cn-hangzhou.aliyuncs.com

注意:值需要替换为自己的当前的配置

启动并设置开机自动挂载

1
systemctl enable --now ossfs.service

更新高级配置参考: https://help.aliyun.com/zh/oss/developer-reference/advanced-configurations