顯示具有 VirtualBox 標籤的文章。 顯示所有文章
顯示具有 VirtualBox 標籤的文章。 顯示所有文章

2011年5月29日 星期日

change vdi UUID

如果你想改變vbox裡某個vdi的uuid檔,你會發現vbox會出現uuid衝突而無法直接使用,這種情形最常發生在更改了vdi檔名然後想重新安裝os。在google上找更改uuid的方法,其參數似乎已經不適用,4.0.x以上的版本應該改用sethduuid參數而不是舊的setvdiuuid。

我寫了一個shell script方便自己更改vdi的uuid:

  1. #!/bin/bash
  2. #############################################################
  3. # Filename: changeVDIuuid.sh
  4. # Date: 2011/05/29
  5. # Purpose: change uuid of vdi file
  6. # Usage:
  7. #
  8. # Description:
  9. # Author: maxsolar(Jim T. Tang@IES, Academia Sinica)
  10. #############################################################
  11.  
  12. ###########################
  13. ## pre-defined variables
  14. ###########################
  15. [ "$1" == "" ] && {
  16.     ls *vdi
  17.     read -p "please specify a vdi file: " vdi
  18.     [ -e "$vdi" ] && {
  19.         VBoxManage internalcommands sethduuid $vdi
  20.     } || {
  21.         echo "$vdi doesn't exist. program terminated."
  22.     }
  23. } || {
  24.     [ -e "$1" ] && {
  25.         VBoxManage internalcommands sethduuid $1
  26.     } || {
  27.         echo "$1 doesn't exist. program terminated."
  28.     }
  29. }

2011年1月3日 星期一

Shared folders on Virtualbox

Virtualbox終於邁入4.0了!這個版本比先前3.2.x的版本多了比較視覺化的功能,也開始支援guest MacOSX了!對於USB 2.0的支援變成需要下載額外套件來安裝才行。令我印象比較深刻的是 4.0在shared folders多了automatic mounting的功能,可以讓她自動掛載在/mnt(Solaris)或是/media(Linux)上,對於許多linux不熟的下一步工程師而言,這可是個美好的功能。 本文的目的也是為了紀錄做一個guest端automatic mounting的筆記,只不過我希望透過寫在/etc/fstab裡使其開機可以掛載。我堅信唯有透過撰寫設定檔,才能增加對於該功能的了解。

在shared folders的設定裡有兩個選項:Read-only跟Auto-mount。使用automatic mounting需注意使用者必須有加入vboxsf群組才行。
在Linux guests裡,auto-mount會掛載在/media底下,並且以sf_開頭。舉例來說,一個名稱為DATA的共享資料夾,在Linux裡掛載到/media/sf_DATA,在Solaris上掛載到/mnt/sf_DATA, 在windows裡則會自動多一個磁碟機。

手動或許是一個更好的方法,因為我希望他掛載在我指定的位置上。假設在Linux跟Solaris上使用者的uid=gid=1000,且我想分享的資料夾名稱是MacOSX:

  1. For Solaris guests:
  2. pfexec mount -F vboxfs -o uid=1000,gid=1000 MacOSX /export/home/maxsolar/MacOSX
  3. For Linux guests:
  4. mount -t vboxsf -o uid=1000,gid=1000 MacOSX /home/maxsolar/MacOSX
  5. For Windows guests:
  6. net use Z: \\vboxsvr\MacOSX
三種作業系統所定義的filesystem名稱都不一樣阿,特別是Solaris跟Linux特別容易敲錯,需要小心。

如果寫成設定檔使其開機時就可以自動掛載的情形又是如何呢?

  1. For Linux guests:
  2. 修改/etc/fstab,並新增一行:
    MacOSX /home/maxsolar/MacOSX vboxsf uid=1000,gid=1000 0 0
  3. For Solaris guests:
  4. 修改/etc/vfstab,並新增一行:
    MacOSX - /export/home/maxsolar/MacOSX  vboxfs - yes uid=1000,gid=1000
    Solaris的vfstab相當於Linux的fstab,但是格式有所不同,這七個欄位分別是:
    Device to mount, Device to fsck, Mount point, FS type, Fsck pass, Mount at boot, Options
    但是開機的時候卻會失敗。我找到了Jim Laurent的部落格, 發現他找到了問題所在:Solaris先處理vfstab這個檔案之後才掛載/export底下的ZFS檔案系統,因此把掛載點改成其他非/export的目錄即可成功開機,例如上例需改成:
    MacOSX - /MacOSX  vboxfs - yes uid=1000,gid=1000
    就可以成功開機。不過我還是不喜歡這種感覺,我討厭被限制!幸好Unix/Linux為了達到目的可以有多種方法,我可以新增一個session讓他登入的時候執行,也可以寫在開機之後的script裡。 最簡單的方式就是寫在login shell裡吧!新增一行到/etc/profile裡就可以達到相同目的:
    pfexec mount -F vboxfs -o uid=1000,gid=1000 MacOSX /export/home/maxsolar/MacOSX
  5. For Windows guests:
  6. 什麼事也不用做,輸入net use那行指令就可以永遠使用該磁碟機當作掛載目錄。

這個版本允許使用者建立Mac OS X的虛擬機器耶!只是不知道在guest Mac OS X下該如何設定,即使官方網站的End-user document也沒有寫。不過如果是以上三個作業系統,他的詳細設定則可以從shared folders頁面找到更多詳細設定。

2009年9月15日 星期二

VirtualBox guest OS USB啟用筆記

雖然用了VirtualBox這麼多年,但是卻是頭一次這麼認真的看待這個嚴肅的題目:如何讓guest OS能夠順利讀到USB介面呢?雖然VirtualBox推出新版本的速度非常快,但是至今仍然沒有任何一個版本是可以不用任何設定就可以讓guest直接讀取USB設備的(MacOSX版除外);如果用的是OSE版本,那可是連USB的支援都沒有!!

由於我只有實體的Debian Lenny、Ubuntu 9.04跟OpenSuSE 11.1,因此這裡只紀錄Debian跟OpenSuSE的解決方法。

Debian下非常簡單,首先必須確定你的帳號有在vboxusers裡面。如果沒有的話,請加入到vboxusers裡面,重新登入就可以了。

萬一重新登入還是沒辦法啟用usb,也別著急,只要控制debian下統一控制mount的script就好。首先我們要先找出USB裝置的gid:

cat /etc/group | grep plug
會得到

這個46便是我們所要記下的gid。

接下來請修改/etc/init.d/mountkernfs.sh,找到domount關鍵字,在其下新增一行如下:

domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev,devgid=46,devmod=664
請重新開機,不用修改fstab跟usbfs就可以正常使用usb on guest OS。

OpenSuSE則稍微麻煩一點。SuSE系列的linux沒有usb或是plugdev這類的群組,而是全數交由udev統一控管;想要啟用USB on Virtualbox,該怎麼辦呢?
我們檢視一下/etc/udev/rules.d/10-vboxdrv.rules的內容,可以發現要使用virtualbox的usb,得從vboxusers這個群組下手,而非UserManual上所說的usb群組。

cat /etc/group | grep vbox
會得到

可以得知vboxusers的gid是1001,且我是屬於這個群組裡的一員(這很重要)。

請接著修改/etc/fstab,新增一行:

none /proc/bus/usb usbfs devgid=1001,devmode=664 0 0
許多討論串都只說到這裡,但是筆者無論如何嘗試,但是guest OS就是無法存取usb裝置。很幸運的參考了這個討論串,似乎同時是VirtualBox的開發人員consused建議我們可以在加一個NAME參數到/etc/udev/rules.d/10-vboxdrv.rules
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600" SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"
變成
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600" SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664" SUBSYSTEM=="usb", NAME="vbusb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"

請重新開機!這樣你的Guest OS應該就可以讀得到你的USB裝置了!

2009年1月19日 星期一

VirtualBox on OpenSuSE 11.1

今天下了一個決定。每次都只能在辦公室的xp上跑虛擬的linux,我覺得實在是很不過癮;一來是使用windows的時間跟機會本來就比較少,二來是沒有出現特效感覺怪怪的,因此檢查了一下硬碟空間的大小後,我決定把一部分的磁區用來安裝linux,再裝個虛擬的xp來跑非windows不可的程式。

我選了opensuse。在我先前的經驗裡面,OpenSuSE 11.0極不穩定,圖形跑一半會突然當機,還有許多大大小小的bugs。於是當時的我對opensuse 11.0的感覺是:除非真的很愛opensuse,否則這是一個白老鼠的版本。事實上我的經驗中,opensuse 10.1, 10.3都是很穩定的版本,似乎OpenSuSE的奇數版本號都是相對穩定的版本。然而這次已經出現了11.1,我除了期望可以有一個穩定的opensuse之外,好歹我也是個NCLP,對於suse linux也算是有一定程度的熟悉;因此我決定改用第二熟悉的linux:OpenSuSE 11.1。

在OpenSuSE上安裝VirtualBox基本上需要安裝pam, kernel headers, make以及gcc以供編譯適合kernel的模組。我的OpenSuSE裡的repos定義了6個,這些repos設定檔放在/etc/zypp/repos.d/裡:

repo-oss.repo
--------------------------------
[repo-oss]
name=openSUSE-11.1-Oss
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/distribution/11.1/repo/oss/
type=yast2
keeppackages=0
-------------------------------

repo-non-oss.repo
-------------------------------
[repo-non-oss]
name=openSUSE-11.1-Non-Oss
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/distribution/11.1/repo/non-oss/
type=yast2
keeppackages=0
--------------------------------

repo-update.repo
--------------------------------
[repo-update]
name=openSUSE-11.1-Update
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/update/11.1/
type=rpm-md
keeppackages=0
--------------------------------

swyear.repo
--------------------------------
[swyear]
name=swyear
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/home:/swyear/openSUSE_11.1/
path=/
type=rpm-md
--------------------------------

packman.repo
--------------------------------
[Packman Repository]
name=Packman Repository
enabled=1
autorefresh=1
baseurl=http://packman.mirrors.skynet.be/pub/packman/suse/11.1
type=rpm-md
keeppackages=0
--------------------------------

utility.repo
--------------------------------
[utility]
name=utility
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/network:/utilities/openSUSE_11.1
path=/
type=rpm-md
keeppackages=0
-------------------------------

anubisg.repo
-------------------------------
[anubisg]
name=anubisg
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/home:/anubisg1/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
-------------------------------

JAVA.repo
-------------------------------
[JAVA]
name=JAVA
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/Java:/packages/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
-------------------------------

multimedia.repo
------------------------------
[multimedia]
name=multimedia
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/multimedia:/audio/openSUSE_11.1/
type=rpm-md
keeppackages=0
------------------------------

當然以上以可以用yast來作,而且我很建議用yast來作;一方面可以體會yast強大的能力,一方面可以方便你匯入gpg keys。 匯入之後,我的習慣是先讓整個系統升級:
zypper ref
#更新repositories的cache
zypper update --auto-agree-with-licenses
#進行更新

接下來,我們先安裝一些VirtualBox所需要的套件:
zypper in pam-devel kernel-source make gcc lsb
#kernel-headers在suse/redhat系列的套件 都稱之為kernel-source,名稱不同,但是是一樣的東西。

然後我們下載最新版的VirtualBox(2.1.0)來安裝:

rpm -ivh --test VirtualBox-2.1.0_41146_openSUSE111-1.i586.rpm
沒有錯誤的話,我們再真正進行安裝:
yast2 --install VirtualBox-2.1.0_41146_openSUSE111-1.i586.rpm
## 例外狀況處理 ##
1. 我自己用到的情況是,OpenSuSE 11.1的函式庫太新了,當我某天更新完之後發現,原本安裝好的VirtualBox又無法開啟了。這時候我重新安裝竟然出現錯誤訊息: 查查看我的系統是否有安裝libpython2.5以上的版本:
zypper se libpython
結果訊息是:
S | Name             | Summary                           | Type
--+------------------+-----------------------------------+--------
i | libpython2_6-1_0 | Python Interpreter shared library | package
原來我們的版本比要求的還新!@@竟然是因為這樣不給裝,真的很討厭。這個問題在opensuse的論壇上已經是哀鴻片野,解決的方式有兩種:第一種方法就是硬裝:
rpm -ivh --nodeps VirtualBox-2.1.0_41146_openSUSE11-1.i586.rpm
很高興的把virtualbox安裝起來了。第二種方法,請詳見本文最後面。

2.不過當你要啟動VBox時還是會失敗,他會告訴你某個virtualbox函式Permission Denied的錯誤訊息。請你把自己加入vboxusers群組:

usermod -A vboxusers maxsolar
記得要重新登入,就可以正常出現VBox了!

3.如果你執行VirtualBox卻沒反應,在終端機輸入VirtualBox卻出現如下訊息:

/usr/bin/VirtualBox: line 72: /usr/lib/virtualbox/VirtualBox: Permission denied
/usr/bin/VirtualBox: line 72: exec: /usr/lib/virtualbox/VirtualBox: cannot execute: Success
但是,由root執行VirtualBox卻可以成功執行。看看到底是甚麼權限問題:
ls -l /usr/lib/virtualbox/VirtualBox
原來,有了suid,卻少了執行的權限。
chmod +x /usr/lib/virtualbox/VirtualBox
就可以成功啟動執行。

4.或者你遇到的問題是:

WARNING: The vboxdrv kernel module is not loaded. Either there is no module
      available for the current kernel (2.6.27.7-9-default) or it failed to
      load. Please recompile the kernel module and install it by

        sudo /etc/init.d/vboxdrv setup

      You will not be able to start VMs until this problem is fixed.
那麼依照指示,你應該重編一個virtualbox的模組:
/etc/init.d/vboxdrv setup

5.打開vbox後赫然發現,事情似乎沒有想像中順利: 查詢google大神的結果,我們似乎可以藉由修改fstab來解決:

/sys/bus/usb/drivers /proc/bus/usb usbfs devmod=664,devgid=1000 0 0
其中的devgid可別照抄!你應該利用id指令來查看自己的gid。 然後手動掛載:
sudo mount /proc/bus/usb
或是重開機以使設定生效。結果令人驚喜,usb設備無法存取的狀況解決了!

6.不過當我們對guest進行設定時,又出現了一個錯誤訊息: 怎會如此屋漏偏逢連夜雨呢?別擔心,問題的解決必須要靠詳細觀察。訊息上提示我們有存取/dev/sr0上的問題。sr0就是光碟機,許多套linux在啟動nero linux時也會出現相同的問題。我們看看/dev/sr0的權限設定: 可以發現光碟機可以存取的是root以及disk群組。可惜我們並不在disk群組。解決的方法很多,你可以利用groupmod -A maxsolar disk把自己加進disk群組裡(也可以直接修改/etc/group)、也可以利用chmod 666 /dev/sr0直接改變others權限。不過我個人並不建議上述作法。 我們可以發現權限後面有一個"+"號,這表示這個檔案具有Access Control List的權限,我們透過setfacl來解決問題才是最恰當的。首先,我們先檢視一下acl裡的權限:

sudo getfacl /dev/sr0
由圖中可以發現user可以給出的最高權限為rw,gdm使用者也是rw。我們也來給使用者maxsolar一個rw的權限吧!
sudo setfacl -m u:maxsolar:rw /dev/sr0
這時,使用者maxsolar已經對於/dev/sr0已經可以有rw的權限了。假設我要移除gdm使用者的權限又該如何作呢?
setfacl -x u:maxsolar /dev/sr0
OK!快樂的在OpenSuSE上使用VirtualBox吧! 參考資料:ACL簡易設定筆記

P.S. 你也可以使用OpenSuSE的vbox套件庫來源:

VirtualBox.repo
-----------------------------
[VirtualBox]
name=VirtualBox
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/Virtualization:/VirtualBox/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
----------------------------
refresh套件庫的cache之後,我們便可以略過libpython2.5的相依性要求。
yast -i virtualbox-ose

說真的,弄一個virtualbox來玩,在opensuse上真的蠻累的。相依性的問題,還是在debian上面方便解決多了。
假設你要在guest linux上使用文字終端(ctrl+alt+F1),會發現怎麼用都是切到host的文字終端。在vbox的熱鍵預設為right-ctrl,你可以使用熱鍵+F1~F6去切換guest的文字終端。我都是用這招自訂fedora系列的partitions,不然每次切好放在最前面的swap都會被硬塞到最後面,非常令人討厭;可以利用這招切換到文字終端,自訂fdisk切出想要的分割區在安裝就可以了!
I Love Debian !!!

2008年12月11日 星期四

Virtualbox瘦身--釋放未使用的硬碟空間

今天跟鍾老師聊起了虛擬機器,老師跟我提到在vbox下,日積月累的資料新增與刪除,雖然在guest下空間有被釋放,不過在host上卻未見vdi檔案變小;我一直沒有真的遇到過這個問題,原因在於我為求執行的速率,我總是將硬碟設定成pre-allocate而非dynamic;那麼遇到硬碟空間不還給host時,大檔案在guest下增增減減之後,很快硬碟就會不夠用了。

那麼,該怎麼辦呢?

首先再次界定情況:guest為windows,虛擬硬碟以dynamic配置的情況下,並且是使用VirtualBox建立的虛擬機器,你才需要關注這個主題。

釋放VirtualBox未使用的硬碟空間基本上需要透過兩個步驟:

  1. 在guest下使用sdelete來刪除硬碟資料表(類似ext3格式的inode)的內容並且釋放未使用空間;或是使用nullfile進行磁碟重組(defrag)並將空閒空間整合(consolidation)在一起。
  2. sdelete或是nullfile可以自行選一個。
  3. 在host下使用VBoxManage modifyvdi來壓縮vdi檔。

首先,請到Microsoft TechNet參考這篇文章。

SDelete 實作了國防部的清除和清理標準 DOD 5220.22-M,讓您在使用 SDelete 刪除後,對於檔案資料永遠不見了有信心。請注意,SDelete 會安全地刪除檔案資料,但不會刪除位於可用磁碟空間的檔案名稱。

SDelete 可在 Windows 95、98、NT 4.0 和 Win2K 上執行。

SDelete就是Secure Delete的簡稱,他可以讓已經刪除的資料無法透過第三方軟體復原,也可以達成釋放未使用空間的功能。使用方法如下:

sdelete [-p passes] [-s] [-q] <檔案或目錄>
sdelete [-p passes] -z [磁碟機代號]

-p passes
指定覆寫次數。硬碟在同樣位置複寫次數越多,資料被還原的機會越小。一般而言三次是非常足夠的了,隨身碟建議不要這樣操。

-s
遞迴子目錄:就是指定一個資料夾做sdelete

-q
不要列印訊息--verbose的相反啦~

-z
清理可用空間

-c
Zero free space適用於虛擬機器。
下載了這個sdelete.exe之後,放到system32的資料夾下,此時命令提示字元可以找得到這個指令:
sdelete -c

請注意:下這個指令前請先看看guest內硬碟的剩餘空間。
sdelete雖然是為了要釋放空間而下的命令,不過在sdelete的過程中是會消耗大量guest的剩餘空間!也就是說假設配置8g給c磁碟機,現在只剩1g的空間,想要透過這個程式來釋放空間會有相當悲慘的下場 -- 你的guest硬碟會被塞爆,guest系統當機而且無法還原。
這是一個矛盾的動作--為了要釋放空間卻害得空間被塞爆,實在是很無辜!

解決的方法只有兩個,一是使用pre-allocate的方式新增硬碟,二是可以配置大一點的dynamic虛擬硬碟,自己控制安裝後的大小,日後再利用這個指令清除空間。我的經驗裡,要釋放3g的空間,大致上也需要3g的空間讓sdelete來暫用,其釋放與暫用比約為1:1;因此如果你安裝了很多程式,現在只剩下1~2g的空間,奉勸你還是別做這個步驟了!硬碟狂轉完成後,你會發現guest xp的硬碟空間真的變更多了!但是無奈的是,host的空間還被佔據。

如果使用nullfile的話,請將下載後的檔案放到system32下,並將名稱下的版本號去掉,改成nullfile.exe就好。接著直接執行nullfile即可。執行nullfile時系統空間一樣會佔用很多空間做置換用,剩餘空間的問題仍然需要留意。如果執行途中想要中止,需注意windows下使用者家目錄(例如 c:\Document and Setting\maxsolar\) 下會有一個dummy.000(000是三位變數數字),把他刪除後下次進行nullfile才不會失敗。如果印象沒錯的話,nullfile執行起來較久,不過暫用的空間較少;硬碟空間比較小的可以試試看nullfile。

最後一步就是在host裡使用VBoxManage的指令。請各位注意一下,假設您的host系統是UNIX-base的話,請記得一定要讓vdi存放的位置是預設值($HOME/.VirtualBox/VDI/)。這算是vbox的一個bug,大部份人都會自訂vdi存放位置;如果你不是放在預設的位置,會顯示錯誤訊息說找不到vdi。假設我自訂的vdi檔放在~/storage/vm/下,你只要做一個軟連結給他就好:

ln -s ~/storage/vm ~/.VirtualBox/VDI
如此一來,執行就不會出錯:
VBoxManage modifyvdi xp.vdi compact
等著他緩慢的跑到100%,再看看host內xp.vdi的大小,看看是不是真的瘦身成功了呢?

後記:

  1. modifyvdi,顧名思義就是只能修改vdi檔,如果是由vmware建立的dynamic硬碟,可就沒辦法這麼做了。
  2. 假設不做sdelete/nullfile,直接做第二個步驟,是完全沒有用的。(連1 byte都沒有減少@_@)
  3. 爬文的結果發現早期可以利用vditool來把guest windows上的未佔用的位置zero space free掉,不過現在這個連結已經失效,否則這隻程式甚至可以做到qemu與vbox映像檔的互換!

2008年11月28日 星期五

Virtualbox 網路設定--bridge

本文不適用於VirtualBox 2.1.0以上的版本。2.1.0以上的版本已經可以直接使用bridge的方式連線;本文僅為作者自己的歷史筆記>

在VMware以及VirtualBox的比較上,觀點上其實跟使用者的需求跟角度有很大的關係;如果真的要比較的話,我認為從安裝程式大小、記憶體佔用量、執行速率、使用者便利性四點來比較。 比較完之後,我會解釋在VirtualBox下進行host/guest的bridge連線需要哪些設定。

1.安裝程式的大小:
最新版的VMware 2.0.0-122956,其rpm安裝檔有538M,tar.gz檔有540M;即使是1.0.6-91891的版本,也要103M。我實在是不明白為什麼虛擬機器會變成如此巨大的野獸,我只知道下載VMware本身就是一件漫長的等待!
VMware2.0以降就變成了Web介面,支援firefox/opera/IE等主流的瀏覽器;由於瀏覽器都可以支援全螢幕,我想VMware應該是看清未來都是web的天下,因此有這樣的轉變吧?不過姑且不論這樣的轉變友善與否;540M,近0.5G的安裝程式究竟含有多少強大的功能呢?這點我就留給各位看官去測試了,因為我已經徹底拋棄VMware server來當作學習工具了。 反觀最新版的VirtualBox,2.0.6,安裝程式多大呢?deb安裝程式29M!而且在debian下可以選擇社群版本或是Sun維護的版本,用aptitude就可以安裝了。至少,我寧願一個小巧一點的虛擬機器。想要用aptitude安裝的話,只需要多加一條到/etc/apt/sources.list:

deb http://download.virtualbox.org/virtualbox/debian lenny non-free
不過安裝完後的版本是2.0.4,想要最新的2.0.6需要手動安裝下載。
2.記憶體的佔用量:
假設我今天都把虛擬機器的guset記憶體設定固定大小,啟動一個全新安裝的ubuntu只需要多90M;這個大小跟我剛打開我的無特效的Debian一樣,約99M;那麼開啟VMware2.0呢?需要在多出343M的記憶體用量。
我承認我是不懂得VMware的優異功能,至少在記憶體用量這關,我還是選擇Virtual Box。
3.執行速率:
拜半虛擬化之賜,VirtualBox有絕對的先天上優勢會比VMware快出非常多倍。所謂的半虛擬化,是指硬體最底層的部份仍由guest OS跟hardware溝通,因此無須透過虛擬機器模擬,執行上效率極佳;全虛擬化的虛擬機器如VMware,100%全部模擬(cpu除外),因此只要是跟硬體作溝通的部份都很慢,原因就是無論任何動作都要透過虛擬機器。各位如果有在虛擬機器上編譯程式的經驗,就會知道那是一個痛苦的等待過程,而且要中斷他也不是...有時候一中斷了,就會出現其他問題。 我的cpu:AMD Athlon 64x2 5000+,4g記憶體。
我在VirtualBox開全新安裝的ubuntu 8.10,耗時45秒;在VMware 1.0.6跑同樣的東西,1分22秒。至於2.0的VMware,我完全相信時間絕對是超過一分半鐘的。有時候我覺得納悶,因為我的經驗裡,在VirtualBox開全新的WindowsXP是比開實體的XP來得快的。至於為什麼,我也不清楚....
4.使用者便利性:
我用VMware很多年了,當時也有很多選擇,如VirtualBox, qemu, xen等等。由於我的功力沒有太大的進步,我還是覺得要佈署考試的練習環境,用VMware server是比較適合的,因為安裝完甚麼設備幾乎都有了。主要是快速的建立一個同網段的環境;我記得在今年出,VMware server2.0還沒出的時候,使用VirtualBox的人要建立上述的網路環境非常困難,因此我當時還是選擇了VMware server。 情況現在改變了。目前VirtualBox要新增/讀取usb裝置已經非常方便,不用另外設定;解析度、音效、檔案分享等的便利性都做得毫不遜色,甚至覺得跟VMware一樣簡單。至於網路,如果只是要可以連得上網際網路的話,那麼這點VMware跟VirtualBox同分;然而通常我們會希望虛擬機器也能更提供服務,不是只有躲在後面的測試而已,這個部份VirtualBox就做得沒有VMware便利--要實現bridge的功能,還是要由實體的host去建立一個設備,再由guest去使用這個介面;這樣的便利性,確實是VMware佔上風。

不過就這四點結論,我還是會選擇快速俐落的VirtualBox來當成我的虛擬機器

而且重點是他可以吃VMware server做出來的.vmdk檔,我從VMware轉移到VirtualBox完全是無痛的。不過由於我們建立虛擬機器都是希望可以跟原來的host可以溝通, 溝通的方式可以利用虛擬機器提供的資料夾分享,也可以開啟服務來提供給guest;前者比較簡單,不過會耗虛擬機器本身的資源,靈活性也不大;在host或是guest開啟服務來提供資源分享是一個比較合理的方法, 也比較接近真實;不過VirtualBox有一個致命的地方,就是利用NAT功能所配置的網路,可以想像成guest躲在router(就是你的VBox)後方,或是說家裏的pc躲在ATU-R(小烏龜)後方;你雖然可以上網,不過別人卻連不進你的guest。 雖然你可以用port forwarding,利用port對應的方式,把封包從host傳給guest,但是host/guest的服務不能重複,至少port不能重複,使用起來也是挺礙手礙腳的。因此假設只是要測試,那麼勉為其難可以接受這個設定。 不過與host不同網段(VirtualBox預設是class A的10.0.1.x網段),資料要互連還是必須透過軟體本身的分享;ping的功能也被限制(10.0.1.1~15,根據官方的說明手冊,由於安全性緣故,其他的IP位置會被virtualbox擋下來)。

那麼如何讓VirtualBox做到讓guest跟host是同網段,可以像是多一台電腦這樣的提供服務呢?在Debian下,首先請安裝bridge-utils:

dpkg -L bridge-utils || aptitude install bridge-utils
接著我們要自己手動建立一個bridge。bridge是Layer2(Data-Link Layer)的東西,與TCP/IP無關,就是區域網路內的ethernet連線罷了,因此不會有甚麼gateway/netmask這類Layer 3的東西。請在interfaces建立如下的設定:
auto eth0
iface eth0 inet dhcp

auto br0
iface br0 inet dhcp
bridge_ports eth0
請重新啟動網路服務。
invoke-rc.d networking restart
此時我多了一個bridge,這個bridge介面負責溝通我跟虛擬機器的網路介面。因此我需要替虛擬機器建立一個介面:(在host下輸入)
VBoxAddIF veth0 maxsolar br0
意思是建立一個名為veth0的虛擬介面,使用者maxsolar有權存取,存取host的br0當成veth0。
接著在開啟虛擬機器時,請在「設定值」->「網路」->「主機介面設定值」裡的介面名稱(interface name)裡面填入veth0。
下次開機後,你就可以利用這個虛擬介面上網,而且跟我們的host是同一網段。不過限制是,這個虛擬介面一次只能給一個guest使用,如果要多個guest一起開的話,那麼就多設幾個veth給他們用吧!

P.S.在OpenSuSE下的bridge設定,請參考這篇

以下的遊戲秀圖都是我在Debian下特效全開的情況下跑的,除了Compiz fusion之外,下面的工作列就是最近很紅的avant window manager,另外我也裝了screenlets這個套件,他可以讓你跑很多精緻的小工具,甚至很多可以在gnome-look裡下載唷!

姊夫最愛玩的:世紀帝國II

兒時經典遊戲:星海爭霸

也不錯玩的遊戲:Frontline(前線)
也就是說,目前DirectX與DirectDraw的技術,VirtualBox跟VMware算是平分秋色了,再也沒有VMware一黨獨大的局面,不過還是有一些遊戲是沒辦法在虛擬機器上跑的,我想這就只好認命囉。
附帶一提:我用wine模擬世紀帝國II,執行效率真的很差,反而用VirtualBox跑起來順多了呢!

參考資料:user manual

Share