MinIO 是一个用 Golang 编写的对象存储 server 开源实现。s3fs 是一个基于 FUSE 框架的以 s3 存储服务作为后端并导出 POSIX 文件系统挂载的开源实现。
本文首先基于 MinIO 搭建一个简单的对象存储服务。然后进一步借助 s3fs 将这个对象存储服务挂载为一个文件系统目录。
搭建 MinIO 对象存储
安装 Minio
go install github.com/minio/minio@latest
启动
mkdir minio_dir
minio server minio_dir
CLI 操作
curl https://dl.min.io/client/mc/release/linux-amd64/mc \
--create-dirs \
-o $HOME/minio-binaries/mc
chmod +x $HOME/minio-binaries/mc
export PATH=$PATH:$HOME/minio-binaries/
# 设置 alias,之后就可以将 myminio 作为第一级目录操作了
mc alias set myminio http://localhost:9000 minioadmin minioadmin
# 一些操作命令样例:
mc ls myminio/zjctest
# 还有很多命令看帮助:
mc --help
webUI 操作
MinIO 启动后有 WebUI 可以使用,只需将启动后终端提示信息中的<地址:端口>输入到浏览器地址栏:
后台文件组织形式
查看我们作为存储后端的 server 侧本地目录,我们可以看到 minio 相对明了的目录组织:
- 首先,就像直觉上那样,所有的文件都在我们指定的目录 ~/minio_dir 中;并且每个 bucket 是一个目录,bucket 下边的 folders 也是一层更深的目录;
- 每个 object 也是一个目录,它的目录下面至少有一个元数据文件 xl.meta;
- object 的数据可能内嵌到元数据文件 xl.meta 中(默认是 128 KB 以下会内嵌);
- object 的数据也可能放到下一级的目录下进行分 part 存储,每个part 文件是 10244 kb。
root@2347:~$ tree -h minio_dir/
minio_dir/
└── [4.0K] zjctest
├── [4.0K] credentials.json
│ └── [ 604] xl.meta
├── [4.0K] folder1
│ └── [4.0K] fio.pdf
│ ├── [4.0K] 0789fc8b-4462-4367-8174-736a3f256b2b
│ │ └── [1000K] part.1
│ └── [ 350] xl.meta
├── [4.0K] zjc
│ └── [ 513] xl.meta
├── [4.0K] zjc3
│ ├── [4.0K] ecbac464-3ee5-4659-96e0-e9f8c1e8150c
│ │ ├── [ 10M] part.1
│ │ ├── [ 10M] part.2
│ │ └── [ 10M] part.3
│ └── [ 506] xl.meta
└── [4.0K] zjc4
└── [128K] xl.meta
9 directories, 9 files
用 s3fs 实现文件系统挂载
由于 MinIO 兼容 s3 协议,通过 s3fs,我们很容易将一个 bucket 作为一个文件系统服务来使用:
# 安装 s3fs
apt install s3fs
# 挂载 zjctest 这一 bucket 到 ~/s3mnt 目录
s3fs zjctest ~/s3mnt/ -o url=http://localhost:9000,passwd_file=/dev/stdin,use_path_request_style < <(echo minioadmin:minioadmin)
# 之后就可以像本地目录一样操作了
注意这里 minio server 运行在本地,所以地址是 localhost:9000。你也可以从其他节点上挂载 s3fs 也是可以行的,那样也就可以看作是一种远程的文件系统服务了。
总结
本文通过 minio 和 s3fs 这两个流行的开源软件,快速搭建了支持远程访问的对象存储、文件存储服务。生产环境也许并非可靠方案,但作为临时使用或个人使用不失一种低成本的搭建形式,希望给你带来帮助或启发。
minio/minio: The Object Store for AI Data Infrastructure (github.com)
s3fs-fuse/s3fs-fuse: FUSE-based file system backed by Amazon S3 (github.com)
cookbook/docs/s3fs-fuse-with-minio.md at master · nitisht/cookbook (github.com)