ZFS、Btrfs、ext4:家庭 NAS 到底该选哪个

NAS · 6 分钟阅读· 7 次阅读

每次有人问「家庭 NAS 用什么文件系统」,答案永远是「ZFS 天下第一」或者「Btrfs 会炸」。

我用过三种,各跑过一年以上。这篇讲清楚在家庭场景下(4~8 块盘、单机、没有专业运维)它们到底差在哪。

先说结论

  • 要数据安全和快照,且机器内存 ≥ 16G:ZFS
  • 要在 Linux 上做灵活的快照和子卷,且能接受偶尔的坑:Btrfs
  • 要简单、要能随便拔盘到别的机器上读:ext4 + 上层方案(SnapRAID / mergerfs)

我自己最后用的是 ext4 + SnapRAID。原因不是它最好,是它最不容易让我在凌晨三点面对一个我不理解的错误。

下面是具体的对比。

一、内存

ZFS 用 ARC 做缓存,官方建议每 1T 存储配 1G 内存,最低 8G。实际使用中,ZFS 会把空闲内存都吃掉做缓存(这是设计如此,不是泄漏),在 8G 的机器上跑 4 块 4T 盘,会明显感到其他服务被挤压。

Btrfs 和 ext4 的页缓存由内核统一管理,压力小得多。ext4 在 4G 内存的机器上跑 16T 存储没有任何问题。

家庭 NAS 很多是低功耗小主机(N100 + 16G 算高配),这一条就能筛掉一半人。

二、快照

ZFS 的快照是它的核心优势:

sudo zfs snapshot tank/data@2026-03-22
sudo zfs list -t snapshot

秒级、几乎不占空间(只存变化块)、可以 zfs send | zfs recv 增量复制到另一台机器。这是目前最好的快照实现。

Btrfs 也支持快照,语法类似:

sudo btrfs subvolume snapshot /mnt/data /mnt/snapshots/data-2026-03-22

但 Btrfs 的快照是子卷级的,需要提前规划子卷结构。而且 Btrfs 的 send/receive 在跨版本时偶尔会失败。

ext4 没有原生快照。想要快照就得靠 LVM(lvcreate -s),而 LVM 快照在写满时会失效,且性能下降明显。

如果你需要「每小时自动快照,误删了能回滚」,ZFS 是唯一省心的选择。

三、扩容

这是 Btrfs 唯一的压倒性优势:

# Btrfs:加一块盘,一条命令
sudo btrfs device add /dev/sde /mnt/data
sudo btrfs balance start -dusage=50 /mnt/data

ZFS 传统上要加 vdev(一组盘),不能单盘扩容到已有 vdev。虽然 OpenZFS 2.0+ 支持了 zpool attach 镜像扩容,但不能给 raidz 加单盘。

ext4 更不能跨盘扩容,只能靠 mergerfs 做合并视图。

家庭场景里,「我先买两块盘,以后慢慢加」是非常常见的需求。 这一条上 Btrfs 最灵活,ZFS 最僵。

四、出问题之后

这才是真正决定我选择的部分。

ZFS:池子出问题时,zpool status 会给出明确的状态和修复建议,工具链成熟。但如果是元数据损坏(比如掉电导致 uberblock 问题),恢复需要专业知识和运气。社区里 zpool import -F 的讨论能看几天。

Btrfs:btrfs check --repair 被官方明确标注为「危险,可能导致更多损坏」。我遇到过一次掉电后无法挂载,最后靠 btrfs rescue 救回来,但丢了最近的文件。RAID5/6 模式的 Btrfs 有著名的 write hole 问题,官方文档自己都不推荐用于 RAID5/6。

ext4:e2fsck 是二十多年打磨出来的工具,掉电、坏块、元数据错误,基本都能修。最重要的一点:ext4 的盘可以直接拔下来插到任何 Linux 机器上挂载读取,不需要导入池、不需要版本匹配。

对于家庭用户,最后这一点价值巨大。我有一块盘在主机故障时,直接插到笔记本上把数据读出来了,全程 30 秒。

五、校验和

ZFS 和 Btrfs 都做数据校验(checksum),能发现静默损坏(bit rot)。ext4 不做。

这意味着 ext4 上一个文件可能在某天悄悄坏掉,而你不知道。

我的解决方案是 SnapRAID,它会给所有文件算 hash 并存在校验盘里,snapraid scrub 可以定期扫描并发现不一致。虽然不是实时校验,但每周扫一次足以发现静默损坏。

六、性能

在 1G 网络下,三者差别不大,瓶颈在网络。

放大到 2.5G/10G 才有区别:ZFS 的 ARC 命中时非常快,Btrfs 的 CoW 在大量小文件写入时会碎片化,ext4 最稳定但没有缓存优化。

家用场景这个维度基本可以忽略。

我的最终方案

ext4(每块盘独立,无 RAID)
  + mergerfs(合并成大目录)
  + SnapRAID(周校验,容单盘故障)
  + 冷备盘(每月离线备份)
  + 云备份(重要数据)

选它的理由:

  1. 任何一块盘坏了,剩下的盘可以随时挂到别的机器读
  2. 掉电能 fsck 修,不需要专业知识
  3. 内存占用低,N100 + 16G 跑得很轻松
  4. 扩容就是加一块盘,snapraid sync 一下

代价是:

  1. 没有实时冗余(盘坏了要重建才能访问那块盘的数据)
  2. 没有快照(靠文件级备份弥补)
  3. 需要自己写几个脚本把 sync / scrub / 备份串起来

一句话建议

如果你愿意花时间学和调,ZFS 是更好的工程方案;如果你想要一个「坏了能自己修、看不懂就拔盘」的系统,ext4 + SnapRAID 更合适。

别选 Btrfs 的 RAID5/6,这一条几乎没有争议。

评论 (0)

还没有评论,来说两句吧~

发表评论

验证码

提交后需站长审核,通过后才会显示。