断电:数据的命真硬啊
近期家里的电线有问题
七月底到八月初那阵子,断电断得 journalctl --list-boots 的列表跟心电图似的
邻居家都没有断,手机一看还有邻居家的网络,电表和空开都没跳闸,就我这里停了(何意味)
8-12 下午又连着断三次,最长一次停了快两个小时
真难受啊
断电记录
journalctl --list-boots 会把每次开机记成一个 boot,正常关机和断电在列表上的区别就是:断电后下次开机,journald 会从磁盘日志接着写,而 boot 记录本身就是最直接的断电时间线
journalctl --list-boots --no-pager-15 8ddf959a76b44cf185affdef53d8b7c1 Fri 2026-07-31 08:25:48 CST Tue 2026-08-04 07:07:18 CST-14 a91a34d8a6cd432cb241c4c50f8fa012 Tue 2026-08-04 09:08:45 CST Wed 2026-08-05 06:53:43 CST-13 1cdbe8ef9e034a72a9eec82969105ba6 Wed 2026-08-05 06:54:53 CST Wed 2026-08-05 06:56:00 CST-12 624da721ed5a4105b4169349b5969ee0 Wed 2026-08-05 06:57:10 CST Thu 2026-08-06 11:52:21 CST-11 639d4481b17945549db657881185e802 Thu 2026-08-06 11:53:35 CST Thu 2026-08-06 13:54:31 CST-10 f6ee0f7f4ce64ee4b6f14926dab18817 Thu 2026-08-06 13:55:02 CST Thu 2026-08-06 13:57:26 CST -9 6254c3993fe84b779f6e9edf1a0f62e0 Thu 2026-08-06 13:57:53 CST Thu 2026-08-06 15:30:24 CST -8 e42e471ab4574aaeac781c96f606d7c4 Thu 2026-08-06 15:33:30 CST Thu 2026-08-06 16:36:06 CST -7 d1062750e40245fe8aaab27d8886efa1 Thu 2026-08-06 16:39:27 CST Thu 2026-08-06 18:12:37 CST -6 c9715d0fff9040f3ac950674fbc5ce89 Thu 2026-08-06 18:23:29 CST Wed 2026-08-12 17:03:19 CST -5 057711b837424eb19d435dfc121d162e Wed 2026-08-12 17:06:01 CST Wed 2026-08-12 17:07:04 CST -4 78ae7f438afb4659957e69bb01ccdfe5 Wed 2026-08-12 18:02:11 CST Wed 2026-08-12 18:10:12 CST -3 4c2c63f9c2fb457e81d7da7b35d88edf Wed 2026-08-12 18:10:41 CST Wed 2026-08-12 18:12:58 CST -2 38c826e792df4a84be4306d549bd98e7 Wed 2026-08-12 18:13:25 CST Wed 2026-08-12 18:14:06 CST -1 6eb834889a414febba9cdad81c6251d4 Wed 2026-08-12 18:14:49 CST Wed 2026-08-12 18:57:46 CST 0 675fa0caf37f41ce97214bffcd1e5eda Wed 2026-08-12 20:27:36 CST Tue 2026-08-25 02:27:45 CST挑几个典型:
- 8-04 早上 07:07 断一次,09:08 才来电
- 8-05 早上 06:53 断一次,06:54 开机,结果一分钟后又断,06:57 才稳下来
- 8-06 更离谱,从 11:52 到 18:12,六个小时断了五次,其中 13:55 那次开机两分半就又没了
- 8-12 下午 17:03 断,17:06 开机,一分钟后又断,这次停了 55 分钟
- 18:57 又断,这回停了 1 个半小时,20:27 才来电
- 中间 18:02 到 18:14 那三个短 boot 是我在升级内核正常重启,不算断电
-6 那个 boot 从 8-06 一直跑到 8-12,扛了六天,是全列表最长的,也是被断电掐得最冤的
唉,服务器挂后台,第二天醒来一看屏幕黑了,还得手动开一遍:astrbot 的向量和视觉模型、docker 服务、Terraria/MC 服务端,有点麻烦但是顺手
还有就是在我追番的时候当面断电,然后立即来电,有点无语啊
查数据
系统盘是 btrfs,btrfs device stats 直接读五项错误计数器,查它
btrfs device stats /[/dev/nvme1n1p2].write_io_errs 0[/dev/nvme1n1p2].read_io_errs 0[/dev/nvme1n1p2].flush_io_errs 0[/dev/nvme1n1p2].corruption_errs 0[/dev/nvme1n1p2].generation_errs 0没翻过车啊可还行
btrfs scrub 全盘校验 310GiB 也扫过一轮,没抓到任何坏块(上次跑是 4 月 14 日,中间断这么多次也没出新问题啊)
sudo btrfs scrub status /我的数据盘 /data 是 ext4 文件系统,断电后 fsck 结果也是 clean
跑着的那些数据库(机器人、服务器存档用的 SQLite)integrity check 全过
btrfs
这次断电没翻车,得归功于系统盘选了 btrfs
btrfs 最核心的设计是 COW(写时复制):写入数据不直接覆盖旧数据,而是先写一份新的,确认完整再切换引用
断电就算卡在中间,旧数据也原封不动,不存在 ext4 那种写到一半的脏状态
再配合 checksum,每个数据块都带校验和,读取时验证,能发现静默损坏,这是 ext4 做不到的
我的评价是“抗断电圣体”q.q
/ 和 /home 是两个子卷,互不干扰,折腾起来也方便
优点列一下:
- 断电/崩溃恢复强,COW 保证不出现写一半的脏数据
- checksum 能发现位翻转和静默损坏,坏块瞒不过它
scrub定期全盘校验,把隐患扫出来- 快照秒级生成,折腾前拍一个,出事一键回滚
btrfs 的快照功能,配 Timeshift 就很好用
用的时候别勾 /home,毕竟东西多
home 里缓存和临时文件一堆,快照一次占不少空间,恢复时还容易把当前文件搞乱
个人数据交给专门的备份工具更靠谱:restic、borgbackup 这类增量备份,加密去重,扔外置盘或网盘
数据分两层管,系统快照管系统,个人数据管个人数据,各干各的
不足也说说,不吹:
- 写入放大,COW 的代价,小文件频繁写会把 NAND 磨损放大 2~3 倍,我之前还专门纠结过这事
- 长期用碎片会变多,SSD 上感知不强
- RAID5/6 有历史遗留问题,官方都不推荐,不过家用单盘用不上这玩意
- 比 ext4 复杂,真出问题排查门槛高,适合愿意折腾的人
单盘家用,这些不足基本碰不到,断电实扛了39次
值了
SMART
计数器会骗人,盘自己的健康报告不会
NVMe 盘的 SMART 里有个 Unsafe Shutdowns,记的就是「没走正常关机流程」的次数,断电一次加一
sudo smartctl -a /dev/nvme1n1Power Cycles: 60Unsafe Shutdowns: 39Media and Data Integrity Errors: 0Error Information Log Entries: 0Available Spare: 100%Percentage Used: 1%Data Units Written: 21,708,224 [11.1 TB]致态 TiPlus7100s(系统盘,btrfs)的情况:
- 通电 60 次,其中 39 次是不安全关机,超过六成
- 媒体错误 0,错误日志 0 条
- 备用块 100%,寿命消耗才 1%(刚刚还担心写入放大来着)
- 累计写入 11.1TB,折合平均每天 86GB,这盘有 600TBW
通电次数少是有原因的,Linux 适合一直挂着,功耗和调度控制得好,平时基本不关机
好在电工师傅来得及时,没让这 39 次接着涨
数据盘长城 GW3000 也看过:425 次上电、91 次不安全关机(里面有历史习惯性直拔的贡献,说人话就是当移动硬盘使了),媒体错误同样 0
结论
断电 39 次,btrfs 五项计数器全 0,ext4 干净,SQLite 全过
盘自己报的寿命损耗 1%,数据一次没丢
断电瞬间最慌的是人,不是文件系统
COW + checksum 的 btrfs 在这种场景就是对的答案
之前还纠结过写入放大那点磨损,现在看,那点 NAND 损耗跟断电比根本不值一提
下次断电,反正数据都还在
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时