VBoxManageを使って仮想マシンを作成する

2013年10月05日 21時09分

201310052109VVBW00.png

はじめに

VirtualBoxのインストールと仮想マシンの作成では、VirtualBoxのGUIを使って仮想マシンを作成する方法を解説しましたが、毎回GUIを使って仮想マシンを作成するのは、結構面倒な作業です。
そこで今回は、VirtualBoxのCLI(Command Line Interface)コマンドのVBoxManageを使って仮想マシンを作成する方法を解説します。

前提条件

作業の前提条件は、下記のとおりです。

  1. 必要なソフトウエア
    ソフトウエアバージョン
    OSWindows 7 Ultimate 32bit
    CygwinSetup Version 2.831
    VirtualBox4.2.18 r88780
  2. データフォルダ

    また、仮想マシンの作成時に使用されるデータは、下記のフォルダに保存します。

    データフォルダ
    VirtualBoxF:¥VirtualBox
    ISOイメージI:¥ISO
  3. マシンスペック

    作成する仮想マシンのスペックは、下記のとおりです。

    項目内容
    仮想マシン名CentOS-6.4-x86_64-minimal
    OSCentOS 6.4 64bit
    CPU2
    RAM1GB
    HDD8GB
    NIC数1
    NIC型番Intel PRO/1000 MT Desktop (82540EM)
    ネットワークタイプnat
    ストレージコントローラーSATA

仮想マシンの作成

VBoxManageのコマンドラインオプションは、公式サイトで公開されていますので、必要に応じて参照して下さい。

以下の手順で、仮想マシンを作成します。

  1. 仮想マシン名の作成

    仮想マシン名を指定して、VirtualBox構成ファイルを作成します。

    $ VBoxManage createvm --name CentOS-6.4-x86_64-minimal
    
    201310052109VVBW01.png
  2. 仮想マシン名の登録

    作成した仮想マシン名をVirtualBoxに登録します。
    登録が終了すると、VirtualBoxのGUIで仮想マシン名を確認することができます。

    $ VBoxManage registervm F:/VirtualBox/CentOS-6.4-x86_64-minimal/CentOS-6.4-x86_64-minimal.vbox
    
    201310052109VVBW02.png
  3. 仮想マシンの設定

    仮想マシン名の登録だけでは、仮想マシンの設定が何もされていませんので、仮想マシンの設定を行います。

    ここでは、上記の仮想マシンのスペックの他に、クリップボード共有を双方向に指定し、ブート順序もHDD→DVD→NETに変更しています。

    $ VBoxManage modifyvm CentOS-6.4-x86_64-minimal --ostype RedHat_64 --memory 1024 --acpi on --ioapic on --cpus 2 --hwvirtex on --hwvirtexexcl on --nestedpaging on --largepages on --clipboard bidirectional --nic1 nat --nictype1 82540EM --cableconnected1 on --boot1 none --boot2 disk --boot3 dvd --boot4 net --usb off --usbehci off
    
    201310052109VVBW03.png

    また、今回インストールするOSは、64bitですのでostypeRedHat_64を指定しています。指定を間違えるとOSインストーラーが起動しませんので、注意して下さい。

    なお、VirtualBoxがサポートするゲストOSの種別は、以下のコマンドで表示します。

    $ VBoxManage list ostypes | grep ^ID
    
    201310052109VVBW04.png
  4. 仮想ハードディスクの作成

    仮想ハードディスクを固定サイズで作成します。

    --filenameオプションで仮想ハードディスクの保存先を指定できます。 今回は、VirtualBoxのデフォルトの保存フォルダを指定しています。

    $ VBoxManage createhd --size 8192 --variant Fixed --filename F:/VirtualBox/CentOS-6.4-x86_64-minimal/CentOS-6.4-x86_64-minimal.vdi
    
    201310052109VVBW05.png
  5. ストレージコントローラーの追加

    仮想ハードディスクおよび、仮想DVDドライブを割り当てるために、SATA(Serial ATA)コントローラーを追加します。
    sata以外にも、ide/sscsi/floppyを指定可能です。また、--bootable onを指定することで、Boot可能なコントローラーに設定しています。

    $ VBoxManage storagectl CentOS-6.4-x86_64-minimal --name SATA --add sata --sataportcount 5 --bootable on
    
    201310052109VVBW06.png
  6. 仮想ハードディスクの割り当て

    ストレージコントローラーを追加したら、追加したストレージコントローラーの名前を指定して、仮想ハードディスクを割り当てます。

    $ VBoxManage storageattach CentOS-6.4-x86_64-minimal --storagectl SATA --port 1 --type hdd --medium F:/VirtualBox/CentOS-6.4-x86_64-minimal/CentOS-6.4-x86_64-minimal.vdi
    
    201310052109VVBW07.png
  7. 仮想DVDドライブの割り当て

    仮想ハードディスクと同様に、仮想DVDドライブを割り当てます。
    インストールメディアは、CentOS-6.4-x86_64-minimal.isoを指定しています。

    $ VBoxManage storageattach CentOS-6.4-x86_64-minimal --storagectl SATA --port 2 --type dvddrive --medium I:/ISO/CentOS/CentOS-6.4-x86_64-minimal.iso
    
    201310052109VVBW08.png
  8. 仮想マシンの起動

    仮想マシンの設定が終了しましたので、仮想マシンを起動します。

    $ VBoxManage startvm CentOS-6.4-x86_64-minimal
    
    201310052109VVBW09.png


    DVDドライブから起動した後、インストーラーが起動します。

    201310052109VVBW10.png
    201310052109VVBW11.png
    201310052109VVBW12.png

仮想マシン作成スクリプト

せっかくコマンドラインで、仮想マシンが作成できるようになっても、毎回コマンドを打ち込むのは、やはり面倒ですので、仮想マシンの作成から起動までをシェルスクリプトで 自動化します。

なお、本スクリプトは筆者の環境で動作するように作成しておりますので、本スクリプトの使用は自己責任でお願いします。

#!/bin/sh

VMNAME=
ISOIMG=
DEBUG=0

while [ $# -gt 0 ]
do
  case $1 in
  -n) shift
    if [ $# -eq 0 ]; then
      echo "parameter error."
      exit
    fi
    VMNAME=$1
    ;;
  -i) shift
    if [ $# -eq 0 ]; then
      echo "parameter error."
      exit
    fi
    ISOIMG=$1
    ;;
  -v)  DEBUG=1;;
  *)  echo "parameter error."
    exit
    ;;
  esac
  shift
done

OSNAME=`echo $ISOIMG | sed 's/-.*$//'`

case ${OSNAME} in
CentOS|ubuntu) OSTYPE=RedHat;;
FreeBSD)       OSTYPE=${OSNAME};;
*)echo "Unknown OS ${OSNAME}" && exit;;
esac

[ "${VMNAME}X" = "X" ] && VMNAME=`echo ${ISOIMG} | sed 's/\.iso//'`

ISODVD="I:/ISO/$OSNAME/$ISOIMG"
BOXIMG="F:/VirtualBox/$VMNAME/$VMNAME.vbox"
HDDIMG="F:/VirtualBox/$VMNAME/$VMNAME.vdi"

if [ ${DEBUG} -eq 1 ]; then
  cat <<EOF
VMNAME: $VMNAME
ISOIMG: $ISOIMG
OSNAME: $OSNAME
OSTYPE: $OSTYPE
ISODVD: $ISODVD
BOXIMG: $BOXIMG
HDDIMG: $HDDIMG
EOF
fi
#
# VM名の作成
#
cat <<EOF
VBoxManage createvm --name $VMNAME
EOF

[ ${DEBUG} -eq 0 ] && VBoxManage createvm --name $VMNAME

#
# VM名の登録
#
cat <<EOF
VBoxManage registervm ${BOXIMG}
EOF

[ ${DEBUG} -eq 0 ] && VBoxManage registervm ${BOXIMG}

#
# VM設定の更新
#
cat <<EOF
VBoxManage modifyvm $VMNAME --ostype ${OSTYPE} --memory 512 --acpi on --ioapic on --cpus 2 --hwvirtex on --nestedpaging on --largepages on --clipboard bidirectional --nic1 nat --nictype1 82540EM --cableconnected1 on --boot1 none --boot2 disk --boot3 dvd --boot4 net --usb off --usbehci off
EOF

[ ${DEBUG} -eq 0 ] && VBoxManage modifyvm $VMNAME --ostype ${OSTYPE} --memory 512 --acpi on --ioapic on --cpus 2 --hwvirtex on --nestedpaging on --largepages on --clipboard bidirectional --nic1 nat --nictype1 82540EM --cableconnected1 on --boot1 none --boot2 disk --boot3 dvd --boot4 net --usb off --usbehci off

#
# 仮想HDDの作成
#
cat <<EOF
VBoxManage createhd --size 8192 --variant Fixed --filename ${HDDIMG}
EOF

[ ${DEBUG} -eq 0 ] && VBoxManage createhd --size 8192 --variant Fixed --filename ${HDDIMG}

#
# ストレージコントローラーの追加
#
cat <<EOF
VBoxManage storagectl $VMNAME --name SATA --add sata --portcount 5 --bootable on
EOF

[ ${DEBUG} -eq 0 ] && VBoxManage storagectl $VMNAME --name SATA --add sata --portcount 5 --bootable on

#
# 仮想HDDの割り当て
#
cat <<EOF
VBoxManage storageattach $VMNAME --storagectl SATA --port 1 --type hdd --medium ${HDDIMG}
EOF

[ ${DEBUG} -eq 0 ] && VBoxManage storageattach $VMNAME --storagectl SATA --port 1 --type hdd --medium ${HDDIMG}

#
# ISOイメージファイルの割り当て
#
cat <<EOF
VBoxManage storageattach $VMNAME --storagectl SATA --port 2 --type dvddrive --medium ${ISODVD}
EOF

[ ${DEBUG} -eq 0 ] && VBoxManage storageattach $VMNAME --storagectl SATA --port 2 --type dvddrive --medium ${ISODVD}

#
# VMの起動
#
cat <<EOF
VBoxManage startvm ${VMNAME}
EOF

[ ${DEBUG} -eq 0 ] && VBoxManage startvm ${VMNAME}