1992年贝尔实验室设计的Plan 9系统,原生架构就是4台机器组网:认证服务器、文件服务器、CPU服务器、终端。新用户想体验?传统做法得先凑齐4台设备。但一个荷兰程序员Mechiel Lukkien搞了个骚操作——用OpenBSD单机虚拟出整套网络,还能用熟悉的Unix工具编辑Plan 9文件。
这套方案的核心思路是"借壳上市"。文件服务用u9fs(Plan 9自带程序),认证服务用authsrv9(Unix移植版),两者都从inetd启动。CPU服务器最狠:用QEMU从软盘启动,完全无盘。终端则用drawterm连接。四个角色各占一个独立IP,后续随时能拆成物理机。
IP规划:给每个服务发身份证
作者的网络是192.168.1.0/24,给Plan 9服务分配了三个地址:192.168.1.188给文件服务器(ufs1.local),192.168.1.189给认证服务器(auth1.local),192.168.1.193给CPU服务器(cpu1.local)。这种设计让服务边界清晰,比单机混跑所有服务更容易理解Plan 9的架构哲学。
文件服务器跑9P2000协议,这是Plan 9的原生文件协议。u9fs作为Unix端的实现,把本地目录暴露成Plan 9文件树。认证服务器用authsrv9处理p9cr协议,管理用户密钥和登录凭证。两个服务都通过inetd按需启动,不用常驻内存。
CPU服务器:软盘里塞下整个系统
最妙的是CPU服务器的实现。QEMU从软盘镜像启动,内核和初始根文件系统都在软盘里,运行后从网络挂载真正的文件系统。这种"无盘工作站"模式正是Plan 9的设计精髓——计算和存储彻底分离。软盘镜像只有几百KB,却能让CPU服务器在没有任何本地存储的情况下全功能运行。
终端用drawterm连接,这是Plan 9的图形终端程序,支持远程显示和输入。用户在自己的Unix桌面上运行drawterm,连接到QEMU里的CPU服务器,获得完整的Plan 9图形环境。整个链路是:drawterm → cpu1.local → 通过9P协议读写ufs1.local的文件 → auth1.local验证身份。
为什么OpenBSD?
作者选OpenBSD有现实考量:安全审计传统、干净的系统架构、完善的文档。但方案本身足够通用,任何Unix-like系统都能跑。关键是利用宿主系统的工具链降低入门门槛——新手可以用vim编辑Plan 9的配置文件,用grep查日志,不用先学会Plan 9特有的编辑器acme和sam。
这套方案在9fans邮件列表和Plan 9 wiki都有讨论。作者留下联系方式mechiel@ueber.net收反馈,IRC频道#plan9在freenode(注:该网络已重组为Libera.Chat)也能找到活人。对于想理解Plan 9"一切皆文件"和"命名空间"概念的人来说,这比读十篇论文都管用。
Plan 9从未成为主流,但它的设计思想渗透进了现代系统:Linux的/proc和/sys、Docker的命名空间、甚至Kubernetes的Pod概念,都能找到9P协议和"资源即文件"的影子。用一台OpenBSD复现这套30年前的网络架构,像是在自家车库组装一台蒸汽机车——不实用,但能摸清楚机械时代的工程智慧。
你有多久没用过软盘启动操作系统了?
热门跟贴