我从桌面运行一个脚本,根据需要创建虚拟机(如下所示)。
当脚本从我的桌面执行时(几乎总是如此),VM(<name>.vbox
)保存到~/VirtualBox VMs/<name>
但硬盘驱动器(<name>.vdi
)保存到我的桌面。然后我必须移动硬盘并修复*.vbox
文件中的位置。
VBoxManage showvminfo
未提供目录位置(尽管可能会从相关字段中解析)。
VBoxManage
有一个setproperty
提供machinefolder
,但它没有相应的getproperty
。调用VBoxManage setproperty machinefolder
(不带参数)会导致错误。
如何获取VBoxManage
用于保存虚拟机的目录?
MEDIA=ubuntu-12.04.3-server-amd64.iso
VMNAME=openstack-swift-2
VMOSTYPE=Ubuntu_64
##########################################
# Public network vboxnet0 (10.1.0.0/16)
VBoxManage hostonlyif create
VBoxManage hostonlyif ipconfig vboxnet0 --ip 10.1.0.254 --netmask 255.255.0.0
##########################################
# Private network vboxnet1 (10.2.0.0/16)
VBoxManage hostonlyif create
VBoxManage hostonlyif ipconfig vboxnet1 --ip 10.2.0.254 --netmask 255.255.0.0
##########################################
# VirtualBox Machine
VBoxManage createvm --name "$VMNAME" --ostype "$VMOSTYPE" --register
# VirtualBox CPU and Memory
VBoxManage modifyvm "$VMNAME" --cpus 1 --cpuexecutioncap 80 --memory 2048
# VirtualBox Network
VBoxManage modifyvm "$VMNAME" --nic1 nat \
--nic2 hostonly --hostonlyadapter2 vboxnet0 \
--nic3 hostonly --hostonlyadapter3 vboxnet1
# VirtualBox DVD
VBoxManage storagectl "$VMNAME" --name "IDE Controller" \
--add ide --controller PIIX4 --hostiocache on --bootable on
VBoxManage storageattach "$VMNAME" --storagectl "IDE Controller" \
--type dvddrive --port 0 --device 0 --medium "$MEDIA"
# VirtualBox HDD
VBoxManage createhd --filename "$VMNAME".vdi --size 20480
VBoxManage storagectl "$VMNAME" --name "SATA Controller" \
--add sata --controller IntelAHCI --hostiocache on --bootable on
VBoxManage storageattach "$VMNAME" --storagectl "SATA Controller" \
--type hdd --port 0 --device 0 --medium "$VMNAME.vdi"
答案 0 :(得分:5)
这是我为其他人徘徊在这个页面上的想法。首先,对list
使用systemproperties
。这会得到类似的东西:
$ VBoxManage list systemproperties
API version: 4_2
Minimum guest RAM size: 4 Megabytes
Maximum guest RAM size: 2097152 Megabytes
Minimum video RAM size: 1 Megabytes
Maximum video RAM size: 256 Megabytes
Minimum guest CPU count: 1
Maximum guest CPU count: 32
...
Default machine folder: /home/jwalton/VirtualBox VMs
VRDE auth library: VBoxAuth
Webservice auth. library: VBoxAuth
然后解析Default machine folder
。 awk
用于修剪前导空格(您必须小心,因为路径中有空格):
TPATH=`VBoxManage list systemproperties | grep -i "default machine folder:" \
| cut -b 24- | awk '{gsub(/^ +| +$/,"")}1'`
VMPATH="$TPATH/$VMNAME"
然后,使用以下命令修改HDD创建:
VBoxManage createhd --filename "$VMPATH/$VMNAME.vdi" --size 20480
VBoxManage storagectl "$VMNAME" --name "SATA Controller" \
--add sata --controller IntelAHCI --hostiocache on --bootable on
VBoxManage storageattach "$VMNAME" --storagectl "SATA Controller" \
--type hdd --port 0 --device 0 --medium "$VMPATH/$VMNAME.vdi"
答案 1 :(得分:0)
我使用前面提到的解决方案已有一段时间:
VBoxManage list systemproperties | grep "Default machine folder"
但是有一天我的磁盘已满,所以我不得不将“默认计算机文件夹”更改为其他位置。
我无所事事的解决方案突然无法找到现有的磁盘映像!
所以我这样改变了:
MYPATH=`VBoxManage showvminfo "<machine name>" 2>/dev/null | grep -E "^Config file" | cut -d: -f2 | sed -s 's#^[[:space:]]*##g'`; echo "${MYPATH%/*}"
它读取现有的计算机文件夹并提取其路径。它仍然需要常用的Linux命令(sed,grep,cut)。最后一个“ echo”命令是特定于bash的。
这并不完美:我仍然必须区分新的和/或现有的VM计算机。 =>我将两种解决方案放在一起:
最后一线(只需替换“ VM机器名称”,在其中两次!):
VMPATH=`VBoxManage showvminfo "VM machine name" 2>/dev/null | grep -E "^Config file" | cut -d: -f2 | sed -s 's#^[[:space:]]*##g'`; VMDEFAULTPATH=`VBoxManage list systemproperties | grep "Default machine folder" | cut -d: -f2 | sed -s 's#^[[:space:]]*##g'`; if [ "$VMPATH" != "" ];then echo "${VMPATH%/*}"; else echo "${VMDEFAULTPATH}/VM machine name"; fi