> For the complete documentation index, see [llms.txt](https://freebsd-journal-cn.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freebsd-journal-cn.bsdcn.org/20241112-xu-ni-hua/we-get-letters.md).

# 读者来信

* 原文链接：[We Get Letters](https://freebsdfoundation.org/our-work/journal/browser-based-edition/virtualization-2/we-get-letters/)
* 作者：Michael W Lucas

![mailbox graphic](/files/iRET8LKbUuennlGDl5gt)

亲爱的 Letters 专栏主：

每天都有人发明新类型的虚拟化，或者把它搞得更复杂。全虚拟化、轻量虚拟化、容器、ABI 兼容性，没完没了。这什么时候是个头？我怎样才能跑到它前头？

——每天都在虚拟化赛跑中领先

附：本 *期刊* 的这专栏有新人了吗，还是说我会收到一篇毫无用处的吐槽？

亲爱的 RAVED：

认为我吐槽无用的人，准是 IT 新手。等你受的创伤让你形成条件反射，你就会懂。再等一周吧。

商学院教授 “跑到趋势前头” 的重要性。这话对系统管理员完全不适用。我们不仅本身就是趋势，还把业余时间用来设想怎么让趋势更陡峭、更时髦。

我们不断自欺欺人地以为能让事情变得更好，其实只能让它换一种方式变糟。

服务器只有一块硬盘？那就做镜像，或者上 RAID-5，或者用光纤通道甩到 NAS 上，让它变成别人的麻烦。臃肿软件跑得慢？那就裁剪程序，或者加内存，或者装一块快速缓存盘。宇宙射线导致文件系统损坏？用 copies=99 的 zraid3 阵列就能搞定！每一项 “改进” 都会引入新的故障模式。即便是资深系统管理员——他们骨子里深知《系统管理员守则第 16 条》（*改进的冲动是导致故障的首要原因*）——也躲不过这个陷阱。

虚拟化不过是这一点的又一表现罢了。

这并非新鲜事。还记得 chroot 吗？互联网从一个私有教育网络变成私营企业盘根错节的丛林时，许多核心软件被发现存在严重的安全问题。私有互联网时代没人想毁掉这张私有网络，可一旦公开，世上就有一小撮人喜欢把好端端的东西付之一炬。（看看今天的互联网，我不禁怀疑当年某些早期攻击者其实是穿越回来的时间旅行者，回去把我们从自己手中救出来。）如果某个程序存在 shell 逃逸漏洞，你可以从只包含该程序所需文件的目录里运行它。要是根本没有可逃逸的 shell，何谈 shell 逃逸！这既是个巧妙的 hack，也是 “解决错误问题” 的绝佳范例。

FreeBSD 的 jail 最初被构想为加强版 chroot。如果把那个被锁定的目录给它一个 IP 地址和它自己的进程空间，会怎样？它看起来就像完整的系统，却完全容纳在另一个系统之内！我们甚至可以让这个超级 chroot 拥有运行自己的子超级 chroot 的能力！它优雅、漂亮，又足够复杂，不仅会引发故障，还会引发你从未体验过的、刺激的全新故障模式。

不过 jail 爱好者们有好消息！你用 jail 多半是为了某个特定任务。它只需要基本系统的一小部分，而非完整的用户态。OccamBSD 就很实用，让你只安装必要的系统组件。jail 当年是 chroot 的进步，如今 chroot 反过来成了对 jail 的改进！

改进的冲动。

再说 Linuxulator。你可以拿一台 FreeBSD 系统让它跑 Linux 程序。Linux 毕竟只是个内核。把最不让你反感的 Linux 用户态装进某个目录，把你的程序 chroot 进去，当成 Linux 系统来跑。这样省得多装一台服务器专门跑 Linux——毕竟（实话实说）谁愿意跑一个没有 ZFS 和 PF 的 Unix？许多开发者把 Linuxulator 当作把 Linux 软件移植到 FreeBSD 的中间步骤。轻松的胜利，对吧？

当然。Linux 模式与 Linux “几乎完全兼容”。“几乎完全兼容” 就像 “几乎没麻风病”——对你身体好，但我可不碰。我去舔犰狳还更安全些。

不过这还不够。我们想进一步优化虚拟化，于是加入了 unionfs 和 base jail。优化！全然不顾如今磁盘空间如汪洋大海。是，你的大数据应用要存储阵列，但一块 NVMe 盘能塞下数千个操作系统安装，还能用一个简单脚本全升级。或者用布局最优的 base jail 把 “唯一真 jail” 用一个简单脚本升级，再用另一个简单脚本遍历所有 OS 安装并各自打补丁。没人愿意直面真正的问题——设计出不需要升级的系统——因为这会让整个计算机行业关门大吉，到时候谁来毒害地球？

重度虚拟化？bhyve、qemu、libvirt，全都是？不过是加了 CPU、进程和文件系统隔离的超级 jail。更安全？安全专家常说 “今天又是一种 hypervisor 逃逸”，这话可不只是说说。

虚拟化给无穷无尽的 “非寻常失败”，乃至 “惨败” 提供了机会。复杂互联系统纠缠不清，交互呈指数级攀升，攀升到那个由你颅内那团微微通电的布丁所无法处理的数字。你是系统管理员。你会坐下来冥想这些系统可能如何失效。有些失效模式显而易见：火灾、洪水、饥荒。有些不那么明显：万一 System V IPC 通信在两个特定 jail 之间泄漏，把公司机密泄到世上呢？再想想，这个借口先留着——等你决定举报你不道德的雇主时，会派上用场。怎么，你说他们道德？那他们赚的钱怎么够付你工资？别担心，等到捂不住的时候，你就准备好泄密了。

显而易见的 “问题” 当然是：现代硬件对大多数任务来说性能过剩到离谱。我租了一台小型专用服务器。它跑 jail 和 bhyve 虚拟机。我跑的最吃资源的应用是我自己的邮件服务器。邮件本身耗资源不多，但 rspamd 会把你给它的一切都吞掉。硬件大部分时间闲着，于是我不停往上堆功能。因为它就在那儿。何不试着让事情好一点，物尽其用？

计算能力过剩，从任何合理意义上看都不是问题。可我还是干了。

那么：跑到趋势前头？你是说跑到这一团噩梦般的优化纠缠前头？

是的，确实有办法 “跑到趋势前头”。

更快地失败。

祝好运。我对你有信心。

想向 Michael 提问？ 请发送至 <letters@freebsdjournal.org>

Michael W Lucas 的最新著作包括《Dear Abyss》（本专栏合集）、《Run Your Own Mail Server》和《Apocalypse Moi》。更多见 <https://mwl.io>。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://freebsd-journal-cn.bsdcn.org/20241112-xu-ni-hua/we-get-letters.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
