Virtualbox有個問題,就是即使是相同用戶啟動,如果用戶session不一樣,那么還是會看到不同的啟動結果,不能相互管理不同session啟動的虛擬機(via)。這就杯具了啊,有時候,啟動幾個虛擬機,但是其中有一個死機了,要從主機的任務管理器里結束進程,我咋知道應該結束哪個???
還有一個問題,就是網(wǎng)絡默認是NAT,很靈活也很方便,端口轉(zhuǎn)發(fā)很實用。但是有一個致命傷,就是大流量多連接情況下,容易導致內(nèi)存溢出,虛擬機斷網(wǎng),甚至進程崩潰等問題。
我看到最近幾個更新的changelog有改善NAT的問題,所以卸載了原來的Virualbox,重啟,安裝新版,重啟。然后打開虛擬機,卸載Virtualbox Guest Addtion,重啟,安裝新版,重啟。至此,由外到里更新完畢。
然后,開始正式的配置。
同步全局的Virtualbox設置
我們知道,默認的Virtualbox設置是因用戶而異的,一般存放在“C:\Documents and Settings\用戶名\.Virtualbox”文件夾中。我們可以設定一下,使設置文件統(tǒng)一存放:新建“VBOX_USER_HOME”變量,里面填入設置存放的目錄即可。
虛擬機以服務形式啟動(via)
下載srvstart,編輯下面內(nèi)容存為srvstart.ini,比如保存在D盤根目錄下:
env=VBOXHEADLESS="C:\Program Files\Oracle\VirtualBox\vboxheadless.exe"
env=VBOXMANAGE="C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"debug=0
debug_out=>D:\soft\vbox\srvstart.logwait_time=60
[Win2003]
startup=%VBOXHEADLESS% -startvm Win2003
shutdown_method=command
shutdown=%VBOXMANAGE% controlvm Win2003 poweroff[VMWinXP]
startup=%VBOXHEADLESS% -startvm WinXP
shutdown_method=command
shutdown=%VBOXMANAGE% controlvm WinXP poweroff
然后運行下面命令即可安裝里面的WinXP為系統(tǒng)服務VMWinXP:
srvstart install_desktop VMWinXP -c d:\srvstart.ini
類似的,安裝里面的Win2003為系統(tǒng)服務則是:
srvstart install_desktop Win2003 -c d:\srvstart.ini
當然,可以用系統(tǒng)命令sc創(chuàng)建系統(tǒng)服務,不過要注意兩點:
WEB管理Virtualbox:
由于相同用戶不同session也會導致虛擬機狀態(tài)不同步,而且啟動服務需要開啟桌面互動,所以我們只能用默認的本地服務(Local Service)身份來啟動服務。而Virtualbox的web service默認的驗證方式是用戶驗證,所以我們要先把驗證取消:
VBoxManage setproperty websrvauthlibrary null
然后設置Virtualbox的web api為服務,還是使用srvstart工具。我們先編輯剛剛的srvstart.ini,在末尾加上:
[VboxWebSrv]
startup=%VBOX_INSTALL_PATH%\VboxWebSrv –threads=20
shutdown_method=kill
并安裝其為“VboxWebSrv”服務:
srvstart install_desktop VboxWebSrv -c d:\srvstart.ini
然后到SVN“phpvirtualbox”項目的源碼,它是Virtualbox的WEB GUI。像安裝PHP程序一樣安裝。注意要SOAP擴展,以及把config.php的用戶名和密碼置空。
啟動“VboxWebSrv”服務,訪問你剛剛安裝的“phpvirtualbox”,應該看到了正常的仿真Virtualbox面板。怎么樣,可以通過web控制了吧。最重要的是,解決了不同session的虛擬機有不同狀態(tài)的問題。
要注意兩點:
NAT環(huán)境下的端口映射和端口轉(zhuǎn)發(fā)(via)
VBoxManage modifyvm "VM name" –natpf1 "guestssh,tcp,host ip,2222, guest ip,22"
命令解釋:
跟之前的一樣,我們可以看到熟悉的VBoxManage的身影。緊隨其后的是 modifyvm ,跟之前版本的命令不一樣。然后就是“VM NAME”虛擬機名稱,將其替換成相應的虛擬機名稱就可以了。接著就是重點部分了,NAT端口映射的參數(shù)。
1.natpf1 我們可以很容易理解這個參數(shù),natpf即 nat port forwarding的縮寫。后面緊接著的是虛擬機設置中相應網(wǎng)卡的數(shù)字,如果你的網(wǎng)卡是第一個,則為1。
2.natpf后的參數(shù)
(1)guestssh 是這個端口映射的名字,自行修改成容易理解的名稱吧,如果填則系統(tǒng)會自動生成。
(2)tcp (or udp) 是映射的協(xié)議。
(3)host ip 則是你的主機的IP地址,如不填寫則映射到主機中的所有IP地址上的相應端口。
(4)2222(host port) 主機端口,自選吧。
(5)guest ip 虛擬機中的IP地址,很明顯,不填寫則映射到虛擬機中的所有IP地址上的相應端口。
(6)22(guest port)虛擬機端口,自選+1。
如果要刪除端口映射,只需要輸入以下命令:
VBoxManage modifyvm "VM name" –natpf1 delete "guestssh"
清理壓縮Virtualbox磁盤鏡像
可以使用VBoxManage命令中的modifyhd的compact參數(shù)解決。Windows虛擬機可以使用微軟官方的SDelete工具來清理磁盤。