wei/个人文档/rclone挂载s3.md
2026-06-26 10:12:32 +08:00

234 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

以下是完整的部署方案文档,包含 systemd 管理 rclone 挂载 MinIO 桶的步骤、新增挂载的方法以及常见问题处理。
---
# Rclone + Systemd 挂载 MinIO 桶到 CentOS 9 完整方案
## 1. 概述
本方案使用 **systemd 模板单元** 管理多个 MinIO 桶的挂载,相较于 `/etc/fstab` 更稳定、可控,支持网络依赖、自动重启和开机自启。所有桶统一挂载到 `/mnt/oss/<bucket-name>` 目录下。
### 适用环境
- CentOS 9 Stream / RHEL 9 及其衍生版
- MinIO 兼容 S3 接口
- rclone v1.74+ 已安装
---
## 2. 安装与准备
### 2.1 安装 rclone 及依赖
```bash
# 启用 CRB 仓库CentOS 9 需要)
sudo dnf config-manager --set-enabled crb
# 安装 rclone 和 fuse
sudo dnf install -y rclone fuse fuse-devel fuse3
```
### 2.2 加载 fuse 内核模块并启用 user_allow_other
```bash
sudo modprobe fuse
echo fuse | sudo tee /etc/modules-load.d/fuse.conf
# 启用允许其他用户访问挂载点
sudo sed -i 's/# user_allow_other/user_allow_other/' /etc/fuse.conf
```
### 2.3 验证安装
```bash
rclone --version
```
---
## 3. 配置 rclone 连接 MinIO
### 3.1 创建配置文件
编辑 `/root/.config/rclone/rclone.conf`(若目录不存在则创建):
```ini
[oss]
type = s3
provider = Minio
access_key_id = YOUR_ACCESS_KEY
secret_access_key = YOUR_SECRET_KEY
endpoint = http://YOUR_MINIO_IP:9000
# 如果 MinIO 使用路径风格请求,取消下面注释
# force_path_style = true
```
**参数说明**
- `oss`:远程端点名称,后续挂载时使用 `oss:bucket-name`
- `access_key_id` / `secret_access_key`MinIO 的 AK/SK
- `endpoint`MinIO API 地址(不是 Web 控制台地址)
### 3.2 测试连接
```bash
rclone ls oss:your-bucket-name
```
若能列出文件,说明配置成功。
---
## 4. 创建挂载点目录
```bash
# 创建基础目录
sudo mkdir -p /mnt/oss
# 为每个桶创建子目录(示例,按需创建)
sudo mkdir -p /mnt/oss/{level2-csv,level2-feather,orderbook,stock-bar-1m,stock-twap-1m,stock-vwap-1m,exit4-price,stock-bar-daily}
```
> 挂载目录名称建议与桶名一致,便于管理。
---
## 5. 创建 systemd 模板单元
### 5.1 编写服务模板
创建文件 `/etc/systemd/system/rclone-mount@.service`,内容如下:
```ini
[Unit]
Description=Rclone Mount for %I
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=root
ExecStart=/usr/bin/rclone mount --daemon \
--config=/root/.config/rclone/rclone.conf \
--allow-other \
--vfs-cache-mode=full \
--vfs-write-back 0 \
oss:%i /mnt/oss/%i
ExecStop=/bin/fusermount -uz /mnt/oss/%i
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
```
**关键参数说明**
- `%I`:模板实例名称,例如 `orderbook`,对应桶名和挂载点子目录名
- `--daemon`:让 rclone 以后台进程运行
- `--vfs-cache-mode=full`:支持随机读写,可改为 `writes``off` 根据需求
- `Restart=on-failure`:挂载异常退出时自动重试
- `ExecStop`:卸载时使用 `fusermount -uz` 强制卸载
### 5.2 重新加载 systemd
```bash
sudo systemctl daemon-reload
```
---
## 6. 启用并启动挂载服务
### 6.1 为单个桶启用
```bash
sudo systemctl enable rclone-mount@orderbook
sudo systemctl start rclone-mount@orderbook
```
### 6.2 批量启用所有桶(以你的 8 个桶为例)
```bash
for bucket in level2-csv level2-feather orderbook stock-bar-1m stock-twap-1m stock-vwap-1m exit4-price stock-bar-daily; do
sudo systemctl enable rclone-mount@$bucket
sudo systemctl start rclone-mount@$bucket
done
```
### 6.3 验证挂载
```bash
# 查看服务状态
sudo systemctl status 'rclone-mount@*'
# 检查挂载点
mount | grep rclone
# 测试访问
ls /mnt/oss/orderbook
```
---
## 7. 管理命令
| 操作 | 命令 |
|------|------|
| 查看所有挂载服务状态 | `systemctl status 'rclone-mount@*'` |
| 重启指定桶的挂载 | `systemctl restart rclone-mount@orderbook` |
| 停止挂载 | `systemctl stop rclone-mount@orderbook` |
| 禁用开机自启 | `systemctl disable rclone-mount@orderbook` |
| 查看某桶的挂载日志 | `journalctl -u rclone-mount@orderbook -f` |
| 手动卸载(紧急) | `fusermount -uz /mnt/oss/orderbook` |
---
## 8. 新增挂载点的方法
后续如果需要挂载新的 MinIO 桶(例如 `new-bucket`),只需执行以下三步:
### 8.1 创建挂载点目录
```bash
sudo mkdir -p /mnt/oss/new-bucket
```
### 8.2 启用服务
```bash
sudo systemctl enable rclone-mount@new-bucket
sudo systemctl start rclone-mount@new-bucket
```
### 8.3 验证
```bash
ls /mnt/oss/new-bucket
```
> 无需修改任何配置文件,模板 `rclone-mount@.service` 会自动处理。
---
## 9. 卸载所有挂载点(如需移除)
```bash
# 停止所有 rclone 挂载服务
sudo systemctl stop 'rclone-mount@*'
# 可选:禁用所有
sudo systemctl disable 'rclone-mount@*'
# 手动确认无残留
mount | grep rclone
```
---
## 10. 总结
通过 systemd 模板单元管理 MinIO 桶挂载,具有以下优点:
- **一次配置,无限新增**:新增桶只需 `systemctl enable/start rclone-mount@newbucket`
- **开机自启,网络感知**:等待网络就绪后挂载,避免启动失败
- **自动恢复**:挂载异常退出时自动重试
- **统一管理**:日志、状态、启停均通过 systemctl 完成
> 本方案已在 CentOS 9 Stream + rclone v1.74 环境下验证通过。
如有其他问题,可通过 `journalctl -u rclone-mount@your-bucket -n 50` 查看详细日志并定位。