オフィシャルサイトに従い,Ubuntu Server 14.04 64bitを使ってUbuntu 14.4をdomUとしてインストールする.
1. Ubuntu Serverをインストールする
- 普通にインストールよいが,パーティションのところで”Guided - use the entier disk and setup LVM”を選択し,Dom0(つまり今インストールしているUbunu Server)の領域を最小限サイズにして残りをLVMボリュームとして残しておく.これを失敗するとXenの中でdomUに割り当てる領域が確保できなくなる.
- インストール後,以下のコマンドでaptをアップデート.
- $sudo apt-get update
- $sudo apt-get upgrade
2. Xenのインストール
- 以下のコマンドを実行
- sudo apt-get install xen-hypervisor-amd64
- sudo reboot
- うまくいっていれば,リブート後,ブートローダーでXenのメニューが出てくる.また,ブートの途中のメッセージが変わる.
- ログイン後,以下のコマンドで確認
- $sudo xl list
- これで”Domain-0″が見えていれば,今起動しているのはXenからdom0として起動したUbuntuということになる.
3. ネットワークの設定
以下の前提で話を進める.
- ホスト側物理IP:172.21.33.20
- ホスト側物理インタフェース:em1
- デフォルトゲート: 172.21.33.1
- bridge-utilsのインストール
- $sudo apt-get install bridge-utils
- ただし,これは既にインストールされているかもしれない.
- ブリッジインタフェースの定義(重要). xenbr0という仮想インタフェースを作成し,em1でブリッジする
- $sudo vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto em1 xenbr0 –> xenbr0を加える
iface em1 inet static –> ホスト側インタフェース(em1)の設定
address 172.21.33.20
netmask 255.255.255.0
network 172.21.33.0
broadcast 172.21.33.255
gateway 172.21.33.1
dns-nameservers 172.21.33.16
dns-search fd.ise.shibaura-it.ac.jpまちがい.これは行う必要はない.
iface xenbr0 inet static –> ブリッジインタフェースの作成.
address 172.21.33.22
netmask 255.255.255.0
network 172.21.33.0
broadcast 172.21.33.255
gateway 172.21.33.1
dns-nameservers 172.21.33.16
bridge_ports em1 –> em1にこのインタフェース(xenbr0)を加える.
iface em1 inet manual –>この意味は不明.これは,xenbr0を実行する物理的なインタフェースがem1で,そこにはIPはふらないのでこの設定が必要.
- 定義した変更を反映
- $sudo ifdown em1
- sudo ifup xenbr0
- sudo ifup em1
- ifconfigなどでxenbr0が作成され,IPが付いているかを確認する
4. 論理ボリュームの作成
- 論理ボリュームブループ(vgs)に論理ボリューム(lv)を作成する.まず,論理ボリュームグループを確認する
- $sudo vgs
この例ではxen-vgという論理ボリュームグループが確認できる
- 論理ボリュームをlv_vm_ubuntuという名前で作成する
- $sudo lvcreate -L 30G -n lv_vm_ubuntu /dev/xen-vg
- 作成された論理ボリュームを確認する
- $sudo lvs
この例では,lv_vm_ubuntuという名前で30G確保されていることがわかる.
5. ゲストのインストール
- domUにインストールするイメージを取得する
- $sudo mkdir -p /var/lib/xen/images/ubuntu-netboot/trusty14LTS
- $cd /var/lib/xen/images/ubuntu-netboot/trusty14LTS
- $wget http://ftp.riken.jp/Linux/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/vmlinuz
- $wget http://ftp.riken.jp/Linux/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/initrd.gz
- 設定ファイルの準備.Xenでは,インストールイメージの指定,CPUの数,メモリ量などを設定ファイルに記述し,xlコマンドを使ってインストールや起動を行う.以下は,ゲスト名dom0, 仮想cpu2, メモリ1024MBの設定を行う例.設定ファイルはubun1.cfg
- $cd /etc/xen
- $sudo cp xlexample.pvlinux ubud1.cfg
- $vi ubud1.cfg
# Guest name
name = “dom1″ –> ゲストのホスト名
# Kernel image to boot
kernel = “/var/lib/xen/images/ubuntu-netboot/trusty14LTS/vmlinuz” –>ダウンロードしたイメージの場所
# Ramdisk (optional)
ramdisk = “/var/lib/xen/images/ubuntu-netboot/trusty14LTS/initrd.gz” –> ダウンロードしたイメージの場所
#bootloader = “/usr/lib/xen-4.4/bin/pygrub” –> 作成したイメージから起動する場合にはコメントを外す
# Kernel command line options
extra = “root=/dev/xvda1″ –> 意味不明
# Initial memory allocation (MB)
memory = 1024 –> メモリサイズ
# Maximum memory (MB)
# If this is greater than `memory’ then the slack will start ballooned
# (this assumes guest kernel support for ballooning)
#maxmem = 512
# Number of VCPUS
vcpus = 2 –> CPUの数
# Network devices
# A list of ‘vifspec’ entries as described in
# docs/misc/xl-network-configuration.markdown
vif = [ 'bridge=xenbr0' ] –> ゲストが利用する仮想インタフェースの名前.
disk = [ '/dev/xen-vg/lv_vm_ubuntu,raw,xvda,rw' ] –> ディスクイメージの設定.xen-vmとlv_vm_ubuntuを指定
- ゲストをインストールするときにはkernel, ramdiskを指定し,インストールして作成したイメージから起動するときにはbootloaderのコメントを外し,kernel, ramdiskをコメントアウトする
- インストールの実行.編集した設定ファイルを指定してゲストを起動する.今回はインストールになる.
- sudo xl create -c /etc/xen/ubud1.cfg
- インストールの途中,インターフェースの指定では,ホストと同一ネットワークを指定し,IPアドレスは変更する.
- インストールが終わると再起動されるが,そのままホストのコンソールに戻される.動いているかどうか確認するには以下のコマンドを実行
- xl list
- これでDomain-0だけでなく,dom1(指定した名前)のゲストが見えるはず
6. ゲストの起動と確認
- ゲストを落とす
- $sudo xl shutdown ubud1
- ゲストをインストールしたイメージから起動する
- 前述したように,設定ファイルのbootloaderのコメントを外し,kernel, ramdiskをコメントアウトする
- $sudo xl create -c /etc/xen/ubud1.cfg
- ゲストにリモートからログイン
- ホストにログインし,ゲストのIPを指定してsshなどを行ってみる.
- $ssh 172.21.33.22
- ログインできていたら成功
7. 2台目以降の仮想マシン
これから仮想マシンを増やすときには,論理ボリュームを作成,設定ファイルの作成し,xl createで作ればよい.ブリッジインタフェースは使いまわすこと!
8. domUをバックアップして再利用
//スナップショットを取る(-s)
lvcreate -L 5G -s -n ‘pracb1_2′ /dev/xen-vg/prac1_2
//イメージを作る
dd if=/dev/xen-vg/pracb1_2 of=/home/hiroaki/snapshot.img bs=1k
//消す
lvremove /dev/xen-vg/pracb1_2
//論理ボリュームを作る
lvcreate -L 5G -n ‘pracb1_2′ /dev/xen-vg
//イメージから戻す
dd if=/home/hiroaki/snapshot.img of=/dev/xen-vg/pracb1_2 bs=1k