所有我的伺服器都是在 VMware Worstation 虚拟机器上运行。虚拟机器的优点是管理简单及容易恢复到先前的快照,这些对开发中的系统相当有用。

部份我的虚拟机器必须在实体电脑开机中随时一起运行。VMware Workstation 提供了一个 AutoStart 功能,它允许共享的虚拟机器在实体主机启动时,自动被启动。然而,那内建的 AutoStart 功能本身有些限制,对我的状况一点用也没有。

AutoStart 有何毛病?

VMware Workstation 所制作的 AutoStart 功能有两个重大问题,让我必须找寻另外的解决方案:

  1. 只有共享的虚拟机器能被自动启动。这本身并不构成问题。你只需先将你的虚拟机器设为共享,再设定 AutoStart 即可。但是共享虚拟机器受到一些限制,其中一个是你不能在共享虚拟机器上使用实体磁碟。因为我有一个虚拟机用到实体磁碟,它不能被设成共享,也就不能 AutoStart。
  2. 当我注意到每次在 实体主机重新起到后,一个 AutoStart 虚拟机器上的 MySQL 就需要修复资料库,我发现到另一个问题。我本以为 AutoStart 功能也会在实体主机关机或重新启动时,自动将虚拟机器关机/暂停。很明显地,我想错了。该功能只做它名称所宣称的,也就是自动启动虚拟机器而已。对我来说,允许可能的资料损失是无法接受的。

一个自动启动/停止虚拟机器的替代方式

在此我将提出一份脚本程式与步骤,来让含有实体磁碟的虚拟机器,在实体主机启动时跟着自动启动,在实体主机关机时也暂停/关机。并且,所有需要的软体均已经和 VMware Workstation 一同安装,或已经存在于 Windows 7 Home Premium 系统中。

我是用 PowerShell 来撰写这脚本程式。使用 PowerShell 并无特殊原因,只是好玩才用它,我也并非很会 PowerShell。欢迎你修改它,让它更好。至于控制虚拟机器,我用的是VMware Workstation 中的 'vmrun.exe' 程式。

一旦有了可用的脚本程式,我需要能够在实体主机启动与关机时执行它。于 Windows 7 系统上,大概有三种方式可达成它。然而,我发觉使用 Task Scheduler 也许是最简易也是普及的方法。

接着,我设定好虚拟机器来让我的自动启动/停止缴本程式来处理,并在实体主机上测试。最后我有了令人满意的方式来让我的虚拟机器自动启动和暂停。

FaLang translation system by Faboba