第88期 | 三十年,从装得下到回得去
前两期讲装得下、断电后翻日记,这期收束第九章:文件系统三十年走到最后,问题从“存得下、丢不了”变成了“改错了,回得去吗”。
一、改写不覆写,旧版留一手
ext4 是从 ext3 里分叉出来的。2006 年,ext3 的维护者 Theodore Ts'o 宣布不再往 ext3 里塞扩展,另起 ext4 一条线;2008 年 10 月 11 日,标记为稳定的补丁并入 2.6.28,同年 12 月 25 日随内核发布¹。关键改动是区段(extent):旧的间接块像逐块点名,一个文件有多少块就要列多少个地址;区段一句话说清,“从第几块起、连续多少块”,大文件的元数据一下子瘦下来。卷上限 1 EiB,单文件 16 TiB¹。还有延迟分配、持久预分配,都是让大文件写得更顺的办法。但骨架没变:改写还是原地覆写,崩溃一致性靠日记兜底,旧版一覆写就没了。
btrfs 换了一副骨架。2007 年,Chris Mason 在 Oracle 动手,核心是 IBM 研究员 Ohad Rodeh 同年在 USENIX 提出的写时复制 B 树;2009 年进主线²。改写时不碰旧块,新版写在别处,最后根指针一翻才生效;旧树还在,快照就是再留一个指着旧树的根,几乎不花额外空间。子卷、数据与元数据双校验、在线 scrub 巡检,都在这副骨架上长出来²。校验这条线接得上 GFS:2003 年 Google 就立过规矩,每个 64 KB 块带校验和,不信磁盘⁴。86 期的 BeamFS 是同一条线的另一头:光发现不够,还要原地纠回来。
可是 2008 年 Ts'o 自己说 ext4 只是过渡、btrfs 才是方向²,十七年过去,大多数发行版的默认还是 ext4。原因不在功能表上:btrfs 的 RAID5/6 奇偶模式,上游至今标着已知问题;数据库、虚拟机镜像这类随机写多的活,写时复制会碎成一地,得关掉写时复制再调优;Red Hat 在 7.4 弃用、8 里拿掉³。SUSE 倒是从 SLE 12(2015)起把它当默认²。同一套技术,有人当默认,有人请出门。选文件系统到最后,选的不是功能,是出问题时有没有人能兜底、坑是不是已经被踩过一遍。Anderson 那句“还原论不等于建构论”⁵放在这里正好:知道块怎么存,推不出版本该怎么管;版本、快照、校验,是另一层概念。
言外之物也在这里:ext4 赢,不一定赢在更新,而是赢在大家已经会修它。技术路线的胜负,常常在功能表之外——谁的故障有人认,谁的旧账算得清。
左边原地覆写,旧版没了;右边写时复制,旧版还在,快照指着旧版。程序绘制概念示意图。
二、快照不是免费的,留旧版要付账
TrendForce 预测,2026 年第四季度企业级 SSD 合同价环比涨 23–28%⁶——这是预测,不是实测结果,但方向值得先算进账里。快照“几乎不花空间”只对了一半:快照 pin 住旧区段,旧版一天不删,空间一天不还;留十个快照,就是留十份旧世界。SSD 涨价的季度里,保留策略就是预算策略:快照留多久、谁有权删、删之前要不要确认,得写进规矩,不能只写进功能。
2026 年 10 月 26 日,Mirantis 与 Vast Data 宣布把 Vast 的数据服务接进 k0rdent AI 编排:租户开户时存储自动长出来,销户时自动收回去⁷。快照的另一面是回收:能回得去,也要收得干净——一个租户走了,它的快照、权限、索引还在不在?收不干净的“回得去”,是未来的隐患。
落到原生 AI 操作系统,智能体的状态也该是快照式的:动手改外部世界之前,先给意图、上下文、权限拍一张快照;改砸了,内部状态翻回快照,而不是像 87 期的日记那样只重放字节。但边界要说清:快照只管得了自己这一亩三分地,对外发出去的消息、改了别人的数据,翻不回来——所以快照前面还要有 87 期的“意图先记、确认才执行”。日记管“做没做完”,快照管“做错了能不能回头”,两本账缺一不可。
旧抽象与新硬件的张力在这里也换了个样子:线性字节流只认“当前位置”,版本认的是“时间”。文件系统从管位置进化到管时间,智能体的记忆也一样:上下文不是一串字节,是若干个时间点的状态,取舍、回滚、遗忘,都得有名有姓。
三、在 /tmp 里建一个会快照的盘
先问一句,手边这台机器的盘是什么文件系统:
df -T /
lsblk -f
今晚能动手的小实验,在 /tmp 里建一个 256 MB 的镜像练手,不动真盘(需要 root 与 btrfs-progs,没有 btrfs-progs 的机器先装,生产盘别拿来练):
truncate -s 256M /tmp/btest.img
mkfs.btrfs /tmp/btest.img
mkdir -p /tmp/bmnt && mount -o loop /tmp/btest.img /tmp/bmnt
btrfs subvolume create /tmp/bmnt/data
echo v1 > /tmp/bmnt/data/note.txt
btrfs subvolume snapshot /tmp/bmnt/data /tmp/bmnt/snap1
echo v2 > /tmp/bmnt/data/note.txt
diff /tmp/bmnt/data/note.txt /tmp/bmnt/snap1/note.txt
diff 会告诉你:data 里是 v2,snap1 里还是 v1。回滚就是再拍一张快照指回去:
mv /tmp/bmnt/data /tmp/bmnt/data-bad
btrfs subvolume snapshot /tmp/bmnt/snap1 /tmp/bmnt/data
再看这张快照的账:
btrfs filesystem df /tmp/bmnt
btrfs subvolume list /tmp/bmnt
练完收尾:umount /tmp/bmnt,删掉 /tmp/btest.img。亲手看一次“改了还能回去”,比背写时复制的定义记得牢;再数一数留了几个快照,想一想 ② 里那笔账:每个快照 pin 住的旧区段,都是要付空间租金的。
落到日常的四种活,同一招能翻出四种读法。一台跑本地模型的机器上,权重文件动辄几十 GB,改权重前先快照,训崩了翻回上一版,不用重下;边缘盒上,断电是常事、空间又小,快照留一两个就够,多了先算空间账;视频 AI 平台里,视频片段和推理结果来来去去,按天快照、过期删快照就是删旧世界;企业私有智能中心里,每家企业的文档、记录、权限挂在同一棵树的不同枝上,快照按企业分子卷,删快照之前要确认。装得下是第一步,断电后说得清是第二步,改错了回得去,是第三步。
觉 然 小 注
回得去,不是怕错。知道旧版还在,人改起来手才不抖;敢改、敢试、敢在干中改错再回头,底气恰恰来自那一手留着的旧版。凡发生的事,包括改错的那一步,都有它逼出来的下一层明白——前提是,旧版还在,路还在。
引 用 与 出 处
- [1] Ext4. Wikipedia. https://en.wikipedia.org/wiki/EXT4
- [2] Btrfs. Wikipedia. https://en.wikipedia.org/wiki/Btrfs
- [3] Red Hat Customer Portal. Will Btrfs be supported on Red Hat Enterprise Linux? https://access.redhat.com/solutions/197643/
- [4] Ghemawat, S., Gobioff, H., Leung, S.-T. The Google File System. SOSP, 2003. https://doi.org/10.1145/945445.945450
- [5] Anderson, P. W. More is Different: Broken Symmetry and the Nature of the Hierarchical Structure of Science. Science, 1972.
- [6] TrendForce 预测(经 Tech Insider 2026-10-27 整理转述;二手,以 TrendForce 发布为准). https://tech-insider.org/enterprise-ssd-prices-q4-2026-nand-supplier-race/
- [7] Mirantis × Vast Data 联合集成新闻稿(经 StorageNewsletter 2026-10-26 编辑发布;厂商口径). https://www.storagenewsletter.com/2026/10/26/mirantis-partners-with-vast-data-to-unify-gpu-compute-and-storage-for-multi-tenant-ai-clouds/
· · ·