Skip to content

VirtualBox

参考 https://www.howtoforge.com/tutorial/running-virtual-machines-with-virtualbox-5.1-on-a-headless-ubuntu-16.04-lts-server/

在linux终端下使用VBoxManage和VBoxHeadless创建、启动、控制一个Ubuntu14.04 64Bit的虚拟机

下载

http://www.virtualbox.org/wiki/Downloads

从官网找到对应的rpm或deb下载即可

rpm文件的安装:

rpm -ivh something.rpm

deb文件的安装

dpkg -i something.rpm

执行dpkg -i后需要执行apt-get -f install以安装缺失的依赖包

一定要安装额外包

cd /tmp
wget http://download.virtualbox.org/virtualbox/5.1.16/Oracle_VM_VirtualBox_Extension_Pack-5.1.16-113841.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.16-113841.vbox-extpack

创建虚拟机,设置虚拟机选项

mkdir -p /home/virtualbox
VBoxManage createvm --name ubuntu --ostype "Ubuntu_64" --register --basefolder /home/virtualbox/
VBoxManage createvdi  --filename ubuntu/ubuntu.vdi --size 102400 # 100GB
VBoxManage storagectl ubuntu --name storage_controller_1 --add ide
VBoxManage storageattach ubuntu --storagectl storage_controller_1 \
    --type hdd --port 0 --device 0  --medium ubuntu/ubuntu.vdi
VBoxManage storageattach ubuntu --storagectl storage_controller_1 \
    --type dvddrive --port 1 --device 0 --medium ubuntu-14.04.4-server-amd64.iso
VBoxManage modifyvm ubuntu --cpus 4 --memory 2048 --acpi on --boot1 dvd --nic1 nat --cableconnected1 on --vrde on --vrdeport 3389

以下是我安装CentOS 6.8 32bit minimal的过程

pushd /root
curl -O http://mirrors.zju.edu.cn/centos/6.8/isos/i386/CentOS-6.8-i386-minimal.iso
mkdir /home/virtualbox
#看看ostype支持哪一些,结果发现有RedHat,就选它咯
VBoxManage list ostypes
VBoxManage createvm --name centos --ostype "RedHat" --register --basefolder /home/virtualbox/
pushd /home/virtualbox
VBoxManage createvdi  --filename centos/disk.vdi --size 2048 # 2GB
VBoxManage storagectl centos --name storage_controller_1 --add ide
VBoxManage storageattach centos --storagectl storage_controller_1 --type hdd --port 0 --device 0  --medium centos/disk.vdi
VBoxManage storageattach centos --storagectl storage_controller_1 --type dvddrive --port 1 --device 0 --medium /root/CentOS-6.8-i386-minimal.iso
#配置CPU和内存限制,光驱启动,允许多个客户端连接
VBoxManage modifyvm centos --cpus 1 --memory 512 --acpi on --boot1 dvd --nic1 nat --cableconnected1 on --vrde on --vrdeport 13389 --vrdemulticon on

启动虚拟机

nohup VBoxHeadless -startvm ubuntu --vrde on -e  TCP/Ports=63389 &

控制虚拟机

Windows下使用mstsc远程连接即可获得一个图形界面的终端完成系统安装

删除硬盘

VBoxManage storageattach centos --storagectl storage_controller_1 --type hdd --port 0 --device 0  --medium none
VBoxManage closemedium centos/disk.vdi
rm centos/disk.vdi

运行条件下修改端口映射

# 首先通过mstsc物理接触虚拟机,确认ifconfig已经得到ip
# 否则需要在虚拟机中执行 ifconfig -a 查看网卡,执行 dhclient eth0 获得ip

# 例如我们需要将虚拟机的22端口映射出10022端口
# 最后一个参数的格式:规则名称,tcp还是udp,主机的IP(不填就好),主机暴露出来的端口,虚拟机的IP(不填就好),需要映射的虚拟机端口
VBoxManage controlvm 虚拟机名称 natpf1 ssh,tcp,,10022,,22

运行条件下关闭远程控制

系统安装好了,SSH开了,SSH的端口映射可以连上去了,就可以关掉远程控制了

VBoxManage controlvm 虚拟机名称 vrde off

屏幕截图

VBoxManage controlvm <vm name> screenshotpng /tmp/<filename>.png

优雅的关机

vboxmanage controlvm 虚拟机名称 poweroff soft

开启vrde远程桌面

似乎需要先关机才能操作

VBoxManage modifyvm "VM name" --vrdeextpack default
VBoxManage modifyvm "VM name" --vrde on
VBoxManage modifyvm "VM name" --vrdeport 3391
VBoxManage modifyvm "VM name" --vrdeaddress 0.0.0.0

从硬盘+快照vdi文件恢复

假设备份的时候只复制了硬盘vdi文件和Snapshots的vdi文件,而忘记了备份vbox文件,如何恢复快照关系呢

找到 https://superuser.com/questions/1224554/recreate-virtualbox-machine-with-snapshots ,思路是创建个新的虚拟机 从base vdi开始打快照->编辑vbox将新的Snapshot指向下一个快照->继续打快照重复

其中就需要我们搞清楚快照的依赖关系,看文件修改的时间戳差不多可以知道,但如果没有这种信息也不必按照人家说的一个个加载尝试,可以使用这篇说到的VBoxManage internalcommands dumphdinfo来查看每个快照文件的parent是谁。