Blog

TrueNAS SCALE 安装与存储池规划实践

买齐四块 4TB 盘之后,我花了比装系统更长的时间想存储池。ZFS 一旦把 vdev 结构定死,想改通常意味着搬家。装 SCALE 点下一步之前,先把「丢一块盘我能接受什么」写成算式,而不是感觉。

系统盘和数据池:先拆开再谈布局

CORE 基于 FreeBSD,插件生态老;SCALE 基于 Debian,容器和 K3s 更顺手。我选 SCALE,因为家里已经有 Docker 习惯,不想再学一套 jail。这台主要当存储,应用另放 Proxmox/小主机,边界清楚后吵得少很多。

系统盘单独一块小 SSD,数据池全是那四块 4TB。别把系统和媒体库糊在同一池里——系统重装不该威胁到照片。池名叫 tank,后面所有算术都围绕它。

标称 4TB 的盘,十进制和二进制会差一截。按销售口径 4×4=16TB 总原始;按 GiB 常见可用大约每盘 3.64TiB 量级。下面用「TB 粗算」方便对齐电商小票,真正建池后以 zpool list 为准。

三种组法:容量、容错、扩容路径一起算

方案 A:两对 mirror 再 stripe(RAID10 形态)

  • 容错:每个 mirror 里坏 1 块仍可读;两块同处一对 mirror 才致命
  • 粗算可用:约 8TB(一半做镜像)
  • 重建:只读一对里的幸存盘,resilver 时间相对短,对盘压力面小
  • 扩容:以后再买两块,加一对 mirror 进池,路径我能讲清楚

方案 B:RAIDZ1(类似 RAID5)

  • 容错:整池只能扛 1 块故障
  • 粗算可用:约 12TB(三份数据 + 一份校验的直觉)
  • 重建:几乎要读完全池幸存数据,时间长;重建窗口里再坏一块就可能全灭
  • 同购同批次盘,统计上「第二块在 resilver 期挂掉」不是都市传说

方案 C:RAIDZ2

  • 容错:扛 2 块
  • 粗算可用:约 8TB,和方案 A 接近
  • 扩容语义与 mirror stripe 不同:RAIDZ vdev 宽度定了不好「顺手加一块」
  • 四盘 RAIDZ2 牺牲的是灵活,换的是双盘容错

我最终选方案 A。理由很土:照片和文档比「多出 4TB」珍贵;resilver 心理压力小;以后加盘可以再加一对 mirror,扩容路径写进笔记就能执行。容量优先的人选 B 也可以,但要接受重建窗口的心理账,以及最好备一块热备或同型号冷备。

选之前我拿表格算了三遍,还模拟了「明年再买两块」的预算。数字摆开以后,争论会少很多:不是谁嗓门大,是谁把可用容量和丢盘场景写全了。

算术对照表我贴在机箱内侧:

布局 粗算可用 可同时丢盘 扩容直觉
2×mirror stripe ~8TB 每 mirror 1 块 再加 mirror 对
RAIDZ1 ~12TB 1 块 整 vdev 难瘦身改
RAIDZ2 ~8TB 2 块 同左,双校验更安心

丢盘概率不是零:我怎么给自己定 SLA

家庭盘没有企业阵列的巡检团队。我给自己的目标是:

  • 单盘故障:业务只读或短暂降速,不丢数据
  • 双盘同 mirror 故障:可接受「从异地备份恢复」,不可接受「只有这一份」
  • 误删文件:靠快照小时级找回,不靠每周全盘拷贝碰运气

所以快照和异地备份是算术的另一半。本地冗余解决硬件;快照解决手滑;异地解决火灾和勒索。三缺一都叫侥幸。

有人觉得家庭盘谈不上服务等级。我还是写了:不是给老板看,是给未来慌张的自己看。慌的时候数字比口号管用。

Dataset 按「丢了有多痛」拆,不按心情拆

池建好后,我拆了这些 dataset:

  • tank/media:电影剧集,压缩 off 或 lz4,快照稀疏
  • tank/photos:Immich 原图,快照密
  • tank/backup:其它机器的备份落地
  • tank/apps:若非要在 SCALE 上跑应用数据

权限和配额按 dataset 分,比在一个目录里用 Linux ACL 糊弄清晰。NFS/SMB 也按 dataset 导出,避免「一个 share 打天下」导致配额和快照粒度失控。

快照策略示例(仍是算术:保留份数 × 变化量 ≈ 快照占用):

  • photos:每小时保留 24;每天保留 14;每月保留 6
  • media:每天保留 7 即可

Scrub 每月一次,错开全盘备份窗口。邮件或 Telegram 接上:磁盘错误、池 degraded、scrub 发现 checksum,这三类必须响。快照不是备份——房子着火救不了,异地还有 restic/云一份才算闭环。

迁入与换盘:把未知变成演练过的数字

旧 NAS 是单盘 ext4,我用 rsync -aHAX --info=progress2 迁到新 dataset。迁完随机抽文件对 hash。大库第一次 scrub 会久,别在同一天又跑全盘备份把总线打满。

TrueNAS 换盘流程自己走一遍(空盘或虚拟环境练):离线 → 替换 → resilver → 确认状态。记下 resilver 大致耗时,作为「坏盘当周我要留多少空闲时间」的预算。没演练过的「我知道怎么点」等于没准备。

SCALE 能装应用,但我把重应用放在别的机器,SCALE 专心提供 NFS/SMB/快照。存储节点越胖,升级和重启越可怕。专一的存储池比 All-in-One 神机更让我睡得着。

池结构写进笔记:盘序列号、vdev 布局、scrub 日、快照策略、粗算可用与真实 zpool list 对照。比任何「企业级」形容词都有用。

我还在笔记里写了「下一对 mirror 的采购触发条件」:photos 数据集用到 70% 或预计半年内装 Immich 原图翻倍。先算再买,比看着红灯打折冲动下单冷静。四块盘的钱已经花了,真正决定能不能睡觉的,是你愿不愿意先做完这几道算术题。

← Back to Blog