本页目录 11 个章节
MinIO 的开源服务器已不再维护:GitHub 上的 minio/minio 仓库已于 2026 年 4 月 25 日归档,现为只读状态。切实可行的替代方案有:Silo,基于同一份代码的社区分支(AGPL-3.0);SeaweedFS 和 RustFS(Apache-2.0,支持纠删码);Garage(AGPL-3.0,副本分布在多个站点);以及适用于多服务器集群的 Ceph RGW。
简要结论
| 方案 | 许可证 | 数据保护方式 | 合理的最小部署规模 | 2026 年 10 月的状态 |
|---|---|---|---|---|
| Silo(MinIO 分支) | AGPL-3.0 | 纠删码,沿用 MinIO 的磁盘格式 | 一台多硬盘服务器 | 2025 年 10 月分叉;最新版本发布于 2026 年 9 月 16 日 |
| AIStor Free(MinIO) | 免费;许可证限制再分发和转售 | 纠删码 | 仅限单节点 | MinIO 当前的产品线 |
| Garage | AGPL-3.0 | 在不同节点上保存完整副本;不支持纠删码 | 三个节点,最好分布在三个区域 | v2.4.1,2026 年 9 月 8 日 |
| SeaweedFS | Apache-2.0 | 多副本卷;温数据采用 10+4 纠删码 | 一台服务器;若要承受服务器故障则需四台 | 4.48,2026 年 9 月 28 日 |
| RustFS | Apache-2.0 | 采用 MinIO 式纠删集的纠删码 | 一台多硬盘服务器;生产环境需四个或更多节点 | 2026 年 9 月 16 日发布 1.0.0,10 月 3 日发布 1.0.1 |
| Ceph RGW | LGPL-2.1 或 LGPL-3 | 跨主机的多副本池或纠删码池 | 纠删码需要 k+m 台主机:默认的 2+2 需要四台 | Tentacle(20.2),2025 年 11 月 18 日首次发布 |
简而言之:想在 MinIO 基础上改动最小,选 Silo;想在宽松许可证下于单台服务器上使用纠删码,选 SeaweedFS 或 RustFS;在多个城市部署小型服务器,选 Garage(不支持版本控制);拥有大量服务器并有团队负责运维,选 Ceph。
MinIO 还在维护吗?
开源版本已不再维护。MinIO, Inc. 现在销售的是 AIStor,仓库的 README 历史记录和发行说明显示,AGPL 版服务器是分步骤逐渐停止维护的:
- 2025 年 5 月 24 日。一个“破坏性版本”(Breaking Release)弃用了内嵌的 Web 控制台,并移除了 LDAP 和 OIDC 登录,MinIO 称这些功能“现已作为 AiStor 产品的一部分提供”。Blocks & Files 在 6 月报道称,社区版控制台已失去管理功能,只剩下一个基础的对象浏览器。
- 2025 年 10 月 15 日。改为仅分发源代码:“我们将不再为社区版提供预编译的二进制版本。”最后一个社区版本于 10 月 16 日发布,修复了一个权限提升漏洞。
- 2025 年 12 月 3 日。进入“维护模式”:不再开发新功能,也不再接受拉取请求,关键安全修复将“逐案评估”。
- 2025 年 12 月 23 日。MinIO 宣布推出三个 AIStor 版本:Free(单节点)、Enterprise Lite(多节点,400 TiB 以下)和 Enterprise。
- 2026 年 2 月 12 日。声明改为“THIS REPOSITORY IS NO LONGER MAINTAINED”(本仓库已不再维护),并引导用户转向 AIStor Free 和 AIStor Enterprise。
- 2026 年 4 月 25 日。GitHub 显示该仓库“已由所有者于 2026 年 4 月 25 日归档,现为只读状态。”
现有部署仍可继续运行,代码也仍以 AGPL 许可证提供,但自 2025 年 10 月以来再没有发布过社区版本,而且已归档的仓库不会再得到任何修复。凡是可从互联网访问的实例,都应迁移到仍在维护的构建版本或其他服务器软件。
对于单台机器,MinIO 自己给出的方案是 AIStor Free:一种“功能完整的单节点部署架构”,支持纠删码,没有人为的容量限制,仅提供社区支持。它不收费,但并非 AGPL 代码:其许可证“限制对 AIStor 软件的任何再分发或转售”,而运行多个节点则需要付费版本。
Silo:MinIO 的社区分支
Pigsty 将 MinIO 用作其 PostgreSQL 备份仓库,它于 2025 年 10 月 25 日将该服务器分叉为 pgsty/minio,又于 2026 年 8 月 6 日更名为 pgsty/silo。Pigsty 称 Silo 是“一个独立的、由社区维护的分支”,与 MinIO, Inc. 没有关联。它提供了上游已停止提供的内容:适用于 Linux、macOS 和 Windows 的二进制文件、多架构容器镜像、RPM、DEB 和 APK 软件包、附带公开安全公告的安全修复,以及完整的 Web 控制台。它保留了 S3 API 和存储格式,包括 MINIO_* 变量和 .minio.sys 数据,其迁移指南还介绍了如何接管现有的 minio.service。
其兼容性审查列出了各项差异。可执行文件现在是 silo;十二个存储桶级操作(其中包括策略、版本控制、Object Lock 和生命周期的写入操作)不再匹配 bucket/* 这类仅针对对象的资源;使用共享密钥签名的 OIDC 令牌会被拒绝;原地自更新也已禁用。Silo 诞生还不到一年,且由单一组织运营:请锁定版本,并保留回滚途径。
Garage、SeaweedFS、RustFS 与 Ceph RGW 对比
Garage
Garage 是“一个实现了 Amazon S3 对象存储协议的轻量级地理分布式数据存储”。它保存完整副本;纠删码明确不在其目标之列。replication_factor 不能超过节点数:设为 1 时,“没有冗余”,文档只建议在测试中使用;设为 3 时,每个对象存放在三个节点上(尽可能位于不同区域),可承受其中两个节点丢失。
这种简洁的代价是 S3 功能的覆盖面:不支持版本控制和 Object Lock,也不支持存储桶策略或 ACL,Garage 以按密钥、按存储桶分配的权限取而代之。生命周期规则只能处理过期和未完成的分段上传。如果您的备份工具依赖版本控制或不可变性,请另寻他选。
SeaweedFS
SeaweedFS 由 master、卷服务器(volume server)、filer 和 S3 网关组成。复制策略按卷设置,用一个三位数代码指定在其他数据中心、机架和服务器上额外保存的副本数;000 表示只保留一份副本。纠删码使用 10 个数据分片和 4 个校验分片:占用空间为数据大小的 1.4 倍,可承受任意 4 个分片丢失;自定义比例仅限企业版。纠删码适用于温数据:写入先落在普通卷中,默认开启的后台任务会在卷达到 80% 容量且五分钟内没有写入后对其进行编码。服务器少于四台时,纠删码可防范硬盘故障;四台或更多时,可防范服务器故障。
S3 网关支持版本控制、Object Lock、存储桶策略、生命周期过期(不含存储类别转换)、SSE-S3、SSE-KMS、SSE-C、IAM 和 STS,但不支持存储桶复制、网站配置或通知配置。SeaweedFS 自 2014 年起一直以开源方式开发。
RustFS
RustFS 在设计上最接近 MinIO:它是用 Rust 编写的服务器,按照 MinIO 的拓扑规则将硬盘组织成纠删集和存储池,带有 Web 控制台,采用 Apache-2.0 而非 AGPL 许可证。其功能表列出的可用功能包括版本控制、Object Lock、服务端加密、生命周期管理、存储桶复制与站点复制、IAM 和 OIDC。其文档介绍了三种模式:单节点单盘(“依赖备份”)、单节点多盘(最多可承受 M 块校验盘失效),以及面向生产工作负载的四个或更多节点。
在任何 RustFS 与 MinIO 的对比中,真正的问题都是成熟度。RustFS 在经历 beta 和候选发布版之后,于 2026 年 9 月 16 日发布 1.0.0,又于 10 月 3 日发布 1.0.1。读取 MinIO 磁盘格式的功能仍处于预览阶段,需要启用一个默认关闭的构建特性,而且 MinIO 加密过的对象无法读取,因此离开 MinIO 就意味着要通过 S3 API 复制数据。对于如此年轻的版本,在让它保存任何数据的唯一副本之前,请先用您自己的工作负载进行测试。
Ceph RGW
Ceph 的对象网关(RGW)为 Ceph 集群增加 S3 API,该集群还可以提供块存储和文件存储;代码采用 LGPL-2.1 或 LGPL-3 许可证。对象存放在多副本池或纠删码池中,默认故障域为主机。默认纠删码配置为 2+2,大多数纠删码池至少需要 k+m 台主机或 k+m 个机架。cephadm 的 --single-host-defaults 可以构建单机集群,在不同磁盘上保存两个副本,但文档称这类集群“通常不适合生产环境”。RGW 对 S3 的支持非常全面,包括 Object Lock,不过存储桶复制只能跨区域(zone)进行。
S3 功能对比
| 对比项 | Silo | Garage | SeaweedFS | RustFS | Ceph RGW |
|---|---|---|---|---|---|
| 版本控制 | 是 | 否 | 是 | 是 | 是 |
| Object Lock | 是 | 否 | 是 | 是 | 是 |
| 存储桶策略 | 支持,匹配规则更严格 | 不支持:按密钥授权 | 是 | 是 | 是 |
| 生命周期规则 | 是 | 仅支持过期 | 支持,不含存储类别转换 | 支持,包括分层到远程 S3 | 是 |
| 存储桶复制 | 是 | 否 | 不能通过 S3 API 实现 | 支持,另有站点复制 | 仅限跨区域 |
单台服务器上的多副本、纠删码与 RAID
三种方式都要拿出一部分原始容量用于冗余,只是比例不同:
- 多副本保存完整副本:双副本时,每 TB 可用容量需要 2 TB 原始磁盘空间;三副本时需要 3 TB。
- 纠删码将每个对象拆分为 k 个数据分片和 m 个校验分片,可承受任意 m 个分片丢失:每 TB 可用容量需要 (k+m)/k TB 原始磁盘空间,因此 8+4 为 1.5,10+4 为 1.4。
- RAID 6 或 ZFS RAIDZ2在每组硬盘中保留两个校验块,每组可承受两块硬盘失效:n 块硬盘一组时为 n/(n−2),因此六块硬盘为 1.5,十二块为 1.2。
在单台机器上,副本和分片必须落在不同的硬盘上。Silo、AIStor Free 和 RustFS 从第一次写入起,就将每个对象条带化分布到一个纠删集中的各块硬盘上:含 4 个校验分片的 12 盘纠删集,即使任意 4 块硬盘失效也不会丢失数据。SeaweedFS 对写满的卷进行纠删编码,但最近写入的数据仍停留在普通卷中,只受其复制设置保护。Garage 按节点计算副本,因此单节点 Garage 只保存一份副本:请将其数据放在 RAIDZ2 或 RAID 6 上,或者增加节点。Ceph 需要上文所述的单主机默认设置。若整台服务器失效,以上方案都无法幸免。
88 TB、264 TB 和 528 TB 服务器的可用容量
我们的三款存储服务器均使用 22 TB 机械硬盘,分别为四块、十二块或二十四块,此外每台还配有两块 NVMe 硬盘,用于系统和元数据:
| 布局 | 每 TB 可用容量所需原始 TB | 88 TB(4 块硬盘) | 264 TB(12 块硬盘) | 528 TB(24 块硬盘) | 可承受的硬盘故障数 |
|---|---|---|---|---|---|
| 三副本 | 3.0 | 29.3 TB | 88 TB | 176 TB | 任意 2 块 |
| 双副本(镜像) | 2.0 | 44 TB | 132 TB | 264 TB | 每对 1 块 |
| 纠删码:4 块硬盘用 2+2,12 或 24 块硬盘用 8+4 纠删集 | 2.0 或 1.5 | 44 TB | 176 TB | 352 TB | 2 块,或每个纠删集 4 块 |
| 纠删码 10+4(SeaweedFS) | 1.4 | 62.9 TB(见注) | 188.6 TB | 377.1 TB | 14 个分片中的任意 4 个 |
| RAIDZ2 或 RAID 6,分别以 4、6 和 8 块硬盘为一组 | 2.0、1.5 或 1.33 | 44 TB | 176 TB | 396 TB | 每组 2 块 |
| RAIDZ2 或 RAID 6,以 12 块硬盘为一组 | 1.2 | — | 220 TB | 440 TB | 每组 2 块 |
按十进制 TB 计算,未扣除文件系统开销;Linux 会将 22 TB 硬盘显示为约 20 TiB。注:在四块硬盘上,SeaweedFS 的 14 个分片会在每块硬盘上放置三到四个,因此第二块硬盘失效就会丢失数据。
每 TB 可用容量的成本 = 月价格 ÷ 可用容量。以每月 $469 的 264 TB 服务器为例,三副本(88 TB)下每 TB 可用容量的成本是 12 盘 RAIDZ2(220 TB)的 2.5 倍,而 8+4 纠删码比双副本便宜 25%。硬盘数量与原始容量同样重要:在可容忍两块硬盘故障的前提下,四块硬盘只有一半容量可用,十二块或更多则有三分之二或更多可用。重建也很关键:假设以 200 MB/s 的速度重新写满一块 22 TB 硬盘,约需 30 小时,因此对于这种容量的硬盘,我们不会采用低于双盘容错的配置。
自建存储与 S3、R2、B2 对比
截至 2026 年 10 月的公开标价,不含税:
| 服务 | 存储 | 互联网出站流量 | 请求费用 |
|---|---|---|---|
| AWS S3 Standard,美国东部(弗吉尼亚北部) | 前 50 TB 每 GB 每月 $0.023,其后 450 TB 为 $0.022,超出部分为 $0.021 | 超出免费额度后,前 10 TB 每 GB $0.09,之后按阶梯依次为 $0.085、$0.07 和 $0.05 | PUT、COPY、POST 或 LIST 请求每 1,000 次 $0.005;GET 请求每 10,000 次 $0.004 |
| Cloudflare R2 Standard | 每 GB 每月 $0.015 | 免费 | A 类操作每百万次 $4.50,B 类操作每百万次 $0.36 |
| Backblaze B2 | 每 TB 每月 $6.95 | 不超过平均存储量三倍的部分免费,超出后每 GB $0.01 | A、B、C 类免费;D 类每 10,000 次 $0.004 |
| PowerDedi 264 TB 服务器 | 每月 $469,可用容量 176–220 TB | 已包含(10 Gbps 不限流量端口) | 无 |
以 264 TB 服务器采用 8+4 纠删码时的可用空间为例:每月存储 176 TB、对外传输 50 TB,按 1 TB = 1,000 GB 计算:
- AWS S3:存储约 $3,920,数据传输约 $4,300,因此不计请求费用时每月约 $8,200。
- Cloudflare R2:每月约 $2,640,另加操作费用,无出站流量费。
- Backblaze B2:每月约 $1,220;50 TB 出站流量在免费额度之内。
- 一台 264 TB 服务器:每月 $469,无论流量多少。
这并非同等条件下的比较:AWS 称 S3“默认将数据冗余存储在至少 3 个可用区中”,而一台服务器只是一栋建筑里的一台机器。对于不能丢失的数据,应与位于两座城市的两台服务器相比较;按上述数字,这样的费用仍低于 B2。如果只有几 TB 数据、流量也很少,B2 或 R2 比任何独立存储服务器都便宜。我们的带宽计费指南说明了出站流量费用如何随用量增长。
使用 rclone 从 MinIO 迁移
如果继续沿用 MinIO 的格式,Silo 可以按照其迁移指南原地接管现有数据。若要迁移到其他服务器软件,请使用 rclone 通过 S3 API 复制对象。
1. 注意哪些内容不会被复制。用户、访问密钥、存储桶策略、生命周期规则和复制设置都必须在新服务器上重新创建。在启用了版本控制的存储桶中,rclone 只复制每个对象的当前版本;旧版本只有在使用 --s3-versions 时才会以重命名文件的形式出现。如果目标端支持,Object Lock 的保留设置可以通过 --metadata 和值 copy 一并迁移。
2. 定义两个端点,写在 ~/.config/rclone/rclone.conf 中。源端沿用 rclone 的 MinIO 示例;这里的目标端是 Garage,它需要 provider = Other、路径式(path-style)请求和其自己的区域名称。SeaweedFS 请使用 provider = SeaweedFS,Ceph 请使用 provider = Ceph 并将区域留空。
[old]
type = s3
provider = Minio
env_auth = false
access_key_id = OLD_ACCESS_KEY
secret_access_key = OLD_SECRET_KEY
region = us-east-1
endpoint = http://minio.example.net:9000
[new]
type = s3
provider = Other
env_auth = false
access_key_id = NEW_ACCESS_KEY
secret_access_key = NEW_SECRET_KEY
region = garage
endpoint = http://storage.example.net:3900
force_path_style = true
3. 预览、复制并校验,每次处理一个存储桶。两端均为 S3 时,rclone 文档建议使用 --checksum。
# buckets on each side
rclone lsd old:
rclone lsd new:
# preview, then copy one bucket
rclone sync old:backups new:backups --checksum --fast-list --transfers 32 --checkers 64 -P --dry-run
rclone sync old:backups new:backups --checksum --fast-list --transfers 32 --checkers 64 -P
# compare sizes and hashes on both sides
rclone check old:backups new:backups
4. 调优并切换。rclone 的默认设置较为保守,因此可调高 --transfers 和 --checkers 并多做尝试;--fast-list 每百万个对象约占用 1 GiB 内存。反复执行同步,直到剩余差异很少,然后停止写入,再同步最后一次,并切换端点。sync 会删除目标端中源端已不存在的对象,因此请再三核对存储桶名称。
5. 预留足够时间。在两台不同的服务器之间迁移时,每个对象都要由运行 rclone 的机器下载后再重新上传。按 1 Gbps 的有效速率,100 TB 约需九天;按 5 Gbps,则不到两天。决定速度的通常是旧服务器的硬盘或上行链路,而不是 10 Gbps 的目标端口。
单台存储服务器做不到的事
- 一台服务器就是一个故障域。纠删码和 RAID 能承受硬盘故障,却无法承受主板、电源或整栋建筑的故障,也防不了管理员的误操作。RustFS 的文档对单节点部署说得很直白:“如果整台服务器发生故障,或超过 M 块磁盘损坏,数据将会丢失。”
- 冗余不等于备份。被删除的存储桶会同时从所有硬盘上消失。版本控制和 Object Lock 能起到一定作用;但真正让误操作得以挽回的,是保存在别处的独立副本。
- 关键数据需要第二个站点。可以在另一座城市部署第二台存储服务器(例如一台在阿姆斯特丹,另一台在法兰克福),通过定时执行的
rclone copy(它从不删除数据)或存储桶复制写入数据。也可以在阿姆斯特丹、法兰克福和苏黎世各部署一台 88 TB 服务器,组成采用replication_factor = 3的 Garage 集群:每座城市一份副本,可用容量约 88 TB。
自建 S3 存储选哪款服务器
88 TB 存储服务器每月 $149,在阿姆斯特丹、法兰克福、苏黎世和纽约约 15 分钟即可交付。它适合用作 Garage 节点或备份目标,在可容忍两块硬盘故障的前提下有 44 TB 可用容量。264 TB 服务器每月 $469,在阿姆斯特丹、法兰克福和纽约 24 小时内组装完成,硬盘数量足以在单台机器上运行 8+4 纠删码或 12 盘 RAIDZ2。528 TB 服务器每月 $999,在阿姆斯特丹和法兰克福 72 小时内组装完成,另配 24 核 EPYC 和 256 GB ECC 内存,可支持更大的纠删集。
三款服务器均配备 ECC 内存、两块 NVMe 硬盘、IPMI 访问和 10 Gbps 不限流量端口,因此恢复 100 TB 数据的费用与空闲月份相同。ZFS 或 mdadm 布局请参阅我们的软件 RAID 指南;备份方案设计请参阅存储与备份服务器。如果您只有几 TB 数据(此时 B2 或 R2 更便宜),或者希望无需自行运维就获得跨多个机房的数据持久性,我们并不是合适的选择:那是托管对象存储服务的职责。
参考资料
- minio/minio、其 README 历史记录和 Releases · minio/minio — GitHub 上的 MinIO
- MinIO AIStor 推出新订阅版本:Free、Enterprise Lite 和 Enterprise — MinIO,2025 年 12 月 23 日
- 社区版移除管理界面后,MinIO 用户纷纷抱怨 — Blocks & Files,2025 年 6 月 19 日
- pgsty/silo 和 Silo 与 MinIO Server 兼容性对比 — PGSTY
- 配置文件格式、S3 兼容性状态和目标与用例 — Garage 文档;Deuxfleurs/garage — Forge Deuxfleurs
- 温存储的纠删码、复制和 Amazon S3 API — SeaweedFS wiki;seaweedfs/seaweedfs — GitHub
- rustfs/rustfs — GitHub;安装 — RustFS 文档
- 纠删码、使用 Cephadm 部署新的 Ceph 集群、Ceph 对象网关 S3 API、存储桶操作和 Ceph 版本(索引) — Ceph 文档;COPYING — GitHub 上的 ceph/ceph
- Amazon S3 和 rclone sync — rclone 文档
- AWS 价格表:Amazon S3,美国东部(弗吉尼亚北部),发布于 2026 年 10 月 14 日;AWS 价格表:数据传输,美国东部(弗吉尼亚北部),发布于 2026 年 9 月 16 日;对象存储类别 — Amazon Web Services
- 定价 — Cloudflare R2 文档,最后更新于 2026 年 10 月 1 日
- B2 云存储定价 — Backblaze,查询于 2026 年 10 月




