RustFS 单节点部署指南(Ubuntu 22.04 与 CentOS 8)
以 RustFS 1.0.1 官方静态二进制在 Ubuntu 22.04 与 CentOS 8 上完成从依赖安装、二进制下载、数据目录规划、命令行启动、systemd 自启动到 AWS CLI 验证 S3 读写的完整单节点部署,覆盖 SNSD(单盘)与 SNMD(多盘纠删码)两种形态,并给出在线与离线 tar.gz 两种部署方式
RustFS 单节点部署指南(Ubuntu 22.04 与 CentOS 8)
目标:以 RustFS 1.0.1 官方静态二进制,在 Ubuntu 22.04 与 CentOS 8 上完成从依赖安装、二进制下载、数据目录规划、命令行启动、systemd 自启动,到 AWS CLI 验证 S3 上传/下载的完整单节点部署。单节点包含 SNSD(单盘,无冗余)与 SNMD(多盘纠删码,容忍盘级故障)两种形态,并覆盖在线下载与离线 tar.gz 两种部署方式。
一、RustFS 简介与版本选型
RustFS 是一个用 Rust 语言编写的高性能分布式对象存储系统,完全兼容 S3 API,采用 Apache 2.0 开源协议。它在 MinIO 的运维模型基础上,用 Rust 从零实现了对象存储的核心存储路径,官方宣称在 PUT 性能上对标 MinIO 并具备显著优势。
- 纯 Rust 实现:内存安全、零成本抽象,单二进制交付,不依赖运行时;
- S3 兼容:支持 AWS Signature V4,可无缝对接 AWS CLI、boto3、s3cmd 等客户端;
- 三种拓扑:SNSD(单节点单盘)、SNMD(单节点多盘)、MNMD(多节点多盘,生产推荐);
- 纠删码:对象按 12 数据块 + 4 校验块(12+4)切分并分散存储,单节点多盘与多节点场景下均可容忍盘/节点故障;
- 内置控制台:Web 管理界面(默认 9001 端口);
- 可观测性:内置 OpenTelemetry 链路,可对接 Prometheus、Grafana、Jaeger。
1.1 版本选型
| 版本线 | 最新版本 | 发布日期 | 说明 |
|---|---|---|---|
| 1.0.x(当前主线) | 1.0.1 | 2026-10-03 | 稳定 GA 版本,推荐生产使用 |
本文以 1.0.1 为准。实测版本信息:
rustfs 1.0.1
build time : 2026-10-03 02:33:36 +00:00
build profile: release
build os : linux-x86_64
rust version : rustc 1.99.0 (b940084d7 2026-09-28)
rust channel : stable-x86_64-unknown-linux-gnu
git branch :
git commit : 6de965ae3c965a78ff819fbcd7acd4aa44177d92
git tag : 1.0.1
1.2 端口规划
| 端口 | 用途 |
|---|---|
| 9000 | S3 API(RUSTFS_ADDRESS 默认 :9000) |
| 9001 | 控制台 Web 界面(RUSTFS_CONSOLE_ADDRESS 默认 :9001) |
1.3 单节点两种形态
| 形态 | 数据盘 | 冗余能力 | 适合场景 |
|---|---|---|---|
| SNSD | 1 块 | 无冗余,依赖备份 | 开发测试、个人自托管 |
| SNMD | 2 块及以上 | 纠删码容忍盘级故障(4 盘可按 2+2 校验) | 单服务器小规模生产 |
二、下载与安装(在线方式)
RustFS 官方发布地址:https://github.com/rustfs/rustfs/releases ,1.0.1 的 Linux x86_64 直链为 https://github.com/rustfs/rustfs/releases/download/1.0.1/rustfs-linux-x86_64-musl-latest.zip(MUSL 静态链接,不依赖 glibc 版本,Ubuntu/CentOS 通用)。
2.1 Ubuntu 22.04 在线安装
# 1. 安装基础依赖(wget 下载、curl 测试、awscli 验证 S3)
apt-get update
apt-get install -y wget curl unzip awscli
# 2. 下载 1.0.1 官方发布包(MUSL 静态二进制约 267 MiB)
mkdir -p /opt/rustfs
wget https://github.com/rustfs/rustfs/releases/download/1.0.1/rustfs-linux-x86_64-musl-latest.zip -O /tmp/rustfs.zip
# 3. 解压并安装(压缩包内含 rustfs、rustfs-cli 两个可执行文件)
cd /tmp
unzip -o rustfs.zip -d /opt/rustfs
chmod +x /opt/rustfs/rustfs /opt/rustfs/rustfs-cli
ln -sf /opt/rustfs/rustfs /usr/local/bin/rustfs
ln -sf /opt/rustfs/rustfs-cli /usr/local/bin/rustfs-cli
# 4. 验证版本
rustfs --version
实测输出(版本信息同 1.1 节)。
2.2 CentOS 8 在线安装
# 1. 安装基础依赖
yum install -y wget curl unzip
# 2. 下载解压(MUSL 静态二进制不区分发行版,URL 与 Ubuntu 完全相同)
mkdir -p /opt/rustfs
wget https://github.com/rustfs/rustfs/releases/download/1.0.1/rustfs-linux-x86_64-musl-latest.zip -O /tmp/rustfs.zip
cd /tmp && unzip -o rustfs.zip -d /opt/rustfs
chmod +x /opt/rustfs/rustfs /opt/rustfs/rustfs-cli
ln -sf /opt/rustfs/rustfs /usr/local/bin/rustfs
ln -sf /opt/rustfs/rustfs-cli /usr/local/bin/rustfs-cli
# 3. 验证
rustfs --version
💡 RustFS 官方同时提供 GNU 构建(rustfs-linux-x86_64-gnu-latest.zip,约 332 MiB),但 GNU 构建要求 glibc ≥ 2.38,CentOS 8(glibc 2.28)与 Ubuntu 22.04(glibc 2.35)均无法运行。单节点部署一律使用 MUSL 静态构建。
2.3 离线 tar.gz 部署(内网服务器)
# 联网机器上执行:下载并解压,将整个 /opt/rustfs 打包
mkdir -p /opt/rustfs
wget https://github.com/rustfs/rustfs/releases/download/1.0.1/rustfs-linux-x86_64-musl-latest.zip -O /opt/rustfs/rustfs.zip
cd /opt/rustfs && unzip -o rustfs.zip
tar -czf rustfs-offline.tar.gz rustfs rustfs-cli
# 通过 U 盘 / 内网传输后,在内网服务器执行
mkdir -p /opt/rustfs
tar -xzf rustfs-offline.tar.gz -C /opt/rustfs
chmod +x /opt/rustfs/rustfs /opt/rustfs/rustfs-cli
ln -sf /opt/rustfs/rustfs /usr/local/bin/rustfs
ln -sf /opt/rustfs/rustfs-cli /usr/local/bin/rustfs-cli
rustfs --version
三、数据目录与存储规划
RustFS 单节点的数据目录由 rustfs server 的位置参数指定:传 1 个路径即 SNSD,传多个路径即 SNMD。
# SNSD:单个数据目录
mkdir -p /data/rustfs
# SNMD:多块数据盘挂载点(本例 4 块盘)
mkdir -p /data/rustfs1 /data/rustfs2 /data/rustfs3 /data/rustfs4
chmod -R 750 /data/rustfs*
💡 生产环境建议每个路径对应一块独立物理磁盘(官方推荐 XFS 文件系统)。多路径位于同一文件系统时,需设置环境变量
RUSTFS_UNSAFE_BYPASS_DISK_CHECK=true跳过物理磁盘独立性校验(仅测试环境使用)。
四、Ubuntu 22.04 单节点部署(SNSD + SNMD)
4.1 SNSD 命令行启动
nohup rustfs server /data/rustfs > /var/log/rustfs.log 2>&1 &
生产环境推荐以环境变量显式指定访问凭据:
cat > /etc/default/rustfs <<EOF
RUSTFS_ACCESS_KEY=admin
RUSTFS_SECRET_KEY=admin123456
RUSTFS_ADDRESS=:9000
RUSTFS_CONSOLE_ENABLE=true
RUSTFS_CONSOLE_ADDRESS=:9001
EOF
⚠️ 官方默认凭据
rustfsadmin已被禁止使用,必须显式设置RUSTFS_ACCESS_KEY/RUSTFS_SECRET_KEY。
验证健康状态:
curl -s http://127.0.0.1:9000/health
curl -s http://127.0.0.1:9000/minio/health/live
实测输出:
{"status":"ok","service":"rustfs-endpoint","timestamp":"2026-10-06T06:10:47.414462873Z[Etc/Unknown]","version":"1.0.1"}
4.2 SNMD 命令行启动
export $(grep -v '^#' /etc/default/rustfs | xargs)
RUSTFS_UNSAFE_BYPASS_DISK_CHECK=true nohup rustfs server \
/data/rustfs1 /data/rustfs2 /data/rustfs3 /data/rustfs4 \
> /var/log/rustfs.log 2>&1 &
启动后 4 盘以单纠删集(erasure set = 4)工作,对象的 4 个数据分片平均分布在各盘。实测各盘容量占用:
snmd1: 2780k
snmd2: 2780k
snmd3: 2780k
snmd4: 2780k
4.3 systemd 自启动
生产环境推荐使用 systemd 托管,单节点只需一个服务单元:
cat > /etc/systemd/system/rustfs.service <<EOF
[Unit]
Description=RustFS Object Storage Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
EnvironmentFile=/etc/default/rustfs
ExecStart=/usr/local/bin/rustfs server /data/rustfs1 /data/rustfs2 /data/rustfs3 /data/rustfs4
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
多盘路径对单盘 SNSD 场景只需把 ExecStart 改为
rustfs server /data/rustfs。磁盘数较多时可把环境变量RUSTFS_UNSAFE_BYPASS_DISK_CHECK=true写入 /etc/default/rustfs(仅测试环境)。
systemctl daemon-reload
systemctl enable --now rustfs.service
systemctl status rustfs.service --no-pager
实测输出:
● rustfs.service - RustFS Object Storage Server
Loaded: loaded (/etc/systemd/system/rustfs.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2026-10-06 06:10:42 UTC
Main PID: 6527 (rustfs)
4.4 验证 S3 读写(AWS CLI)
export AWS_ACCESS_KEY_ID=admin
export AWS_SECRET_ACCESS_KEY=admin123456
export AWS_DEFAULT_REGION=us-east-1
# 创建桶
aws --endpoint-url http://127.0.0.1:9000 s3api create-bucket --bucket test-bucket
# 上传
echo "RustFS S3 content" > /tmp/s3.txt
aws --endpoint-url http://127.0.0.1:9000 s3 cp /tmp/s3.txt s3://test-bucket/hello.txt
# 列桶
aws --endpoint-url http://127.0.0.1:9000 s3 ls s3://test-bucket/
# 下载
aws --endpoint-url http://127.0.0.1:9000 s3 cp s3://test-bucket/hello.txt /tmp/s3-get.txt
cat /tmp/s3-get.txt
实测输出:
upload: tmp/aws.txt to s3://aws-test/hello.txt
2026-10-06 06:15:18 5 hello.txt
download: s3://aws-test/hello.txt to tmp/aws-get.txt
RustFS S3 content
五、CentOS 8 单节点部署
CentOS 8 与 Ubuntu 的区别仅在于安装依赖命令(yum)与 systemd 单元书写习惯,部署步骤完全一致。
5.1 环境变量与 systemd 单元
cat > /etc/default/rustfs <<EOF
RUSTFS_ACCESS_KEY=admin
RUSTFS_SECRET_KEY=admin123456
RUSTFS_ADDRESS=:9000
RUSTFS_CONSOLE_ENABLE=true
RUSTFS_CONSOLE_ADDRESS=:9001
EOF
cat > /etc/systemd/system/rustfs.service <<EOF
[Unit]
Description=RustFS Object Storage Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
EnvironmentFile=/etc/default/rustfs
ExecStart=/usr/local/bin/rustfs server /data/rustfs
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now rustfs.service
systemctl status rustfs.service --no-pager
实测输出:
● rustfs.service - RustFS Object Storage Server
Loaded: loaded (/etc/systemd/system/rustfs.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-10-06 06:10:42 UTC
5.2 验证 S3 读写
export AWS_ACCESS_KEY_ID=admin AWS_SECRET_ACCESS_KEY=admin123456 AWS_DEFAULT_REGION=us-east-1
aws --endpoint-url http://127.0.0.1:9000 s3api create-bucket --bucket test-bucket
echo "CentOS RustFS" > /tmp/c.txt
aws --endpoint-url http://127.0.0.1:9000 s3 cp /tmp/c.txt s3://test-bucket/c.txt
aws --endpoint-url http://127.0.0.1:9000 s3 ls s3://test-bucket/
aws --endpoint-url http://127.0.0.1:9000 s3 cp s3://test-bucket/c.txt /tmp/c-get.txt
cat /tmp/c-get.txt
六、数据持久化验证(重启后数据仍在)
systemctl restart rustfs.service
sleep 5
# 重启后读取之前上传的对象
aws --endpoint-url http://127.0.0.1:9000 s3 cp s3://test-bucket/hello.txt /tmp/again.txt
cat /tmp/again.txt
# RustFS S3 content
数据目录实测内容(SNSD):
ls /data/rustfs/
# snsd-test .rustfs.sys
ls /data/rustfs/.rustfs.sys/
# buckets config datausage format.json multipart pool.bin pool.bin.identity scanner tmp unclean-shutdown
format.json:纠删集格式化元数据(含部署 ID、磁盘 UUID 集合);pool.bin:存储池元数据;buckets:桶元数据;datausage:用量统计;scanner:磁盘扫描/自愈状态。
七、常用管理命令速查
# 查看版本与构建信息
rustfs --version
rustfs info
# 查看 server 全部启动参数
rustfs server --help
# 离线诊断日志(不启动服务)
rustfs diagnose /var/log/rustfs.log
# 离线只读检查盘上数据
rustfs inspect /data/rustfs
# S3 健康检查
curl -s http://127.0.0.1:9000/health
curl -s http://127.0.0.1:9000/minio/health/live
curl -s http://127.0.0.1:9000/minio/health/cluster
八、常见问题
Q1:SNSD 与 SNMD 如何选择? SNSD 单盘无冗余,任何数据损坏都无法自愈;SNMD 至少 2 盘(推荐 4 盘),对象按纠删码分片存储,可容忍盘级故障。单节点无冗余需求选 SNSD,需要容灾选 SNMD。
Q2:报错 "pool topology mismatch" 是什么原因?
数据盘上已存在其他磁盘数/纠删集宽度的历史格式。例如先用 4 盘初始化过,之后只传 1 盘启动就会报错。恢复原始盘数,或用 rm -rf <盘>/数据目录/.rustfs.sys 清空历史格式后重启。
Q3:MUSL 与 GNU 构建有什么区别? MUSL 为纯静态链接,不依赖系统 glibc 版本,Ubuntu/CentOS 通用;GNU 构建要求 glibc ≥ 2.38,仅适合较新的发行版(如 Ubuntu 24.04)。单节点部署一律使用 MUSL。
Q4:多块盘挂载在同一个文件系统上能否部署 SNMD?
可以,但需设置 RUSTFS_UNSAFE_BYPASS_DISK_CHECK=true 跳过物理磁盘独立性校验。该变量仅用于测试环境,生产环境每路径应对应独立磁盘。
Q5:官方默认凭据被拒?
RustFS 已禁止默认凭据 rustfsadmin,必须通过环境变量显式设置 RUSTFS_ACCESS_KEY / RUSTFS_SECRET_KEY 后才能启动对外提供服务。