はじめに
VirtualBoxのインストールと仮想マシンの作成では、VirtualBoxのGUIを使って仮想マシンを作成する方法を解説しましたが、毎回GUIを使って仮想マシンを作成するのは、結構面倒な作業です。
そこで今回は、VirtualBoxのCLI(Command Line Interface)コマンドのVBoxManageを使って仮想マシンを作成する方法を解説します。
2013年10月05日 21時09分
VirtualBoxのインストールと仮想マシンの作成では、VirtualBoxのGUIを使って仮想マシンを作成する方法を解説しましたが、毎回GUIを使って仮想マシンを作成するのは、結構面倒な作業です。
そこで今回は、VirtualBoxのCLI(Command Line Interface)コマンドのVBoxManageを使って仮想マシンを作成する方法を解説します。
作業の前提条件は、下記のとおりです。
| ソフトウエア | バージョン |
|---|---|
| OS | Windows 7 Ultimate 32bit |
| Cygwin | Setup Version 2.831 |
| VirtualBox | 4.2.18 r88780 |
また、仮想マシンの作成時に使用されるデータは、下記のフォルダに保存します。
| データ | フォルダ |
|---|---|
| VirtualBox | F:¥VirtualBox |
| ISOイメージ | I:¥ISO |
作成する仮想マシンのスペックは、下記のとおりです。
| 項目 | 内容 |
|---|---|
| 仮想マシン名 | CentOS-6.4-x86_64-minimal |
| OS | CentOS 6.4 64bit |
| CPU | 2 |
| RAM | 1GB |
| HDD | 8GB |
| NIC数 | 1 |
| NIC型番 | Intel PRO/1000 MT Desktop (82540EM) |
| ネットワークタイプ | nat |
| ストレージコントローラー | SATA |
VBoxManageのコマンドラインオプションは、公式サイトで公開されていますので、必要に応じて参照して下さい。
以下の手順で、仮想マシンを作成します。
仮想マシン名を指定して、VirtualBox構成ファイルを作成します。
$ VBoxManage createvm --name CentOS-6.4-x86_64-minimal

作成した仮想マシン名をVirtualBoxに登録します。
登録が終了すると、VirtualBoxのGUIで仮想マシン名を確認することができます。
$ VBoxManage registervm F:/VirtualBox/CentOS-6.4-x86_64-minimal/CentOS-6.4-x86_64-minimal.vbox

仮想マシン名の登録だけでは、仮想マシンの設定が何もされていませんので、仮想マシンの設定を行います。
ここでは、上記の仮想マシンのスペックの他に、クリップボード共有を双方向に指定し、ブート順序も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

また、今回インストールするOSは、64bitですのでostypeにRedHat_64を指定しています。指定を間違えるとOSインストーラーが起動しませんので、注意して下さい。
なお、VirtualBoxがサポートするゲストOSの種別は、以下のコマンドで表示します。
$ VBoxManage list ostypes | grep ^ID

仮想ハードディスクを固定サイズで作成します。
--filenameオプションで仮想ハードディスクの保存先を指定できます。 今回は、VirtualBoxのデフォルトの保存フォルダを指定しています。
$ VBoxManage createhd --size 8192 --variant Fixed --filename F:/VirtualBox/CentOS-6.4-x86_64-minimal/CentOS-6.4-x86_64-minimal.vdi

仮想ハードディスクおよび、仮想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

ストレージコントローラーを追加したら、追加したストレージコントローラーの名前を指定して、仮想ハードディスクを割り当てます。
$ 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

仮想ハードディスクと同様に、仮想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

仮想マシンの設定が終了しましたので、仮想マシンを起動します。
$ VBoxManage startvm CentOS-6.4-x86_64-minimal

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



せっかくコマンドラインで、仮想マシンが作成できるようになっても、毎回コマンドを打ち込むのは、やはり面倒ですので、仮想マシンの作成から起動までをシェルスクリプトで 自動化します。
なお、本スクリプトは筆者の環境で動作するように作成しておりますので、本スクリプトの使用は自己責任でお願いします。
#!/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}