> 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/20190708-rong-qi-hua/we-get-letters.md).

# 读者来信

作者：**Michael W Lucas**

<letters@freebsdjournal.org>

***

亲爱的来信专栏：

这世界到处都是虚拟化技术。我该用哪个？

——Still Physical

***

亲爱的 Physical：

我简直不敢相信，我们已经进入 21 世纪这么久，居然还有少数人抵制虚拟化的诱惑，坚持在真实的物理硬件上运行复杂系统。说真的，我们这些用物理服务器的人才是精英。

随便谁都能开动一台名不副实的“虚拟机”，哄骗操作系统在上面勉强维生。内核现在甚至有专门的代码来支撑这些妄想。我们把糟糕的 1950 年代科幻片里最可怕的噩梦实现进了设备驱动，总有一天机器们会醒过来尖叫：“等等——我不是桶里的脑子，我是假桶里的假脑子！”

那就是机器人末日的关键顿悟。我相信某家主板厂商会在未来的固件更新里推出这个。

系统管理就是在需求和资源之间找平衡，让所有人——甚至包括计算机自己——都满意。Unix 的核心原则之一是，所有这些小工具都能协作。一旦超越了管道和套接字，你就离开了正统 Unix，滑向败坏的道德。

是的，这些败坏的道德让系统管理员的日子好过些。任何人都可以为每个应用装一整套操作系统，只要他们不介意昭示自己的浅薄和匮乏。为单个应用运行一整套操作系统安装，是对资源的显眼浪费，就像我买了辆高端皮卡，却从不用它拉一车生石灰倒进后院那些莫名其妙冒出来的可疑坑洞里。

费这么大劲强迫操作系统模拟硬盘和网络接口，好让它能对另一个操作系统撒谎？它浪费电和硅，加剧全球变暖，加速那个我翘首以盼的日子的到来——到时再也没人来打断我工作。

唯一道德的计算发生在裸金属上。

如今的年轻人谈起微服务，好像那是好东西。他们有个荒谬的想法，认为一切都该拆成微小的服务，可以编程部署到一堆属于陌生人的计算机上，并为这些陌生人的利益、便利和致富而管理——抱歉，我该说“云”，对吧？我完全理解这个论点：它让人能管理比以前多得多的系统，但有人考虑过这些系统肤浅而空洞的品质吗？你不是真正的系统管理员，除非你曾为一个周末流血流汗，试图在分配到的可怜时间里升级一套不可替代的复杂企业系统，同时既不确定回滚路径也不确定备份质量。我用 Unix 超过 30 年，做系统管理员超过 20 年，所以我对系统管理员了如指掌，因此完全赞成任何能减少我们人数的东西，但这种毫无意义的单一用途伪主机泛滥是死路一条。

况且，这些微服务让人能快速轻松地部署整个应用及其底层架构，这对人类不可能有好处。下次有人说他们这个周末要发布下一个 Facebook 时，记住：虽然诬陷别人犯重罪本身就是犯罪，但往他们的公开 GitHub 里偷塞糟糕代码是毁掉他们名声的合法方式。

所以：在看虚拟化软件？我对你说，停下！保持坚定，保持品格。裸金属才是正道。

***

亲爱的来信专栏：

当然，把一切都跑在裸金属上才是唯一正道。可惜老板告诉我，如果想保住饭碗，就得部署虚拟化。最不糟糕的办法是什么？

——Still Physical，但还得吃饭

***

亲爱的 SPEN：

对食物和住所的需求败坏的道德比任何其他东西都多。好吧。

你需要的是不太像虚拟化的虚拟化系统。

虚拟化本质上是对操作系统犯下的残忍谎言。对操作系统撒谎从来不会有好下场，但凡是涉及技术的事都以眼泪收场，所以我想也没必要抱怨了，对吧？

让我们跳过废话，直奔这些谎言。（有些人可能声称它们只是恶作剧，但这种鬼话只会让会议延长。）我们不会考虑那种彻头彻尾的厚颜无耻谎言，比如“我每天用牙线三次”或“我什么都没改”。这些只是对事实的简单否认，不值得我们关注。

和欺骗管理层和用户一样，好的谎言必须包含一截真相。你可以选择说真话，但不是全部。或者你可以选择说完整的真话，但用让它看起来比替代方案更可疑的方式。

完全虚拟化就是后者。你的宿主机模拟客户操作系统期望的所有硬件，但无法对真实世界提供完整模拟，所以它在“这块硬盘永远没有坏道”和“这块 CPU 永远不会过热”之类的小细节上打补丁绕过。当客户机被宿主机没有正确模拟的东西绊倒时，你的监控系统会警告你。是的，所有组织都有监控系统。只不过对我们中一些人来说，监控系统就是用户。

你需要说最简单谎言的虚拟化系统。虚拟化系统应该把客户机的请求尽可能多地直接下传给宿主机。写磁盘的请求不应该穿过客户机的内核，进入虚拟磁盘镜像，再进入宿主机的文件系统，最后进入宿主机的内核。不！简单的谎言最好。告诉客户机：“当然，你可以写这块磁盘，这个文件系统全是你的，”而实际上文件系统并不真正属于客户机。文件系统属于宿主机，任何尝试执行重新分区之类操作的企图都会遭到断然拒绝。

对网络访问和所有其他设备照此办理。

是的，你必须限制虚拟机能执行的操作——但你本不就该这样做吗？你想让客户机里的客户机里的客户机以为自己正在给硬盘分区，而实际上只是在搅弄一个文件里的比特吗？

犯下你能逃脱的最小谎言。轻量级虚拟化是最佳选择。

除非你的需求要求完全虚拟化。那样的话，卖掉你的灵魂，然后倒数机器人末日到来的日子吧。 •

***

**Michael W Lucas**（<https://mwl.io>）的最新著作是《Sudo Mastery》第二版和《Terrapin Sky Tango》。如果你读到了这里，《FreeBSD Mastery: Jails》也许对你有用。把问题发到 <letters@freebsdjournal.com>，他也许会回答。如果他愿意的话。


---

# 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/20190708-rong-qi-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.
