[转帖]使用 goofys 挂载 S3 bucket 为文件系统
https://xie.infoq.cn/article/7f178e0a1315f758d77c6c2bb
背景
公司的 gitlab 目前都是直接存储在物理盘上,为了确保数据不会丢失,需要重复多次备份到不同的地方,备份的过程中会有多次 IO,影响机器的性能,且随着数据量的增长,备份所需的时间也越来越长,因此需要寻找合适的存储方案。最先尝试 gitlab 推荐的 Minio,经过查阅官方文档,Minio 和 S3 类似,于是想到通过 goofys 将 S3 bucket 挂载到本地,当做文件系统来用,同时也尝试了 s3fs。
goofys 介绍
官方文档的介绍如下:
Goofys allows you to mount an S3 bucket as a filey system.
It's a Filey System instead of a File System because goofys strives for performance first and POSIX second. Particularly things that are difficult to support on S3 or would translate into more than one round-trip would either fail (random writes) or faked (no per-file permission). Goofys does not have an on disk data cache (checkout catfs), and consistency model is close-to-open.
goofys 与 s3fs 的性能对比如下(github 上的性能对比图):

我们可以看到,在读写文件等各方面,goofys 的性能均优越于 s3fs,因此采用 goofys 将 s3 bucket 挂载到本地,当做本地文件系统来使用。
goofys 安装
本文使用 Go 从源代码构建安装 goofys
一、go 安装
yum install go
安装的 go 版本为:go1.10.3 linux/amd64,由于后续在安装的过程中,因为 go 的版本过低,导致安装失败,因此将 go 的版本升级为 go1.16.4 linux/amd64,操作步骤如下:
1、登录 Go国内下载网址 ,当前为 centos 系统,下载 go1.16.4.linux-amd64.tar.gz

2、找到之前 go 版本存放路径,使用命令 whereis go;
3、升级为新版本
# 将旧版本备份
cd /usr/local
mv go go.1.10.3
# 将新版本go压缩包解开当前目录
tar zxf go1.16.4.linux-amd64.tar.gz
# 目录下会释放出go目录
ls -l go
# 将 /usr/local/go/bin 目录添加至PATH环境变量
export PATH=$PATH:/usr/local/go/bin
4、检查 go 版本,go version

二、goofys 从源代码构建
$ export GOPATH=$HOME/work
$ go get github.com/kahing/goofys
$ go install github.com/kahing/goofys
goofys 挂载 s3 bucket
1、将 s3 认证的 key 等信息设置为环境变量
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export AWS_DEFAULT_REGION=us-west-2
2、新建挂载点 /mnt
mkdir /mnt
3、挂载
/usr/local/bin/goofys --debug_fuse --debug_s3 --region beijing --endpoint {endpoint} {bucket} /mnt
4、查看挂载是否成功 df -h 命令
参考文档
1、goofys github 地址: https://github.com/kahing/goofys
2、aws cli 设置环境变量:https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
[转帖]使用 goofys 挂载 S3 bucket 为文件系统的更多相关文章
- [AWS] S3 Bucket
云存储服务 2.1 为网站打开属性 属性和权限设置 设置bucket属性,打开功能:Static website hosting(静态网站托管) 设置bucket权限,Permissions ---- ...
- 利用S3fs在Amazon EC2 Linux实例上挂载S3存储桶
一.准备!!! 1.使用拥有足够权限的IAM账号登录AWS控制台 2.创建S3存储桶,给存储桶命名如"my-bucket"(如果使用已有存储桶,本步骤可略过) 3.有该S3存储桶访 ...
- 嵌入式环境:挂载开发板根NFS文件系统失败
挂载开发板根NFS文件系统的时候,发现了下面的问题: Looking up port of RPC 100003/2 on 192.168.2.109rpcbind: server 192.168.2 ...
- 鸿蒙内核源码分析(挂载目录篇) | 为何文件系统需要挂载 | 百篇博客分析OpenHarmony源码 | v65.01
百篇博客系列篇.本篇为: v65.xx 鸿蒙内核源码分析(挂载目录篇) | 为何文件系统需要挂载 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...
- aws ec2挂载 s3
配置s3 挂载 aws ec2 安装依赖包:yum install -y automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-de ...
- 阿里云oss挂载到linux本地文件系统
对象存储 OSS 阿里云对象存储服务 (OSS) 是一种高度可伸缩且安全可靠的云对象存储服务,让您可以存储.备份和归档大量数据.阿里云 OSS 是一种简单易用的服务,让您每秒能处理数百万请求,它还支持 ...
- CentOS6.5下挂载NTFS格式的文件系统
下载对应CentOS版本的rpmforge,下载地址:http://pkgs.repoforge.org/rpmforge-release/ 安装rpmforge,输入命令:# rpm -ivh rp ...
- 使用 SSHFS 挂载远程的 Linux 文件系统及目录
1. 安装 sudo apt-get install sshfs 2. 创建 SSHFS 挂载目录 sudo mkdir /mnt/cong 3.使用 SSHFS 挂载远程的文件系统 sudo ssh ...
- s3fs 挂载minio为本地文件系统
https://github.com/s3fs-fuse/s3fs-fuse echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3f ...
- 使用s3fs-fuse 挂载minio s3 对象存储
minio 是一个aws s3 兼容的对象存储系统,我们可以通过s3fs 进行数据桶的挂载,这样可以做好多方便的事情 环境准备 使用docker-compose 运行 minio docker-com ...
随机推荐
- 一些Mybatis的知识点&易错点总结
1.映射文件配置容易出错 在映射文件中,我们习惯性在sql语句后面添加';'. 结果是报了一堆错误: org.apache.ibatis.exceptions.PersistenceException ...
- 大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET
摘要:本文介绍大模型低参微调套件--MindSpore PET. 本文分享自华为云社区<大模型高效开发的秘密武器--大模型低参微调套件MindSpore PET篇>,作者:yd_28087 ...
- 华为中国生态大会2021举行在即,GaussDB将重磅发布5大解决方案
摘要:企业数字化转型如火如荼,云成为数字化与新基建的关键要素,数据成为智能时代新的生产资料和企业数字化的生命,而数据库则是支撑数据生命线的底座. 本文分享自华为云社区<华为中国生态大会2021举 ...
- 毕业季 | 华为专家亲授面试秘诀:如何拿到大厂高薪offer?
摘要:了解大厂面试流程.要求以及技巧,做好充分准备,赢在职场起跑线. 本文分享自华为云社区<毕业季 | 华为专家亲授面试秘诀:如何拿到大厂高薪offer?>,作者:华为云社区精选. 同学们 ...
- 云图说丨应用宕机怎么办?MAS帮您实现业务无缝切换
摘要: 多云高可用服务(Multi-cloud high Availability Service,简称MAS)源自华为消费者多云应用高可用方案,提供从流量入口.数据到应用层的端到端的业务故障切换及容 ...
- QA团队基于DataLeap开放平台能力的数据测试实践
背景 &痛点 随着生态体系扩展和业务发展,数据在业务中承担的决策场景越来越多样化,一部分数据已应用在资损.高客诉等高风险场景,因此对数据质量的要求,尤其是高风险场景的质量要求非常之高.但在保障 ...
- SpringBoot java 一个接口,多个实现,客户定制化
产品定制化时,在不同的客户中会有不同的需求,这时候会产生,一个接口,多个实现 SpringBoot ,如果发现有多实现时,会报如下错误 Consider marking one of the bean ...
- Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
1.Nuget包添加引用: X.PagedList.Mvc.Core 2.View: @using VipSoft.Web.Model @model X.PagedList.IPagedList< ...
- Ubuntu 安装 MySQL 5.7
一.安装MySQL 1. 删除Mysql 数据库 sudo apt autoremove --purge mysql-server-* sudo apt remove mysql-server sud ...
- Codeforces Round 908 (Div. 2)
总结 T1 题目大意: A,B两人玩游戏,游戏规则如下: 整场游戏有多轮,每轮游戏先胜 \(X\) 局的人获胜,每场游戏先胜 \(Y\) 局的人获胜. 你在场边观看了比赛,但是你忘记了 \(x\) 和 ...