virtualbox使用笔记

1.转换虚拟硬盘格式
VBoxManage clonehd          <uuid>|<filename> <outputfile>

[--format     VDI|VMDK|VHD|RAW|<other>]     [--variant     Standard,Fixed,Split2G,Stream,ESX] [--existing]

VBoxManage convertfromraw   <filename> <outputfile>

[--format         VDI|VMDK|VHD]         [--variant         Standard,Fixed,Split2G,Stream,ESX]

VBoxManage convertfromraw   stdin <outputfile> <bytes>

[--format         VDI|VMDK|VHD]         [--variant         Standard,Fixed,Split2G,Stream,ESX]

2.安装系统里面的增强功能
这个不是指Extension Pack,而是指安装好系统后虚拟机里面guest additions,类似vmware workstation的功能增强包,安装后支持直接拖曳文件到虚拟机,自动挂载主机共享的文件夹等功能。

4.2.10的版本默认使用自动缩放模式,即不显示菜单栏,可以直接按 HOST+d 键加载安装包到光驱,进行安装。也可以按HOST+c退出自动缩放模式,显示出菜单栏后在设备菜单中找到并安装。

3.直接复制虚拟硬盘后需重新设置硬盘UUID
在命令行输入:
VBoxManage.exe internalcommands sethduuid 复制后的虚拟机硬盘路径

如:"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands sethduuid F:\\win2k8.vdi
提示:
UUID changed to: de992dfd-46e6-4539-b1a0-4d02ec2ba334

建议用VBoxManage clonehd 原硬盘路径 新硬盘路径 来实现硬盘复制。

4.压缩现有虚拟硬盘

VBoxManage modifyhd mydisk.vdi --compact

5.查看虚拟机

VBoxManage list runningvms
VBoxManage list vms

6.安装extpack

VBoxManage extpack install "Oracle_VM_VirtualBox_Extension_Pack-5.0.12-104815.vbox-extpack"
VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"

ubuntu server安装virtualbox

virtualbox 是虚拟化软件,开源,有官方的web管理界面phpvirtualbox。
os:ubuntu 12.04 server 32bit
virtualbox: 4.1.12-dfsg-2ubuntu0.2

1.安装
要先安装好环境,特别是dkms,再安装virtualbox,否则可能会无法自动启动虚拟机。
sudo apt-get install linux-headers-`uname -r` build-essential
sudo apt-get install dkms
sudo apt-get install virtualbox

安装后会根据内核版本自动编译需要的模块

2.配置 
在/etc/default/virtualbox中添加启动virtualbox的用户:
VBOXWEB_USER=comet

3.安装扩展包
安装扩展包,以便在web管理界面中使用终端模式,下载对应版本的扩展包安装
vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.1.12-77245.vbox-extpack

4.配置web管理界面
phpirtualbox项目地址:http://code.google.com/p/phpvirtualbox/
php编写的,需要apache的支持,可以在另外的机器上配置来管理virtualbox的服务器。这里有两台服务器,其中192.168.1.1配置phpvirtualbox
配置文件为:config.php

var $username = 'comet';
var $password = '12345678';
var $language = 'zh_cn'; 

var $servers = array(
array(
'name' => 'u-srv-1',
'username' => 'comet',
'password' => '12345678',
'location' => 'http://192.168.1.1:18083/',
'consoleHost' => '192.168.1.1',
'authMaster' => true // Use this server for authentication
),
array(
'name' => 'u-srv-2',
'username' => 'comet',
'password' => '12345678',
'location' => 'http://192.168.1.2:18083/',
'consoleHost' => '192.168.1.1',
),
);

var $browserRestrictFolders = array('/srv','/mnt');

其他的就不列出来了。

5.启动virtualbox web服务的脚本
保存后添加执行权限,并加在/etc/rc.local里面,这里还要新建一个/var/log/vboxweb的文件夹用来保存日志。
#! /bin/sh

WAN_IFACE="eth0"
NET_IP=`ifconfig ${WAN_IFACE} |grep inet|awk '{print $2}'|awk -F: '{print $2}'`
VBOXSRV="/usr/bin/vboxwebsrv"
VBOXWEB_LOG="/var/log/vboxweb/vboxweb.log"

${VBOXSRV} -b -H ${NET_IP} -p 18083 -F ${VBOXWEB_LOG}

 6.启动虚拟镜像的脚本
因为在/etc/init.d/virtualbox的脚本只是启动virtualbox服务,就算虚拟镜像设置了自动启动还是无法自动启动的,需个脚本启动一下才行,以下保存为vboxinit放到/etc/init.d/中:
#! /bin/sh

#
# vboxinit: auto start sessions when booting and save
# sessions when host is stopped
#
# Based on vboxtool. Only tested in Debian.
#
# Debian install:
# copy this script to /etc/init.d
# run:
# chmod u+rx /etc/init.d/vboxinit
# update-rc.d vboxinit defaults
### BEGIN INIT INFO
# Provides: vboxinit
# Required-Start: vboxdrv $local_fs
# Required-Stop: vboxdrv $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Controls VirtualBox sessions
### END INIT INFO

. /etc/default/virtualbox

# Enable/disable service

if [ -z "${VBOXWEB_USER}" ]; then
exit 0
fi

start()
{
# Get all autostart machines
MACHINES=$($su_command "VBoxManage list vms | awk '{ print \$NF }' | sed -e 's/[{}]//g'")
for UUID in $MACHINES; do
STARTUP=$($su_command "VBoxManage getextradata $UUID 'pvbx/startupMode'" | awk '{ print $NF }')
if [ "${STARTUP}" = "auto" ]; then
$su_command "VBoxManage startvm $UUID --type headless" >>/var/log/vb.log
fi
done
}

stop()
{
# vms are saved, instead of stopped.
MACHINES=$($su_command "VBoxManage list runningvms | awk '{ print \$NF }' | sed -e 's/[{}]//g'")
for UUID in $MACHINES; do
echo "$0: saving machine ${UUID} state"
$su_command "VBoxManage controlvm $UUID savestate" >>/var/log/vb.log
done

}

status()
{
$su_command "VBoxManage list runningvms"
}

restart()
{
stop
start
}
# Implementation of user control, execute several commands as another (predefined) user,
su_command="su - ${VBOXWEB_USER} -c"

#
# Check for a command line option
#
case "$1" in

start)
log_daemon_msg "Starting vbox init" "vboxinit"
start
;;
stop)
log_daemon_msg "Stopping vbox init" "vboxinit"
stop
;;
status)
status
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac

#exit 0

然后使用下面命令配置好启动等级,由于virtualbox默认是20,这里需要比virtualbox晚一点启动才行。
sudo chmod +x vboxinit
sudo update-rc.d vboxinit defaults  21

查看一下,virtualbox要比vboxinit先启动。

ls -l /etc/rc2.d/
-rw-r--r-- 1 root root 677 Jul 27 2012 README
lrwxrwxrwx 1 root root 15 Jul 3 2012 S20snmpd -> ../init.d/snmpd
lrwxrwxrwx 1 root root 20 Jul 1 2012 S20virtualbox -> ../init.d/virtualbox
lrwxrwxrwx 1 root root  18 Jan 11  2013 S21vboxinit -> ../init.d/vboxinit

7.测试
做完要重启测试一下。

8.安装extpack
安装了extpack后,做phpvirtualbox中才能用rdp来远程访问虚拟机,否则只能用vnc。

VBoxManage extpack install "Oracle_VM_VirtualBox_Extension_Pack-5.0.12-104815.vbox-extpack"
VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"