NFS 诞生之前:SunOS 如何用 nd 协议实现无盘工作站——一段被遗忘的"诅咒"知识
来源:utcc.utoronto.ca — 2026-07-12
📋 概述
这是一篇关于 Sun Microsystems 早期技术的历史回顾。在 NFS 协议于 SunOS 2.0 出现之前,Sun 使用一种名为 nd(network disk,网络磁盘)的内核块设备驱动来实现无盘工作站。其工作原理相当"原始":服务器端划出一整个大分区,管理员手动为每个无盘客户端指定起始和结束扇区——没有任何重叠检测,出错即灾难。更令人咋舌的是,nd 不使用 UDP 或 TCP,而是直接跑在原始 IP 数据报上,仅靠 IP 头校验和(不做数据校验),在 1980 年代初的以太网上赌数据不会损坏。这篇文章将其称为"一段被遗忘的诅咒知识"毫不为过——它让我们看到,今天看似理所应当的网络文件系统,走过了一条多么惊险的道路。
🔑 核心要点
- nd(network disk):SunOS 早期的内核块设备驱动,客户端和服务器使用同一驱动,通过广播发现服务器,纯内核态处理所有 IO
- 手动扇区分配、零校验:管理员在一个大分区内手工为每个客户端分配起止扇区,nd(8) 手册页的 BUGS 章节明确写着"不做任何分区合理性检查"
- 直接跑在 IP 数据报上:故意不用 UDP,因为"UDP 会校验整个包而 IP 只校验头部"——在当时 CPU 性能有限的条件下,省掉 1024 字节的校验能带来实际性能差异
- 可以利用特殊的 'c' 分区(整盘访问)在已用完标准分区时继续划分 nd 磁盘,风险是可能覆盖正在使用的文件系统分区
- 可以将服务器的 /usr 分区作为只读公共 nd 设备暴露给所有无盘客户端共享,避免每个客户端都存一份副本
- nd 驱动一直保留到 SunOS 3.0(NFS 早已存在),直到 SunOS 4 才被移除——人们对 NFS 的到来"欣喜若狂"
💡 金句
Sun 本来可能更糟——他们可能死守 nd 不放。那种在原始 IP 数据报上跑磁盘 IO、没有分区重叠检查的日子,让 NFS 的到来像是一道救赎之光。
← 返回 Lobsters 首页