一台跑了好几年的树莓派家庭服务器,某天晚上突然连SSH都连不上,种子列表转不出来,SMB挂载也失败了。第二天插上调试屏幕重启,内核加载到一半就卡死——罪魁祸首是那张服役多年、几乎从没断过电的microSD卡。fsck修出一堆错误,再插拔一次又冒新的错误,基本可以判定卡已经报废。几天前那次莫名其妙的全楼停电,大概率只是给一张早已磨损的卡补了最后一刀,真正的根因是长期高频写入下的介质老化。
这不是什么惊天动地的大新闻,但接下来的重建过程,倒是把“家庭服务器怎么才算可靠”这个问题讲得比大多数教程都清楚。
发生了什么
SD卡在Pi 4B上几乎24/7跑了数年,根分区一直挂在上面,没做任何减写优化。停机后损失有限:丢的是.torrent文件和几个服务的缓存,都能重新生成。Immich的照片数据在外置硬盘上,而且有定期备份,完全没受影响。系统配置本身用NixOS声明式管理,不依赖那张卡的具体状态,重装几乎是照着配置文件重新生成一份。
真正让这次事故没演变成灾难的,不是运气,是当初的架构选择:重要数据没放在SD卡上,配置又是可复现的。
怎么重建的
新方案拆成三块:少写、冗余、备份。
减少写入方面,swap换成zram(内存里压缩,不落盘),/tmp挂成tmpfs,journald日志改成只存内存,根分区加noatime关掉访问时间戳写入,再换一张标称“高耐久”的64GB卡。这些手段能明显降低写入频率,但没人能保证一张廉价microSD从此不会坏——它只是把风险往后推,不是把风险消除。
数据层面,把家里攒了多年的旧硬盘拉出来当正职:一块500GB笔记本盘、一块320GB老苹果盘,后来并进一块1TB盘,组成Btrfs RAID1数据池,每个服务对应一个独立子卷,声明式地在NixOS配置里管理挂载和创建。重要数据继续用Restic加密备份到S3,保留每日、每周、每月的快照策略。整套系统再配一个折扣价买来的UPS,降低断电时正好踩中写入窗口的概率。
这套方案靠谱在哪,又有哪些没解决
RAID1解决的是“一块盘坏了数据还在”,不解决“误删了、被加密勒索了、数据还在但配置全忘了”——这是两回事,原文也老实分开处理:池内冗余归Btrfs RAID1管,异地容灾归Restic+S3管。很多家庭NAS教程把这两者混为一谈,好像装了RAID就等于有了备份,这是最容易踩的坑。
冗余防单点故障,备份防人祸,配置可复现防“重装等于重来”
真正决定这次损失小的,其实是配置的可恢复性:NixOS的配置文件本身就是系统的出厂设置,SD卡烧了,重新build一个镜像刷进去就行,不用从头回忆当初都装了什么、怎么配的。这一点比任何硬件冗余都关键——硬盘能不能RAID是加分项,配置能不能一键复现,才是家庭运维真正的分水岭。
- 提醒.作者自己也承认监控还没搭起来,smartd和Prometheus都停在计划阶段,那块塞满Linux镜像的10TB硬盘依旧在裸奔;这套旧硬盘拼盘更像是硬件涨价年代的将就方案,不是值得直接照抄的“最佳实践”
家用服务器这种东西,平时看不出好坏,出事才见真章。廉价硬件的宿命是终究会坏,能不能坏得体面,拼的从来不是堆了多少层架构,而是有没有把写入寿命、冗余、备份、可恢复性这四件事一起设计进去。少了任何一环,剩下的都只是心理安慰。
