ZFS、Btrfs、ext4:家庭 NAS 到底该选哪个
每次有人问「家庭 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(周校验,容单盘故障)
+ 冷备盘(每月离线备份)
+ 云备份(重要数据)
选它的理由:
- 任何一块盘坏了,剩下的盘可以随时挂到别的机器读
- 掉电能
fsck修,不需要专业知识 - 内存占用低,N100 + 16G 跑得很轻松
- 扩容就是加一块盘,
snapraid sync一下
代价是:
- 没有实时冗余(盘坏了要重建才能访问那块盘的数据)
- 没有快照(靠文件级备份弥补)
- 需要自己写几个脚本把 sync / scrub / 备份串起来
一句话建议
如果你愿意花时间学和调,ZFS 是更好的工程方案;如果你想要一个「坏了能自己修、看不懂就拔盘」的系统,ext4 + SnapRAID 更合适。
别选 Btrfs 的 RAID5/6,这一条几乎没有争议。
评论 (0)
还没有评论,来说两句吧~
发表评论