第15期 | 巨人最结实的肩膀:文件系统

操作系统 · · 九羲科技

一、Linux 线

巨人最结实的肩膀,是文件系统

1991 年 9 月,Linux 0.01 出生时只认一种文件系统:Minix 的。

打开它的 include/linux/fs.h,第一行就是 `#define SUPER_MAGIC 0x137F`——那是 Minix 文件系统的身份证号。0.01 的 fs 目录里,superblock、inode、目录项,全是照着 Minix 的格式写的:1024 字节一块,目录项 = 2 字节 inode 号 + 14 个字符的文件名,根目录是 1 号 inode。源码今天还能在 kernel.org 的历史归档里下到,一万行出头。

为什么偏偏是它?因为 Linus 是在 Minix 底下写 Linux 的。编辑器、编译器都在 Minix 那边,Linux 这边要能读写同一块硬盘,两边才接得上话。0.01 只能从软盘启动,root 文件系统必须是 Minix 格式,想换个 root 位置还得拿十六进制编辑器手改启动盘——第一批用户是亲手把 Linux 抬进内存的。

还有个更实在的动机。他写文件系统驱动,最早不是为了"做文件系统",是为了把终端仿真器从学校 Unix 主机上下载的东西存进本地硬盘。先有"存不下来"的疼,才有驱动。需求长在自己身上,代码才写得动。

注意这个分寸:1991 年 8 月那封帖子里他就声明了,Linux 里没有一行 Minix 的代码。但他站上了 Minix 的"格式"。代码会重写,格式一旦落地,能活几十年——今天 util-linux 里还有 mkfs.minix 和 fsck.minix,fsck.minix 作者栏第一行就是 Linus Torvalds。后来文件名放宽到 30 字符,1992 年 Rémy Card 写出 ext,1993 年 ext2 接棒——Minix 的骨架一直在,只是血肉换了几轮。

发展性研究的那只眼看过来:这一章讲的不是原理突破,是中间层的胜利。Unix 文件系统的原理,1974 年 Ritchie & Thompson 的论文里就讲透了,Linus 没发明新原理,他做了"先实际"的那一步——借一个现成的格式,先把路跑通。对照 GNU Hurd,当年在追微内核的原理完美,1991 年还远不能用。

美学时刻看书法。目录树是文件系统的间架结构:inode 是骨架,目录项是笔画的落笔处。Minix 的间架极简——14 个字的名字,写不下长题款,但每一笔都站得住。

二、原生 AI OS 线

如果 AI 的操作系统先出现,"文件系统"会是什么

文件系统 = 持久化 + 命名。今天的答案是:字节 + 路径。AI-native 的答案可能是:记忆 + 意义。

推演一下:没有 /home/lisa/notes.txt,只有"上周三她说的那句关于存力的话"——按内容寻址,按向量召回。目录树(层级命名)退位,语义图(关系命名)上位。文件名 14 字符的限制,在 AI OS 里是个笑话:名字本身就是一段描述,要多长有多长,检索不靠前缀匹配,靠"你说的是什么意思"。

旧抽象与新硬件的张力在这里很具体。文件系统的"块"(4KB 页)是为旋转磁盘的寻道时间设计的线性抽象;向量检索的"块",是高维空间里的一片区域。分页思想已经在反向流动了——PagedAttention 把 OS 的分页用进了大模型的 KV cache(Kwon et al., SOSP 2023)。旧抽象没死,它在新硬件上转世。

再往外推一格:存储的本质一直是压缩。Minix 用 14 字符文件名,是在 1.44MB 软盘上省每一个字节;2023 年 DeepMind 的 Delétang 等人证明,Chinchilla 70B 无损压缩图像能做到原大小的 43.4%,超过 PNG 的 58.5%("Language Modeling Is Compression", arXiv:2309.10668)——一个语言模型,比专门的图像压缩器更会压缩图像。终极的文件系统也许不是"存字节",而是"存一个能重建字节的模型,加一句提示词"。香农 1948 年写下信息论时,大概没料到这一章。

离落地差几步:xuanora 的事件检索、SkyBook 的私有知识库,今天存的还是 PDF 和 Word——"文件"的形态没变。缺的是统一的记忆格式:谁的 embedding、什么版本、过期策略、遗忘协议。谁来做?做知识库的人,今天就得定。

三、动手线:今晚亲手格式化一张 1991 年的软盘

三条命令,亲眼看见 0x137F:

dd if=/dev/zero of=/tmp/minix1991.img bs=1024 count=1440

mkfs.minix -1 -n 14 /tmp/minix1991.img

dd if=/tmp/minix1991.img bs=1 skip=1040 count=16 2>/dev/null | od -A x -t x1z

第一行造一张 1.44MB 的"软盘",第二行用 34 年前的工具格式化(-1 是 v1 版,-n 14 是 14 字符文件名——1991 年的原配),第三行读出 superblock:你会看到 `7f 13`——小端序的 0x137F,就是 1991 年 9 月 Linus 写进 fs.h 的那个魔数,今天还认。

可观察的现象:格式比代码长寿。0.01 的 C 代码今天已经编译不过了,但它认的磁盘格式,今天的工具链还能造出来、读进去。

映射到九羲:搪胶厂一期"数据迁移+私有知识库",根问题就是格式选型。Minix 教的一课:选"活得久"的格式,不选"功能多"的格式。她的私有知识库,markdown 文本 + sqlite,今天能读,30 年后呢?(sqlite 官方承诺向后兼容到 2050 年。)把"30 年可读"写进知识库选型标准——这就是把原理变成能跑的东西,发展性研究。

觉 然 小 注

「过去心不可得,现在心不可得,未来心不可得。」文件系统是操作系统不肯放下的过去心。但 Minix 把它修得很瘦:名字只记 14 个字,不记住多余的东西。记住一切是病,知道什么值得记,才是智慧。

引 用 与 出 处

  1. Linux 0.01 源码导读:SUPER_MAGIC 0x137F,https://seiya.me/blog/reading-linux-v0.01
  2. Linux 发展史:0.01 唯一支持的文件系统是 Minix 文件系统,https://studfile.net/preview/6129020/page:116/
  3. Linux 早期史:首版从 Minix 引导、需 Minix 文件系统、仅软盘启动,https://gunkies.org/wiki/Linux
  4. Minix 文件系统结构:目录项 inode+14/30 字符文件名,http://ttk.mirrors.pdp-11.ru/_tenox_collection/@tenox.pdp-11.ru/os/minix/ibmpc/Introduction%20to%20the%20Minix%20File%20System.pdf
  5. mkfs.minix 手册:-n 14/30 文件名长度,v1/v2/v3 版本,https://manpages.debian.org/unstable/util-linux/mkfs.minix.8.en.html
  6. fsck.minix 手册:作者 Linus Torvalds,https://www.unix.com/man_page/suse/8/fsck.minix/
  7. Delétang et al., "Language Modeling Is Compression", arXiv:2309.10668, 2023,https://arxiv.org/abs/2309.10668

· · ·

← 返回资讯中心