VirtualBox

概述

VirtualBox1是一个虚拟 x86 体系结构的虚拟机软件,由 Innotek 公司开发,现在被 Sun 公司收购。

VirtualBox 的特色23有:

  • 共享文件夹:在主机和 Linux 或 Windows 客户机之间共享文件
  • RDP 支持:不需要客户机操作系统支持,就可以将虚拟机作为 RDP 服务器来控制。
  • 虚拟 USB:将主机上的 usb 设备虚拟成客户机上的设备。并支持通过 RDP 访问远程 USB。
  • 无缝模式:可以将主机和客户机的图形界面整合在一起显示。
  • 多国语言:图形界面包括多种语言支持,包括简体中文和繁体中文。
  • 共享剪切板:在客户机和主机之间双向共享剪切板
  • Guest Addition:为 Windows 和 Linux 客户机提供特别的客户端软件,支持动态分辨率调整、鼠标和键盘的集成、文件夹共享等功能。
  • 命令行控制:通过命令行对虚拟机进行完全控制,包括启动、停止、修改设置等。
  • 快照:对虚拟硬盘进行快照,可以在以后进行恢复。

VirtualBox 分为二进制版本和开源版本(OSE)。二进制版本功能完整,但是没有源代码。开源版本有源代码,但是缺少虚拟 USB、RDP 支持、iscsi、虚拟 SATA 的支持。

安装

在这里4下载对应平台(包括 Windows 32 位、Windows 64 位、Mac OS X Intel 架构、Solaris、各种 Linux 等)的版本。

在 Windows 下安装,只要双击下载的可执行文件即可。

在 Ubuntu 下,只要安装下载的 deb 即可:

    sudo dpkg -i virtualbox_1.6.2-31466_Ubuntu_hardy_i386.deb

配置

配置端口映射

用 nat 方式时,虚拟机和主机之间隔了一个 nat 路由,主机不能直接访问虚拟机的服务。不过可以在这个 nat 路由上配置端口映射。端口映射必须在命令行执行命令完成:

    VBoxManage setextradata "Linux Guest"  "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP
    VBoxManage setextradata "Linux Guest"  "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22
    VBoxManage setextradata "Linux Guest"  "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222

其中 Linux Guest 是虚拟机的名字,pcnet 是虚拟百兆网卡的类型(如果虚拟网卡是千兆网卡,需要换成 e1000),guestssh 是映射的名字(可以是任取的一个名字),TCP 是协议的类型(可以换成 UDP),22 是虚拟机中服务的端口,2222 是映射以后主机上的端口。经过映射后,就可以连接主机的 2222 端口连上客户机中的 22 服务。

端口映射脚本

    #!/bin/sh
    # usage: vboxportmap vmname portmapname hostport guestport

    CARDTYPE=e1000

    VBoxManage setextradata $1 "VBoxInternal/Devices/$CARDTYPE/0/LUN#0/Config/t$2/Protocol" TCP
    VBoxManage setextradata $1 "VBoxInternal/Devices/$CARDTYPE/0/LUN#0/Config/t$2/HostPort" $3
    VBoxManage setextradata $1 "VBoxInternal/Devices/$CARDTYPE/0/LUN#0/Config/t$2/GuestPort" $4

    VBoxManage setextradata $1 "VBoxInternal/Devices/$CARDTYPE/0/LUN#0/Config/u$2/Protocol" UDP
    VBoxManage setextradata $1 "VBoxInternal/Devices/$CARDTYPE/0/LUN#0/Config/u$2/HostPort" $3
    VBoxManage setextradata $1 "VBoxInternal/Devices/$CARDTYPE/0/LUN#0/Config/u$2/GuestPort" $4

配置网桥

在 Ubuntu 下配置网桥供 VirtualBox 中的虚拟机使用,首先要安装 bridge-utils

    sudo apt-get install bridge-utils

然后在网络配置文件/etc/network/interfaces 中添加一个网桥:

    auto br0
    iface br0 inet dhcp
        bridge_ports eth0

这里 eth0 是主机上的网卡(注意不能用无线网卡)。网桥的地址配置成主机上网所用的地址,这里是 dhcp 的。也可以是静态的,比如:

    auto br0
    iface br0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1
        bridge_ports eth0

改好了以后启动这个网桥:

    /etc/init.d/networking restart

然后创建虚拟机用的虚拟网卡,并把它加到网桥中,这可以用 VirtualBox 自带的一个脚本实现:

    sudo VBoxAddIF vbox0 <user> br0

其中,vbox0 是创建的虚拟网卡(要创建第二块,可以用 vbox1、vbox2 等),br0 是前面创建的网桥的名字,\<user>是使用虚拟机的 Linux 用户的名字。

最后,在虚拟机的设置里面,网卡的属性里面选择 Host Interface Networking,而 Interface name 设置成 vbox0。

注意:无线网卡不能做网桥。多个虚拟机要使用网桥,需要创建多块虚拟网卡 vbox0、vbox1 等,每个虚拟机使用不同的虚拟网卡。

配置 DMI 信息

如果你的电脑是品牌机,预装 Windows,那么用附带的 OEM 版 Windows 光盘重装时不需要输入序列号,也不需要激活。但是把这张光盘放在虚拟机中安装,就会需要输入序列号和激活。其中的区别是品牌机的 BIOS 中有额外的 DMI 信息,而虚拟机的 BIOS 没有。在 VirtualBox 中可以设置 DMI 信息。比如:

    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" "Hewlett-Packard"
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion" "68YHV Ver. F.0B"
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseDate"  "07/13/2007"
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMajor"  15
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMinor"  11
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMajor" 89
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMinor" 53
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "Hewlett-Packard"
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct" "HP Compaq nc4400 (RH136PA#AB5)"
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVersion" "F.0B"
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial"  "xxxxxxxx"
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiSystemUuid" "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    VBoxManage setextradata windowsxp "VBoxInternal/Devices/pcbios/0/Config/DmiSystemFamily" "xxxxxxxxx"

其中,windowsxp 是虚拟机的名称。自己的电脑的 DMI 信息可以由 dmidecode 命令得到。

配置物理硬盘给虚拟机用

配置 iscsi 给虚拟机用

参考文献