以下是 Mountpoint for Amazon S3 的安装和与 S3 兼容服务(如 RustFS)配合使用的教程。 ### 1. 安装 Mountpoint Mountpoint 提供预编译的安装包,支持多种 Linux 发行版。 * **Ubuntu / Debian (基于 DEB)** ```bash # 下载适用于 x86_64 架构的 .deb 包 wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.deb # 安装 sudo apt-get install -y ./mount-s3.deb ``` 对于 ARM64 架构,将 URL 中的 `x86_64` 替换为 `arm64`。 * **Amazon Linux / RHEL / CentOS (基于 RPM)** ```bash # 下载适用于 x86_64 架构的 .rpm 包 wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm # 安装 sudo yum install -y ./mount-s3.rpm ``` 对于 ARM64 架构,将 URL 中的 `x86_64` 替换为 `arm64`。 * **验证安装** 安装完成后,运行以下命令验证是否成功: ```bash mount-s3 --version ``` 如果安装成功,会输出版本信息,例如 `mount-s3 1.21.0`。 ### 2. 配置访问凭证 Mountpoint 使用与 AWS CLI 相同的方式发现凭证。对于自建的 S3 服务,你需要通过环境变量提供访问密钥: ```bash export AWS_ACCESS_KEY_ID=myaccesskey export AWS_SECRET_ACCESS_KEY=mysecretkey export AWS_ENDPOINT_URL=http://你的RustFS服务IP:9000 ``` Mountpoint 会自动读取这些环境变量。 ### 3. 挂载存储桶 #### 3.1 基础挂载(适用于 AWS S3) 如果你的目标是标准的 AWS S3,挂载命令非常简单: ```bash mkdir ~/mnt mount-s3 my-bucket ~/mnt ``` 此时,`~/mnt` 目录就成为了你 S3 存储桶的挂载点。 #### 3.2 挂载到 S3 兼容服务(如 RustFS) 对于非 AWS 的 S3 兼容服务,**必须指定服务端点(Endpoint)**。 Mountpoint 提供两种方式: * **方式一:使用命令行参数 `--endpoint-url`** ```bash mount-s3 my-bucket ~/mnt --endpoint-url http://你的RustFS服务IP:9000 ``` * **方式二:使用环境变量 `AWS_ENDPOINT_URL`(推荐)** 这种方式更便于在容器或脚本中统一管理配置。 ```bash export AWS_ENDPOINT_URL=http://你的RustFS服务IP:9000 mount-s3 my-bucket ~/mnt ``` > **注意**:Mountpoint 默认使用 `virtual-hosted-style` 的请求方式。如果你的 S3 服务(如 RustFS)不支持这种样式,可能会遇到 DNS 解析问题。此时,你可能需要在挂载时添加 `--endpoint-url` 参数,并确保其指向正确的服务地址。 ### 4. 启用 10GB 本地缓存 Mountpoint 支持可选的本地缓存,用于加速对热点数据的重复读取。它的工作模式是按需加载,只有被访问过的数据才会被缓存。 你可以通过以下参数启用并限制缓存大小: * `--cache <目录>`:指定缓存数据存放的本地目录。 * `--max-cache-size <大小>`:**以 MiB 为单位**设置缓存的最大容量。缓存淘汰策略为 **LRU(最近最少使用)**。 **挂载命令示例(10GB = 10240 MiB):** ```bash # 创建缓存目录 mkdir ~/cache # 挂载并启用缓存,限制最大10GB mount-s3 my-bucket ~/mnt \ --endpoint-url http://你的RustFS服务IP:9000 \ --cache ~/cache \ --max-cache-size 10240 ``` 当缓存占满后,Mountpoint 会自动淘汰最久未使用的数据以腾出空间。 ### 5. 其他常用选项 * **元数据缓存 (`--metadata-ttl`)**:缓存文件的元数据(如大小、存在性),可减少对 S3 的请求。但需要注意,这可能会使外部对文件的修改无法及时看到。 * **后台运行**:`mount-s3` 命令默认在后台运行,不会阻塞终端。 * **卸载挂载点**: ```bash umount ~/mnt ``` 如果权限不足,可能需要使用 `sudo`。 ### 6. 核心注意事项 1. **缓存仅加速读取**:本地缓存**仅对读取操作生效**。所有的写入(创建、修改、删除)操作都会**直接提交到后端的 S3 服务**,不会先写入缓存。 2. **非完整 POSIX 兼容**:Mountpoint 并非一个完整的 POSIX 文件系统,它针对高吞吐量的读写访问进行了优化。一些依赖复杂文件系统特性(如文件锁、稀疏文件等)的应用可能无法正常工作。 3. **权限问题**:如果遇到权限错误,可以尝试在挂载命令中添加 `--allow-other` 参数,允许其他用户访问挂载点。 ### 7. 在 Docker 容器中使用 Mountpoint 也提供了官方 Docker 镜像,方便在容器化环境中使用。 ```bash # 拉取镜像 docker pull public.ecr.aws/mountpoint-s3/mountpoint-s3 # 运行容器并挂载 docker run -it --rm \ --cap-add SYS_ADMIN \ --device /dev/fuse \ -e AWS_ACCESS_KEY_ID=myaccesskey \ -e AWS_SECRET_ACCESS_KEY=mysecretkey \ -e AWS_ENDPOINT_URL=http://你的RustFS服务IP:9000 \ public.ecr.aws/mountpoint-s3/mountpoint-s3 \ my-bucket /mnt ``` 注意,运行需要添加 `--cap-add SYS_ADMIN` 和 `--device /dev/fuse` 权限。 ## 查询所有挂载 mount | grep mountpoint-s3 ## 取消挂载 umount