自建 NAS 三年,我的存储方案和三次数据惊魂

NAS · 5 分钟阅读· 23 次阅读

三年前开始自建 NAS,最初只是想给照片找个地方放。现在这套系统存着 14T 数据,跑着 9 个容器。

三次惊魂之后,我的方案改了很多。写下来。

当前的结构

主机:N100 小主机 + 4 盘位 USB 硬盘柜
系统盘:256G NVMe(Debian 12)
数据盘:4 × 4T(西数红盘 Plus,CMR)
文件系统:mergerfs + SnapRAID(不是 RAID)

为什么不用 RAID5/RAID6:

  • RAID5 重建时如果第二块盘坏了,全毁
  • 4T 盘重建要 10 小时以上,这段时间压力极大
  • RAID 不是备份,它只防盘坏,不防误删、不防勒索、不防火灾

SnapRAID 是快照式校验,允许一块盘坏掉后重建,但不提供实时冗余——数据盘坏了,坏掉那块盘上的数据在重建前是不可用的。这个取舍我接受,因为我更怕误删。

目录结构

/mnt/disk1..4   物理盘(ext4)
/mnt/pool       合并视图(mergerfs)
  ├─ media      影音(4 盘均衡)
  ├─ photo      照片(只放 disk1)
  ├─ backup     其他机器的备份
  └─ docs       文档(双份,disk1 + disk3)

mergerfs 的配置:

/mnt/disk* /mnt/pool fuse.mergerfs defaults,allow_other,use_ino,cat_create=ff,moveonenospc=true,minfreespace=20G,fsname=mergerfs 0 0

moveonenospc=true 很关键——某块盘满了,新文件会自动写到别的盘,而不是报错。

第一次惊魂:以为有备份

2024 年 3 月,我误删了 /mnt/pool/photo/2023 整个目录。rm -rf 手滑,路径少打了一级。

第一反应是「没事,我有备份」。然后发现:

  • 我的「备份」是 rsync 到另一块盘,但那条 cron 两个月前就失败了,因为目标盘满了
  • 我没有检查过 rsync 的结果,/var/log 里的报错滚动掉了

那次丢了 2023 年全年大概 6000 张照片。后来用 photorec 恢复了一部分,但文件名全乱,缩略图丢失。

教训:备份必须能验证。 现在的做法是每次备份后生成校验清单,并且每周自动比对文件数量。

第二次惊魂:SnapRAID 的 sync 停了

2025 年 1 月,一块盘出现坏道,smartctl 显示 12 个重映射扇区。我准备重建,跑 snapraid sync 时发现上次同步是 47 天前。

原因:我把 sync 放在每周日凌晨 3 点,但那段时间机器在跑一个持续几天的转码任务,cron 因为负载高被跳过了(或者说是被 OOM killer 干掉了)。

结果:47 天内的新文件没有校验保护。坏的那块盘上恰好有 30 天内的照片。

幸运的是那些照片云上也有一份,最终没丢。

教训:校验任务要监控。 现在每次 sync 完会往 ntfy 推一条消息,超过 7 天没 sync 会告警。

第三次惊魂:勒索软件

2025 年 9 月,我的一台 Windows 机器中了勒索病毒(从某个破解软件来的)。它加密了映射的网络驱动器——也就是我的 NAS。

发现的原因是 Immich 突然报了一堆「文件损坏」。

损失:/mnt/pool/docs 下的 200 多个文件被加密,每个都多了 .locked 后缀。

恢复方式:SnapRAID 的校验盘里有 3 天前的快照,配合 snapraid fix 恢复了绝大部分。

没恢复的是 3 天内改过的 11 个文件。这 11 个文件我后来从邮件和微信里找回来了。

教训:

  1. NAS 上的共享目录不要用 Windows 的「映射网络驱动器」长期挂着,尤其是管理员权限的机器
  2. SnapRAID 的快照式校验在这里救了我,如果是 RAID,加密会实时同步到所有盘
  3. 冷备盘必须离线。我有一块 8T 的冷备盘,平时不插电,每月同步一次

现在的备份策略

数据(14T)
├─ SnapRAID 校验(1 块 4T 盘,容忍单盘故障)
├─ 每周日冷备到 8T 离线盘(平时断电放在柜子里)
└─ 重要数据(照片、文档,约 1.2T)
   └─ 加密后上传到云(Backblaze B2,每月约 $6)

原则是 3-2-1:3 份数据、2 种介质、1 份异地。

花了多少钱

  • 4 块 4T 红盘:4 × 620 = 2480(分两次买)
  • 4 盘位硬盘柜:480
  • N100 主机:780
  • 8T 冷备盘:900
  • 云存储:每年约 500

三年总计大概 5600,平均每年 1900。相比买成品 NAS + 硬盘,省了一半左右,但花了大量时间。

如果重来一次

我会做三件不同的事:

  1. 一开始就用 SnapRAID 而不是 RAID5。省了两次重建的焦虑。
  2. 第一年就上云备份。之前觉得 1.2T 上云贵,实际每月 6 美元,比丢数据的代价低太多。
  3. 不做 mergerfs,直接用单块大盘。合并视图很方便,但排查问题时多一层抽象,有一次文件写不进去,查了两小时才发现是某块盘 inode 满了。

最后一句:NAS 的价值不在硬件,在你敢不敢把唯一一份数据放进去。三年下来我最大的收获不是这套系统,而是终于养成了「重要东西至少三个地方有」的习惯。

评论 (0)

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

发表评论

验证码

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