所有我的伺服器都是在 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