自建 NAS 三年,我的存储方案和三次数据惊魂
三年前开始自建 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 个文件我后来从邮件和微信里找回来了。
教训:
- NAS 上的共享目录不要用 Windows 的「映射网络驱动器」长期挂着,尤其是管理员权限的机器
- SnapRAID 的快照式校验在这里救了我,如果是 RAID,加密会实时同步到所有盘
- 冷备盘必须离线。我有一块 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 + 硬盘,省了一半左右,但花了大量时间。
如果重来一次
我会做三件不同的事:
- 一开始就用 SnapRAID 而不是 RAID5。省了两次重建的焦虑。
- 第一年就上云备份。之前觉得 1.2T 上云贵,实际每月 6 美元,比丢数据的代价低太多。
- 不做 mergerfs,直接用单块大盘。合并视图很方便,但排查问题时多一层抽象,有一次文件写不进去,查了两小时才发现是某块盘 inode 满了。
最后一句:NAS 的价值不在硬件,在你敢不敢把唯一一份数据放进去。三年下来我最大的收获不是这套系统,而是终于养成了「重要东西至少三个地方有」的习惯。
评论 (0)
还没有评论,来说两句吧~
发表评论