RustFS 单节点部署指南(Ubuntu 22.04 与 CentOS 8)

以 RustFS 1.0.1 官方静态二进制在 Ubuntu 22.04 与 CentOS 8 上完成从依赖安装、二进制下载、数据目录规划、命令行启动、systemd 自启动到 AWS CLI 验证 S3 读写的完整单节点部署,覆盖 SNSD(单盘)与 SNMD(多盘纠删码)两种形态,并给出在线与离线 tar.gz 两种部署方式

RustFSRustFS纠删码S3 兼容文件存储Ubuntu 22.04CentOS 8systemd 托管单机部署2026/10/06

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.12026-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 端口规划

端口用途
9000S3 API(RUSTFS_ADDRESS 默认 :9000)
9001控制台 Web 界面(RUSTFS_CONSOLE_ADDRESS 默认 :9001)

1.3 单节点两种形态

形态数据盘冗余能力适合场景
SNSD1 块无冗余,依赖备份开发测试、个人自托管
SNMD2 块及以上纠删码容忍盘级故障(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 后才能启动对外提供服务。