#!/bin/bash # # Script to add an aditional disk to a VM # if [ "$UID" -eq 0 ] then echo "This script should NOT be run as root." exit 1 fi # # Source config file if [ ! -f ~/.vbconfig ]; then echo "Config File ~/.vbconfig not found!" echo "Run: set-folders to create .vbconfig" exit 1 fi . ~/.vbconfig # if [ $# -ne 1 ]; then echo "Usage for $0 : VM Name required as argument." exit 1 fi # # Virtual Machine Name VB_VM_NAME=$1 # VM_EXISTS=`$VB_BIN_LOC/110-vm-exists.bash "${VB_VM_NAME}"` if [ $VM_EXISTS -ne 1 ]; then echo "Invalid VM Name: $VB_VM_NAME" exit 1 fi # VM_POWERED_OFF=`VBoxManage showvminfo ${VB_VM_NAME}|\ grep State|grep -c "powered off"` if [ $VM_POWERED_OFF -eq 0 ]; then echo "VM $VB_VM_NAME is up or saved. Please power-down VM to continue" echo "Exiting ..." exit 1 fi # # Determine Name of SATA Controller # This script not tested with multiple controllers! VB_VM_SATA=`VBoxManage showvminfo ${VB_VM_NAME}| \ grep "Storage Controller Name"|cut -d":" -f2|sed 's/^[ ]*//'` # echo " List of attached disks below ... " VBoxManage showvminfo ${VB_VM_NAME}|grep "${VB_VM_SATA}" echo read -e -p "Enter the new disk size (GB) :" -i "100" VB_VM_DISK_SIZE_GB echo "Note: Disk name is prefixed with ${VB_VM_DISK}_" read -e -p "Enter the new disk name (VDI):" -i "extradata" VB_VM_DISK_NAME # echo " Choose a Controller/Port/Device that is not in use. Avoid knocking off an existing device. It is possible you may need to increase # of ports. Enter the SATA Controller details for CD/DVD Device: " SATAC=$VB_VM_SATA read -e -p "Sata Controller : " -i "$SATAC" SATAC read -e -p "Sata Port # : " -i "$SATAP" SATAP read -e -p "Sata Device # : " -i "$SATAD" SATAD # SATACPD="$SATAC (${SATAP}, ${SATAD})" SATACPD1="$SATAC[ ]*(${SATAP},[ ]*${SATAD}):" INUSE=`VBoxManage showvminfo "${VB_VM_NAME}" | grep -c "$SATACPD1"` if [ $INUSE -gt 0 ]; then echo "SATA: $SATACPD is already in use" echo read -e -p "Override (y/n) : " -i "n" SATAOV if [[ $SATAOV == "y" || $SATAOV == "Y" ]]; then echo "Overriding ..." else exit 1 fi fi # # Disk related variables to create disk VB_VM_DISK="disk" # Prefix .vdi files VB_VM_PATH=${VB_VMS_LOC}/${VB_VM_NAME} # Disk Sizes - Adjust as required, sizes are in MB VB_VM_DISK_SIZE=$(echo "$VB_VM_DISK_SIZE_GB * 1000"|bc) # VBoxManage createhd --filename $VB_VM_PATH/${VB_VM_DISK}_${VB_VM_DISK_NAME}.vdi \ --size $VB_VM_DISK_SIZE # VBoxManage storageattach ${VB_VM_NAME} \ --storagectl "${SATAC}" --port $SATAP --device $SATAD \ --type hdd --medium $VB_VM_PATH/${VB_VM_DISK}_${VB_VM_DISK_NAME}.vdi # echo echo "Disk created and attached to VM. Next step will start VM. Safe to break out of script at this point. " read -p "Press [Enter] key to continue or [Ctrl-C] to break ..." echo " Starting VM in headless mode. Login to configure new disk for use by O/S. " VBoxManage startvm ${VB_VM_NAME} --type headless # echo "Done!" exit