文章摘要
作者的家庭服务器因断电导致系统损坏无法启动,经检查发现microSD卡文件系统错误。通过修复文件系统,服务器最终恢复正常运行。
文章总结
好的,以下是根据您提供的英文文章内容,用中文重新陈述的主要部分,保留了关键细节,并删减了与主题无关的冗余内容。
标题:我家用服务器的“死”与“重生”
核心事件: 几天前,我和伴侣想下载一个Linux ISO文件,但我发现无法通过手机应用连接家中的树莓派服务器。SSH连不上,SMB挂载也失效了。我以为是最近修改NixOS配置导致的小问题,打算第二天再处理。
诊断与发现: 第二天,我将树莓派连接到调试显示器,重启后系统卡在加载内核阶段。尝试回退到上一个系统版本,问题依旧。我取出microSD卡进行检查。
首先用fsck修复文件系统,发现并修复了大量错误。但重新插拔后,又出现新的错误。最终判断,这张microSD卡很可能已经损坏,而之前的停电事件只是给了它“致命一击”。
损失评估: 这张树莓派4B已近乎7x24小时运行多年。重要数据(如Immich照片库)都存储在外部硬盘并有备份,NixOS配置也完整保留。唯一丢失且无备份的是microSD卡上的.torrent文件和一些服务的缓存,这些都可以轻松重建。
新方案设计:
为了避免重蹈覆辙,新服务器配置围绕三个核心原则:
1. 减少对microSD卡的写入:启用zram作为交换空间,将/tmp设为内存盘,并将系统日志(journald)存储在内存中。同时,挂载根文件系统时禁用atime(访问时间更新),以减少不必要的写入。
2. 外部硬盘冗余:利用手头两块旧硬盘(500GB和320GB),组建了一个Btrfs RAID1存储池,命名为“ポンコツ”(意为“破烂货”)。Btrfs的灵活性允许未来随时添加不同大小的硬盘。
3. 全面备份:为每个服务创建独立的Btrfs子卷,并利用Restic工具和sops-nix模块,为关键数据(如Immich)配置了自动备份策略,包括排除缓存目录和设置保留周期(每日、每周、每月)。
权限与监控:
为了让多个服务(如Transmission、Jellyfin)共享下载的“Linux ISO”文件,创建了一个media用户组,并利用setgid位确保新创建的文件自动继承该组权限。在监控方面,目前仅定期运行Btrfs scrub检查磁盘错误,未来计划配置smartd或Prometheus+Grafana进行更全面的监控。
硬件更新: 由于新microSD卡到货延迟,最终在本地商店购买了一张64GB的“高耐久”卡,并顺便购入了一台打折的UPS(不间断电源)。
部署与恢复: 利用NixOS的模块化特性,通过一个简单的配置文件即可生成树莓派的系统镜像,直接写入新microSD卡。连接好所有硬件并接入UPS后,系统迅速启动,通过SSH修复了一些小问题后,服务器便恢复了服务,包括在出发度假前成功运行了Navidrome音乐服务器。
当前状态: 存储池目前由1TB、500GB和320GB三块硬盘组成,采用RAID1模式。计划再添加一块500GB旧硬盘。另有一块10TB的硬盘(ext4格式)存满数据,暂不加入池中,仅备份重要内容。
评论总结
根据评论内容,主要围绕树莓派SD卡可靠性问题展开讨论,观点如下:
1. SD卡可靠性问题(主流观点) - 树莓派因不明原因导致SD卡损坏是常见问题(inigyou) - 印度电力不稳定加剧了SD卡故障(arjie: "India has unreliable power too so the SD card death was inevitable") - 缺乏IO接口和BIOS显示是放弃树莓派的原因(tonymet: "SD card crashes are nearly a guarantee")
2. 替代方案(主流观点) - 推荐使用USB SSD或NVMe存储(hn_throw2025: "I now use a small SSD connected via USB3") - 建议使用Beelink N95等迷你PC替代(belabartok39: "Why not get a Beelink N95") - 现代Rockchip SBC已配备NVMe插槽(Venn1: "modern Rockchip SBCs tend to come with NVMe slots")
3. 维护建议(次要观点) - 保持启动盘使用率不超过60%,定期运行TRIM(vachina: "keep your boot drive 60% used at max and run TRIM") - 使用计算模块的板载闪存(notthefda: "The RPi Compute Module is mush better with on board flash") - 通过raspi-config启用外部驱动器启动(ranger207: "enable booting from an external drive")
4. 其他讨论 - 使用LLM辅助调试(blfr: "Use a clanker... having LLMs handle the boring stuff") - 对zram作为swap的质疑(mvanbaak: "using a ramdisk for swap... how does that make sense?")