第一章 存储的本质——从结绳到Flash
1.1 结绳记事——人类第一条“存储记录“
你脑子里有一句话,但你闭着嘴
想象一个场景:你走在石器时代的旷野上,腰间系着一根麻绳。走着走着,你发现东边三座山外有一群野牛。你要把这个消息告诉部落里的猎人。
你可以跑回去。你可以喊。但如果你到的时候猎人们不在,而你又必须去另一个方向继续侦察,怎么办?
你蹲下来,在那根麻绳上打了一个结。
这不是随便打的。这个结的位置、大小、缠绕方式,都代表着一个信息:“东边,有牛,很多”。
你起身离开,留下那根系在树上的绳子。三天后,猎人路过这里,看到绳结,理解了信息,朝东边去了。
结绳记事,是人类历史上第一个“存储系统“。
它不是存储,因为没有磁头、没有浮栅、没有电荷。但它完成了存储最核心的功能:信息离开了你,却仍然存在。
那个绳结,就是人类的第一行代码。它把信息从时间中抽离,让它不需要依赖特定的人、特定的地点、特定的时刻。你走了,信息还在。
绳结里的“协议“
结绳记事不是一个人自娱自乐的行为。它是一套协议。
现代考古和人类学研究发现,各地结绳记事系统都有惊人的相似结构:
绳结协议栈(上古版)
========================
应用层: "东边有牛" ← 要传递的具体信息
表达层: 大结=动物, 小结=数量 ← 符号约定
编码层: 绳结的位置+大小+颜色 ← 物理表示
物理层: 麻绳、草绳、棕榈纤维 ← 存储介质
这不是随便打的结。它是一套完整的编码系统。绳结的大小代表信息的重要性,绳结的位置代表信息的类别,绳子的颜色代表信息的领域(比如红色的绳子记录战争,黄色的记录粮食……)。
最著名的例子是印加帝国的奇普(Quipu)——一种用结绳记录国家信息的系统。印加帝国没有文字,但他们用奇普记录了人口普查、税收、粮食储备、军队调动。一个熟练的奇普解读员,可以在一小时内“读取“几百条绳结记录。
奇普的结构极其复杂:
主绳(横向)
├── 第一根吊绳 → [●●●] [●●] [●] ← 三个大结代表300,两个小结代表20,一个小结代表1
│ = 321(某种单位)
├── 第二根吊绳 → 空绳 ← 占位符,分隔不同条目
├── 第三根吊绳 → [●●●●] [●●●●] ← 数据
│ └── 子吊绳 → [●][●][●] ← 子条目,可能是备注
└── 第四根吊绳 → 颜色不同 ← 不同类别
这哪里是“打几个结“?这是用绳子的拓扑结构实现了一个完整的数据库。
印加人甚至用奇普实现了类似“校验和“的概念——在绳结系统的末尾,有一个专门的“校验绳结“,读取员需要核对前面的数据和这个校验结是否一致。如果不一致,说明绳子可能在运输过程中松动了、或者解读有误。
几千年前的安第斯山脉上,已经有人在用“CRC“了。
存储的三个核心问题
结绳记事看似原始,但它揭示了存储技术的三个核心问题——这三个问题,从绳结到Flash,从来没变过。
第一个问题:编码。 你脑子里有一个想法,你怎么把它变成物理世界里的东西?
绳结的答案是:约定符号系统。“大结代表百、小结代表十、单圈代表一”。这套约定必须提前在发送者和接收者之间建立。没有共同的编码规则,结绳记事就是一团麻绳。
这和Flash存储没有任何本质区别。你写一个文件到Flash——过程是把字节序列编程到浮栅晶体管的阈值电压上。这也是一种编码:把逻辑数据变成物理状态。编码规则是什么?是文件系统的元数据结构(superblock、inode、FAT表……)。
第二个问题:耐久。 信息离开发送者之后,能保存多久?
麻绳在安第斯山脉干燥的气候下可以保存数百年。泥板刻字可以保存几千年——我们今天的考古学家还能解读苏美尔人的楔形文字。纸张在理想的保存环境下可以延续千年。但磁芯存储器断电就忘,DRAM需要每几毫秒刷新一次,Flash虽然非易失但写入多了会磨损。
每一种存储介质都有它的“寿命剧本“。这个剧本的长度,决定了信息的有效期。
第三个问题:可检索。 信息存下来了,怎么找回来?
你不可能把一百根绳子一根一根地摸过去——你需要一个“目录“的概念。印加奇普的解读员接受过严格的训练,他们知道哪根绳子记录什么内容,知道从主绳的哪一个节点开始“读取“。
这和文件系统的目录结构、inode索引、FAT链表的本质是一样的——都是“元数据“,都是“关于信息的信息“。
从绳结到泥板:存储的第一次飞跃
从结绳到泥板,是人类存储技术的一次质的飞跃,但飞跃的不是硬件本身,而是抽象层级。
绳结只能记录数值信息——数量、金额、日期。它很难表达“今天国王打猎时射中了一只鹿“这样的叙事。但泥板可以。楔形文字用不到一千个符号,就能表达苏美尔语的全部词汇和语法。
这里有一个非常深刻的观察:存储介质的进化,本质上是数据模型抽象能力的进化。
绳结 → 数值编码 → 数量、日期
泥板 → 文字编码 → 叙事、法律、文学
纸张 → 大规模复制 → 印刷术让信息工业化
磁盘 → 文件系统抽象 → 你不再关心数据在哪个扇区
Flash → 闪存转换层(FTL) → 你甚至不关心介质的物理特性
每一层抽象,都让你离物理介质更远一步。同时,每一层抽象,都掩盖了物理介质的缺陷——磨损、坏块、掉电中断——让上层使用者看到一个“完美“的存储设备。
而这种掩盖,正是我们这本书要讲的核心。
你手上这本书的祖宗
当你用 knotfs_write("hello.txt", "Hello World", 11) 写一行代码时,你的电脑在不到一毫秒内完成了信息的编码、存储和索引。
你不需要关心数据存在哪个物理块(find_free_block替你选了最年轻的那块砖),不需要关心写入过程会不会中途断电(Copy-on-Write替你保护了旧数据),不需要关心元数据怎么安全落地(log-structured metadata替你在SB Log里追加了一条8字节的记录)。
这些“不需要关心“的背后,是一场持续了几万年的工程接力。从打绳结的人开始,一代又一代的工程师在解决同一个问题:让信息比我们活得更久。
那个打绳结的人可能不知道,他手里那根麻绳的“程序“,要跑上几万年,最终在2026年被编译成C代码,运行在一个64KB的嵌入式文件系统里。
但他做的事情和我们做的事情,灵魂是一样的。
存储的本质,是对抗时间的熵增。数据在物理世界里天然趋向于乱——电荷泄漏、写入中断、块磨损、比特翻转……而文件系统,是人类智慧对抗这一趋势的工程结晶。
下集预告
绳结之后再无绳结。人类开始用泥板、竹简、羊皮纸、造纸术——每一次存储介质的进化都解决了一个旧问题,同时制造了一个新问题。下一节,我们从两河流域的泥板出发,走到东汉的蔡伦,看看人类如何用一个又一个介质,接力把信息传递到今天。
悬念留给:当人类第一次学会把数据“复制“——当一本书可以变成十本书——存储的“可靠性“就不再是唯一的追求了。拷贝,诞生了新的问题。