littlebot
Published on 2025-04-03 / 0 Visits
0

【源码】基于Go语言的S3存储桶本地挂载工具

项目简介

go-s3fs 是一款适用于 Linux/MacOS 系统的工具,它能够将 S3 存储桶挂载到本地挂载点。挂载成功后,用户可以像操作本地文件一样操作 S3 存储桶里的文件,极大地方便了对 S3 存储桶的访问。

项目的主要特性和功能

  1. 广泛适配:适配任何使用 S3 协议的对象存储提供商。
  2. 功能丰富:支持 POSIX 文件系统的大部分功能,包括读、顺序写,以及权限、uid/gid 管理。
  3. 性能优越:相较于 s3fs-fuse,具有更高的性能。
  4. 权限可控:支持对挂载点进行访问权限控制。

安装使用步骤

环境准备

确保机器支持 fuse,且 fuse 版本大于 7.23。

配置账号访问信息

编辑 /etc/go-s3fs/go-s3fs.yaml 并添加如下内容(若该目录不存在需自行创建): access_key: ************************************ secret_key: ************************************ endpoint: <s3 endpoint, like: s3-us-west-2.amazonaws.com> 冒号后需有单个空格。其中,access_key 为公钥,支持 token 秘钥和 api 秘钥两种模式;secret_key 为私钥,同样支持这两种模式;endpoint 是 s3 的访问域名。

赋予执行权限

下载 go-s3fs 后,使用 chmod +x go-s3fs 增加可执行权限。若要直接执行,可将 go-s3fs 移动到 /bin 目录下。示例: bash chmod +x go-s3fs

挂载操作

go-s3fs [global options] <bucket> <mountpoint>

卸载操作

umount <mountpoint>

前台挂载

./go-s3fs --passwd=passwd_file -f <bucket> <mountpoint>

开启日志

若想设置日志级别或日志输出目录,示例如下: ./go-s3fs --passwd=passwd_file --level debug --log_dir /var/log/go-s3fs/ <bucket> <mountpoint>

查看帮助

通过 go-s3fs -h 查看 go-s3fs 支持的参数。

设置 fuse 层参数

fuse 常用选项列表(与 -o 一起使用): | 选项名称 | 描述 | | --- | --- | | allow_other | 指定文件系统可以所有用户访问,默认关闭 | | ro | 指定当前文件系统为只读 | 使用方式: bash -o option=value

本地服务支持

在 ubuntu 和 centos 等使用 systemctl 的发行版中,可在 /etc/systemd/system/ 目录下创建名为 go-s3fs.service 的文件,并添加如下内容: ```bash [Unit] Description=GO_S3FS (User Space FileSystem for S3) Requires=network-online.target After=network-online.target

[Service] Type=forking User= Group= Restart=always RestartSec=10 ExecStart=/bin/go-s3fs --passwd=/etc/go-s3fs/go-s3fs.yaml ExecStop=/bin/umount [Install] WantedBy=multi-user.target ``User为需要访问挂载点的用户,若为 root 则可省略;Group为需要访问挂载点的用户组,若为 root 则可省略;ExecStart为挂载命令,需按实际情况填写。 执行systemctl dameon-reload后,可使用systemctl start go-s3fs.service启动服务,systemctl stop go-s3fs.service停止服务,systemctl restart go-s3fs.service重启服务,systemctl statue go-s3fs.service查看服务状态,systemctl enable go-s3fs.service` 设置为开机自启动。

查看监控

项目自带监控展示,可查看相关性能指标。

自带 pprof

go-s3fs 启动时,会在 8899 端口监听 pprof,便于问题定位。

使用限制

  • 仅支持顺序写,不支持随机写/追加写。
  • 不支持硬/软链接。
  • 由于对象存储端的限制,rename 会替换成 copy+delete,因此 rename 是非原子性的操作。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】