google code-beautifer

星期三, 6月 27, 2007

安裝使用VirtualBox: 執行虛擬作業系統的新選擇

V 1.0

前言


對我們這種常在某一種Linux 上工作,但偶而要跑其他作業系統去測試一些事情的人,單一機器多重開機雖然效能最高,還是有他不便之處(切換當時就沒辦法同時在習慣的系統下工作)。在一個作業系統下跑虛擬機器去跑另一個作業系統有時會很重要。

之前有跑過 VMware player ,但VMplayer 2.0 在我的64bit機器上有問題。替wine作好設定的 wine-doors 又跑不起來。 最近發現了Virtual Box:
http://www.virtualbox.org/
覺得還不錯。以下是VirtualBox 詳細安裝使用說明。不像有些禿鷹公司把別人完全開放的英文文件作個勞什子的簡單翻譯文件,就要去跟政府要大筆錢,還用PDF...等種種小手段去限制干擾大家使用;也不像一些喜歡偷看我文章卻又喜歡批評我的基本教義派,除了嘴巴叫叫些歪理,往往對他批評的領域卻一點實際技術的東西都端不出來。下面是細節毫無保留全都錄,希望對關心開放軟體的朋友有所助益,也希望受益的朋友也能飲水思源,秉持copy left 的精神去回饋自由跟開放軟體社群。

各種虛擬機器軟體的基本比較,可以參考
http://en.wikipedia.org/wiki/Comparison_of_virtual_machines
之後我會另文發表VMware, VirtualBox 跟Qemu 三者的細節比較 。

下載安裝程式


VirtualBox目前最新的是1.4版 有支援32 bit
VirtualBox-1.4.0_21864_mdv2007.1-1.i586.rpm.run
跟64 bit 版
VirtualBox_1.4.0_Linux_amd64.run
Mandriva 2007.1 上的RPM是1.3.8版,我發現1.3.8 設定沒有 USB,VRDP(遠端顯示) 跟Share Folder(分享資料夾),此外裝完後1.4 版後,1.3 版介面文字也會變成中文,建議直接去官方下載PUEL (Personal Use and Evaluation License) 版1.4.0。下面是以 1.4.0為示範。

1.4.0 預設目錄在 /opt/VirtualBox-1.4.0
也可以自行選擇,然後執行以下指令,如:
mkdir /usr/local/VirtualBox1.4.0
chmod +x VirtualBox_1.3.2_Linux_x86.run
./VirtualBox_1.4.0_Linux_amd64.run install /usr/local/VirtualBox1.4.0

他會要你看同意書後,鍵入yes才能繼續安裝。

裝完後在Mandriva 的gnome選單中,他會在應用程式->更多應用程式>模擬器下出現 Inno Tek VirtualBox的選項

在起動Virtua Box後
在Gobal setting 裡,你可能會在General 選項裡想改掉下面的路徑設定
VDI ~/.VirtualBox/VDI
Machine ~/.VirtualBox/Machines

之後就可以在Vitural Machine Manager 下,按下左上方的"New"圖示,建立虛擬機器影像

建立虛擬機器影像


在虛擬機器環境上, host表示實體機器上執行的主端作業系統,guest表示虛擬的客端作業系統。一臺虛擬機器少要有一個虛擬磁碟影像。客系統的虛擬機器磁碟影像檔,是放在主作業系統的檔案系統上。如果是放在Linux 的原生ext3檔案系統分割區效能應該會好一點。萬一虛擬硬碟檔要放在 FAT/FAT32 分割區下,則會受限於單一檔案不能超過 4GB的限制。以下是以英文版介面說明:


  1. 出現圖M2的"建立虛擬機器法師"畫面,再按"Next"圖示到下一步。
  2. 出現圖M3的畫面,提供選擇虛擬機器名稱(在設定網路時很重要)跟作業系統型態,再按"Next"圖示到下一步。
  3. 出現圖M4的畫面,提供選擇虛擬機器分配記憶體大小,(預設是168M,大一點的系統建議384M以上),再按"Next"圖示到下一步。
  4. 出現圖M5的畫面,提供選擇虛擬磁碟(預設是沒有磁碟),可以選"Existing"圖示去選用之前建好的。選"New" 圖示去叫出建立虛擬機器影像法師
  5. 再按"Next"圖示結束設定,出現圖M6的新畫面,這時候可以看到會多出 Setting,Delete,跟Start的選項。


這時候可以針對不同虛擬機器影像做個別內部設定

建立虛擬磁碟法師



  1. 在Vitural Disk Manager 下,按下圖D1左上方的"New"圖示,
  2. 出現圖D2 的"建立虛擬磁碟法師"畫面。再按"Next"圖示到下一步。
  3. 出現圖D3的畫面,提供選擇虛擬磁碟檔案大小是動態配置還是固定,(預設是動態配置Dynamically),再按"Next"圖示到下一步。
  4. 出現圖D4 的畫面,提供選擇虛擬磁碟檔案路徑名,(預設是NewHardDisk1.vdi)跟大小,再按"Next"圖示到下一步。
  5. 出現圖D5要求確認畫面,再按"Next"圖示結束設定



虛擬機器影像做個別內部設定



在 VirtualBox 主畫面中針對某虛擬機器影像按下"設定值"(Settings)圖示

  • 一般(General)
  • 客端若是Windows ,要在(advanced) 進階分頁底下,把ACPI 跟IO APIC這兩個選項都啟用,會省掉一些問題。
  • 硬碟
  • 最多可以掛載3個硬碟
  • 軟碟
  • 可以使用實體軟碟或是影像檔,包括進行系統開機
  • 光碟機
  • 只能模擬一台光碟機,但可以切換,可以設定使用實體光碟機或是 ISO 檔模擬實體光碟機,包括進行系統開機
  • 音效
  • 選用Alsa音效驅動程式
  • 網路
  • VirtualBox 網路能模擬 4 張卡。可在網路卡0的分頁中勾選
    啟用網路卡,一但主端對外能上網,客端不需作任何調整就能以NAT+HDCP方式上網

以下設定是1.4 版才有,後詳

  • USB

  • 遠端顯示(VRDP)

  • 分享資料夾(Share Folder)



最後按 "OK" 圖示完成設定,這時就可以在主畫面中選擇一個虛擬機器,按下"Start"鍵圖示就會開始啟動虛擬機器系統

萬一遇到 vboxdrv 無法正確載入,
VirtualBox kernel driver not installed. VBox status code: -1908 (VERR_VM_DRIVER_NOT_INSTALLED).
查查 nmi是不是有問題,是的話要在 kernel參數加上nmi_watchdog=0

安裝 Guest Additions



因為是虛擬機器, 客端顯示硬體驅動程式不是顯示真正的硬體,也無法裝自己的驅動程式。以我見過的例子:測試XP 客端上的裝置管理員上面列有二個不明裝置: 一個是顯示卡一個是不明顯卡 (實體主機上是nvidia)另一個是不明基本系統裝置。不過顯示正常,至少切到1024x748解析度沒有問題。

但要是安裝 Guest Additions 會使虛擬機器的驅動解析度與滑鼠整合操控性更好,如此一來,就不需要多按一下快速鍵就能把滑鼠移出VirtualBox視窗外。而且至少可以解決 nvidia Gforce 的問題(又多了個理由不要用ATI顯示卡),讓虛擬機器支援了更高的解析度 。從比較虛擬機器開機聲音的延遲程度,我相信這跟其他模擬作業系統軟體的外掛如WMware-tools 一般,會使得客端虛擬機器的效能更接近主端系統的效能。在1G Ram的AMD64 4000+上測試,安裝前Guest Additions竟然 Virtual Box CPU承載一直逼近百分之百!雖然同時跑其他程式如emacs還是很順,但看得還是有點心驚膽顫。安裝後,虛擬機器螢幕解析度提高到1152x864,但CPU承載掉到合理的60%

這是只有包含於 PUEL edition (Personal Use and Evaluation License) 而開放原碼版沒有的。安裝完PUEL版之後會在對應目錄下找到 additions/VBoxGuestAdditions.iso 預設路徑在
/opt/VirtualBox/additions/VBoxGuestAdditions.iso

C:\Program Files\InnoTek VirtualBox\VBoxGuestAdditions.iso

安裝時如果有掛載其他實體光碟或虛擬光碟映像檔,可能會失敗,最好先卸載其他光碟。啟動虛擬機器後,把VBoxGuestAdditions.iso當成實體光碟掛載到虛擬機器上,可以從Virtual Box下拉選單的 Devices-> Install Guest-Additions 去安裝。

常用快速鍵



  • F12
  • 在開機時選擇boot的媒體
  • 滑鼠點 2 下
  • 啟動視窗:將畫面主控權切換成虛擬系統。
  • 以下需要配合主端控制鍵,預設是右 Ctrl 鍵,也可換成如左Ctrl 鍵給右撇子方便使用

    • 主端控制鍵按 1 下
    • 跳出客端系統視窗。
    • 主端控制鍵 + f 鍵
    • 全螢幕/視窗模式切換。
    • 主端控制鍵 + Backspace 鍵
    • 在客端系統中模擬Ctrl+Alt+Backspace (Unix系統重新起動X 視窗)。
    • 主端控制鍵 + Fn 鍵
    • 在客端系統中模擬Ctrl+Alt+Fn,... (Unix系統切換到第號文字console , 1 <= n <= 12)。
    • 主端控制鍵 + Delete 鍵
    • 在客端系統中模擬Ctrl+Alt+Del(Windows 系統叫出程式管理員或重開機)。
    • 主端控制鍵 + q 鍵
    • 關機
    • 主端控制鍵 + r 鍵
    • 立即重開機(如同硬體reset )。



進階使用



USB裝置要啟用時,到視窗主選單裝置->USB裝置把要啟用的裝置按左鼠鍵選取使用。跟VMware 一樣,同時間主客端間只能有一個存取 USB裝置,從VirtualBox客端卸載USB 裝置後,主端系統就可以抓到該 USB 裝置,這樣可以讓主客端之間作資料的傳遞分享。

分享檔案夾的設定



除了USB 儲存裝置,可以使用分享檔案夾(share Folder ) 在透過內部網路分享儲存媒體(類似NFS或網路芳鄰)的方式讓主客端之間分享檔案。

分享檔案夾的功能可以在關掉連接外部網路的狀態上使用,就算關掉客端系統的虛擬網路卡對外連線,主客端仍然可以由分享檔案夾分享檔案。這麼一來,當有人想灌個windows 客端系統只用來執行少數Linux下沒有的應用軟體,但又怕windows系統客端曝露在連外網路的危險之中,就可以不用顧慮分享檔案夾上的windows系統客端一旦接上網路,就會有被來自外部網路上病毒、木馬等等惡意程式攻擊的安全性風險。


  • 主端上的設定

  • 可以透過GUI 或命令列來達成:先把一個虛擬機器架起來,把作業系統裝完後

    • GUI :在設定裡指定"檔案夾路徑"與"名稱",詳見下面說明:
    • 命令列:
        先關閉虛擬機器。
      1. (只有windows host 需要)假設虛擬機器叫xp,命令列開一個 command prompt 終端機視窗(Windows 系統下用cmd 叫出),切換目錄到 VirtualBox 虛擬硬碟存放的目錄。路徑可以參看一下當初VirtualBox 的 File 選單中的 Global Settings 裡面指定的虛擬機器集目錄,比如說
        /home/run/VB/Machines/,在該目錄底下可以找到個別虛擬機器相對應的目錄。如虛擬機器xp就會建立對應的子目錄 /home/run/VB/Machines/xp
      2. 用下列形式執行命令
        VBoxManage sharedfolder add "VM Name" -name "Share Name" -hostpath "路徑"

        VBoxManage sharedfolder add "xp" -name "again" -hostpath /home/run/again
          其中
        • VM Name
        • 指的是虛擬機器的名稱,如xp。要注意虛擬機器名xp,跟使用的虛擬硬碟名稱XXXYYZZZ.dvi 可以不一致。這裡要用虛擬機器名。
        • Share Name
        • 指的是自己在虛擬機器中定義的分享檔案夾名稱,如again
        • 路徑
        • 指的是要分享給客端的主端實體路徑名稱,如/home/run/again

      3. 其實可以直接修改系統設定檔,在該 VM Name 的目錄下,有個 VM Name.xml 檔案,如/home/run/VB/Machines/xp/xp.xml 可以用文字編輯器直接打開來編輯

    • 要確認設定的話,可以在終端機裡執行
      VBoxManage list vms
      看看會不會出現類似下面的字眼:
      Shared folders:
      Name: 'again', Host path: '/home/run/again' (machine mapping)

  • 客端上的設定

  • 啟動虛擬機器,開機完後在虛擬機器中

    • Linux

    • mount -t vboxsf again /media/VM
      其中again要和主端指定的分享名"again"一致,/media/VM是你想掛載的目錄。這也可以用/etc/fstab 之類的方式來變通掛載。
    • Windows

    • 把 \\vboxsvr\again 當成網路分享來用。(注意:不見得能用檔案總管直接上samba 網路瀏覽),這也有好幾種方式。用檔案總管下的tool -> map network drives 是一個方式,或打開一個 command prompt 終端機視窗,執行:
      net use x: \\vboxsvr\ShareName
      其中x:是你想在windows下看到的磁碟代號,而ShareName要和主端的分享名稱要一致,如
      net use z: \\vboxsvr\again
      注意在x:和\\vboxsvr之間需要加空白。


之後在虛擬機器上用Krusader或Total commander 之類的檔案總管打開網路儲存媒體,就可以看到分享檔案夾了。