使用命令操作VirtualBox

最近一时头脑发热找了本汇编的书在啃,书中是使用手动操作VirtualBox挂载硬盘调试的不太方便,遂使用命令搞起,效果还不错。

VirtualBox是个免费的虚拟机软件,不论linux、win、mac下都可以直接安装使用。同时它还支持使用命令控制,感觉这一点给了开发者无限的想象空间和创造力。

而所有的操作都是一个VBoxManage命令完成的。现在整理一下:

下面我们以创建一个名为learnAsm的虚拟机为例,展示下基本的操作。

创建虚拟机

创建并注册

1
VBoxManage createvm --name learnAsm --register

删除虚拟机

(!!!会删除所有虚拟硬盘,谨慎操作!!!)

1
VBoxManage unregistervm --delete learnAsm

注册虚拟机

假如你注销了,或者从别人那里复制来的虚拟机文件,可以重新注册它

1
VBoxManage registervm <your vms path>/learnAsm.vbox

仅注销虚拟机

注销之后VirtualBox列表中显示了

1
VBoxManage unregistervm learnAsm

列出已有的虚拟机

1
VBoxManage list vms

设置系统类型Ubuntu_64

1
VBoxManage modifyvm learnAsm --ostype Ubuntu_64

设置内存大小1G

1
VBoxManage modifyvm learnAsm --memory 1024 #单位MB

建立虚拟磁盘

1
VBoxManage createmedium --filename HDD10G.vdi --size 10000 #单位MB

创建存储控制器IDE、SATA

1
2
3
4
5
6
VBoxManage storagectl learnAsm --name IDE --add ide --controller PIIX4 --bootable on
VBoxManage storagectl learnAsm --name SATA --add sata --controller IntelAhci --bootable on

# 移除
VBoxManage storagectl learnAsm --name IDE --remove
VBoxManage storagectl learnAsm --name SATA --remove

关联虚拟机磁盘

1
2
3
4
5
6
VBoxManage storageattach learnAsm --storagectl SATA --port 0 --device 0 --type hdd --medium HDD10G.vdi
VBoxManage storageattach learnAsm --storagectl IDE --port 0 --device 0 --type hdd --medium HDD10G.vdi

# 解除关联
VBoxManage storageattach learnAsm --storagectl SATA --port 0 --device 0 --type hdd --medium none
VBoxManage storageattach learnAsm --storagectl IDE --port 0 --device 0 --type hdd --medium none

增加光驱

关联光盘镜像文件

1
2
3
4
VBoxManage storageattach learnAsm --storagectl IDE --port 1 --device 0 --type dvddrive --medium ubuntu.iso

# 解除关联:
VBoxManage storageattach learnAsm --storagectl IDE --port 1 --device 0 --type dvddrive --medium none

设置CPU数量(必须打开IOAPIC)

1
2
VBoxManage modifyvm learnAsm  --ioapic on
VBoxManage modifyvm learnAsm --cpus 4

设置CPU运行峰值

1
VBoxManage modifyvm learnAsm --cpuexecutioncap 80

查看虚拟机信息

1
2
3
4
5
6
VBoxManage -v
VBoxManage list vms #列出虚拟机
VBoxManage list runningvms #列出正在运行的虚拟机
VBoxManage showvminfo learnAsm #显示虚拟机learnAsm的信息
VBoxManage list hdds #列出硬盘
VBoxManage list dvds #列出dvd

启动虚拟机

1
VBoxManage startvm learnAsm --type headless #--type headless参数是无窗口静默启动

保持状态关闭虚拟机

1
VBoxManage controlvm learnAsm savestate

放弃已保存的状态

1
VBoxManage discardstate learnAsm

断电关闭虚拟机

1
VBoxManage controlvm learnAsm poweroff

正常关机[不能彻底关闭,一直处于stopping状态]

1
VBoxManage controlvm learnAsm acpipowerbutton

常用的大概就这些吧。

我是配合Makefile使用的,这里附上,大家感兴趣可以看看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
ASM_FILE=c05_mbr.asm
DIST_PATH=.
VHD_FILE=$(DIST_PATH)/boot.vhd
VM_NAME=learn-asm

$(VHD_FILE): mbr.bin
-rm $(VHD_FILE)
VBoxManage convertfromraw mbr.bin $(VHD_FILE) --format VHD --variant Fixed

mbr.bin: $(ASM_FILE)
nasm -f bin $(ASM_FILE) -o mbr.bin -l mbr.list

run: $(VHD_FILE) change-vm-vhd
VBoxManage startvm $(VM_NAME)

stop:
-VBoxManage controlvm $(VM_NAME) savestate
-VBoxManage discardstate $(VM_NAME)

create-vm: $(VHD_FILE)
VBoxManage createvm --name $(VM_NAME) --register
VBoxManage modifyvm $(VM_NAME) --memory 64
VBoxManage storagectl $(VM_NAME) --name SATA --add sata --controller IntelAhci --bootable on

change-vm-vhd: $(VHD_FILE)
cp $(VHD_FILE) $(VHD_FILE).bk
-VBoxManage discardstate $(VM_NAME)
-VBoxManage storageattach $(VM_NAME) --storagectl SATA --port 0 --device 0 --type hdd --medium none
-VBoxManage closemedium disk $(VHD_FILE) --delete # 因为硬盘是重新删除创建的,uuid也变了,直接挂载无法启动。所以这里先删除,再挂载。
mv $(VHD_FILE).bk $(VHD_FILE)
VBoxManage storageattach $(VM_NAME) --storagectl SATA --port 0 --device 0 --type hdd --medium $(VHD_FILE)

unregister-vm:
-VBoxManage unregistervm $(VM_NAME)

delete-vm:
-VBoxManage unregistervm --delete $(VM_NAME)

clean :
-rm -rf *.vhd *.bin *.list

参考:

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信