我喜欢虚拟机!它们是一台电脑,在我的电脑里。他们让我修补、测试和构建东西,然后把它们扔掉并从头开始。我们甚至可以在计算机上运行不同的架构,尽管会带来性能损失。我们可以从头开始模拟整个机器,或者使用虚拟机管理程序来公开主机的底层虚拟化支持来制作迷你机器。我对虚拟机的热爱让我找到了现在的工作。虚拟机!他们太棒了!
但我开始使用虚拟机是出于……等等……怀旧之情。 1999 年,我在圣诞节买了一台 iMac DV,其中附带了一份 Connectix Virtual PC。尽管我的办公桌上有一台功能完美的 HP PC,但我还是使用 Mac 修补了 DOS、OS/2、x86 版本的 BeOS 和 Windows for Workgroups,因为 Virtual PC 非常有趣。它不是第一个桌面虚拟化软件包,但它是我尝试的第一个使整个领域变得易于修补的人。由于该软件,我需要第一次升级硬盘,我确信我的父母对此感到兴奋。
不管怎样,抛开漫无边际的介绍不谈,我对这项技术的热爱一直持续到今天。我在家中使用 Xen 运行 NetBSD 服务器,使用 bhyve 运行 FreeBSD。直到最近,在 Broadcom 推出之前,我还使用了 VMware ESXi 来保持我的最新技能。即使是 FreeBSD 的监狱也能在一定程度上解决像 Docker 这样的工具所无法做到的问题。可能有一篇关于此的文章等待撰写。
在我的 Mac 笔记本电脑上,至少从 2006 年开始,我就有了一系列不同的模拟器和虚拟机管理程序来运行我关心的所有东西。这些虚拟机的一些磁盘映像比运行它们的主机更旧,并且已经在计算机之间传输多年。其中一些比我第一次制作虚拟机时所模拟的计算机还要老,这想想就很荒谬。
但是,虽然我多年来一直采用严格且结构化的方法来处理服务器虚拟机(这在很大程度上要归功于 OpenZFS 的威力),但我处理桌面虚拟机的方法始终是一团糟。在过去的几年里,我停止在我的逆向计算机和小型虚拟机上使用图形工具,而是直接为 QEMU、86box 等编写脚本和配置。但这些都被混合到一个包含磁盘映像和配置的无定形文件夹中。我总是不知道什么磁盘映像与什么、当前的配置是什么以及需要调用什么脚本。至于驱动盘和其他晦涩难懂的注释?好吧。
对于世界各地的工程师来说,这肯定是最痛苦、最明显的解决方案,我为这些虚拟机创建了一个小结构,并对启动脚本进行了标准化!它看起来像这样:
. ├── 86box Commodore PC 30 III │ ├── config.cfg │ ├── disks/ │ ├── docs/ │ ├── hdd.img │ └── launch.sh [...] ├── QEMU NetBSD sparc64 │ ├── disks/ │ ├── docs/ │ ├── hdd.img │ └── launch.sh [...] └── launch.sh
每个虚拟机都有自己的目录,其中包含所选模拟器的配置文件、用于安装映像或驱动程序的磁盘文件夹、用于 PDF 和与其相关的注释的文档文件夹、一个或多个启动磁盘映像以及具有一致名称的启动脚本。启动脚本调用适当的模拟器,或者使用类似于 QMEU 的标志之类的命令,或者引用 86box 的配置文件。最后,根启动脚本仅按名称列出目录,因此我可以启动它们的启动脚本。
将安装媒体、文档和启动脚本包含在像这样的小包中,对于收集我对这些东西的想法和学习非常重要,而不必在其他地方查看我的笔记,或者记住我在庞大的存档中下载的特定驱动程序是合适的。我的下一个愚蠢的扩展是单独拥有一个安装媒体文件夹,并使用符号链接。
反正!这个故事有点像毛茸茸的狗的故事,但很有趣。事实证明,组织起来很有用,不知道。
作者: Ruben Schade ,悉尼,2025 年 3 月 22 日。