2013年8月25日

【仮想マシン】XAPI(xeコマンド)の使い方【Xen】



ネットの情報を漁っていると、「XenServerはXenCenterで仮想マシンできるんだぜ!」っていう情報はあふれるほどあるんですが、コンソールから作る方法はあまりありませんでした。

なので、今回はXenServerを操作するコマンド、xeコマンドを利用して仮想マシンの作成から作るための方法を紹介します。




■XenServerとXenについて

以前説明をしたようなしていないような。。。とりあえず整理するためにもう一度書いておきます。
Xenについて調べていると、「LinuxにインストールしているXen」と「XenServerのXen」の2つにたどり着くことがよくあります。
同じXenなのだからといってどっち見てもいいというわけではありません。もう作りが全く違います。
「LinuxにインストールしているXen」と「XenServerのXen」の違いは以下のような感じです。

→デフォルトのツールスタック
「LinuxにインストールしているXen」はxm
「XenServerのXen」はXAPI

→Xenを操作するためのコマンド
「LinuxにインストールしているXen」はxm
「XenServerのXen」はxe

→操作感
「LinuxにインストールしているXen」はLinuxと同じ
(コンフィグファイル編集→サービスの起動)
「XenServerのXen」はどちらかと言えばNW機器のよう
(コンフィグを投入→投入結果の反映確認)

今回僕が取り上げるのは「XenServer」側の情報です。人によって使い勝手なども異なるのでxmのほうが使いやすいと感じる人もいるとは思いますが、NEとしてCisco機などを中心に触っている僕としてはXAPIのほうがすんなり入れた感じがあります。なので今回はこちらで解説させて頂きます。

XenServerの情報と言っても普通のLinuxでもXAPIを使えるようにはできるので、同じように操作することはできます。
(実際に僕はUbuntuServerでXAPI運用をしています)


■XAPIとxeコマンド

XenServerをコンソールから操作する場合、xeコマンドを利用します。

xeはXAPIを利用するためのCLIツールのようなものみたいです。
で、XenCenterがXAPIを利用するためのGUIツールの位置づけという事になります。
(ちなみにLinuxではopenxenmanagerというGUIツールが存在します)

Xenをコンソールから操作する方法として、virt-managerを利用して仮想マシンを作ったり動かしたりする資料は散見されます。
ただこれ、Linux特有のごちゃごちゃしてる設定とかしないといけなくて非常に面倒なんですよね。

xeコマンドのように一つ一つコマンド打ちながら設定していったほうがやりやすいし、ミスした時の切り分けもしやすいような気がします(個人の意見)


■XAPIの構成

XAPIを利用する上で、まずはざっくりな構成を理解しておいたほうが入りやすいと思います。(下図)

ざっくりなXAPIのシステム構成図

XAPIの構成は(他のページでもあるけど)こんなかんじです。
下に行くほど物理デバイスに近づきます。
一応xeコマンド使うに伴って上記構成図は把握しておくといいですね。

1.VM
仮想マシン(Virtual Mashine)
本体だよ。OSとか動くよ。
2.VIF
仮想インターフェース(Virtual InterFace)
DomainU(仮想マシン側)から見たeth0〜…と認識される。
3.Network
仮想ネットワーク部。
vSwitchとかブリッヂとか使える。
4.PIF
物理インターフェース(Phisical InterFace)
Domain0から見るとeth0〜…と認識される。
5.VBD
仮想ブロックデバイス(Virtual Block Device)
仮想ディスクをデバイスとして接続する部分。
DiskとCDで分類されている。
6.VDI
仮想ディスクインフラストラクチャ(Virtual Disk Infrastracture)
仮想ディスクイメージなど、データの本体。
物理ディスクをmountしてlsしてみると、.vdi拡張子のファイルが見えると思います。
7.SR
ストレージレポジトリ(Strage Repository)
物理ブロックデバイスをXenで管理している場所。
ハードディスクもイメージファイルもネットワークストレージもディスクドライブも、全部SRに登録される。
8.PBD
物理ブロックデバイス(Phisical Block Device)
ハードディスクとかディスクドライブとか。

なお、VDIとSRの違いがわかりづらいところがあると思います。
例えば80GBあるハードディスクから40GBの仮想ディスクを作成するとします。
PBDからデバイス情報をSRに、80GBのディスク情報を登録します。(この時点ではまだ80GB)
SRから必要な分だけディスクサイズを指定して40GBの仮想ディスクを作成します。

■今回の仮想マシン構築環境の解説

今回xeコマンドで仮想マシンを作成するにあたって、下記条件で物理構築を行なっているものとします。
(自分が構築した環境)
・CPU:Intel Core i7 3770T (4コア/8スレッド 2.5GHz)
・メモリ:PC3-12800(コアクロック数 1600MHz, 4GBx2枚)
・ストレージ:SSD(SATA3/128GB)
・物理IF:eth0(オンボード、GiEx1)

上記性能より、仮想マシン(DomainU #1)に割り当てるリソースは下記のとおりになります。
・CPU:2コア
・メモリ:2GB
・ストレージ:15GB
・仮想IFx1

とりあえずXenServerを何も考えずに突っ込んだ状態を考えます。
インストールするOSなどは以下の条件

・SSDのうち、5GBほどをXenServer(Domain0)を割り当ててあり、残りはLVMにしてあります。
・インストールするOSはUbuntu 12.04LTS for Desktop


上図を書き換えたものに当てはめると下図のようになります。


XAPIシステム構成図を元にしたローカル構築環境


■仮想マシンを作ってみる

Xenにおいて仮想マシンを作成する際、テンプレートを利用して作成しなければなりません。
テンプレートは各種OS用に最適化されていますが、今回のようにテンプレートが用意されていない場合は「Other install media」のテンプレートを利用します。

▼作成手順
①.VMの作成
②.VIFの作成
③.DISKの追加
④.CDの追加
⑤.初回起動〜インストール

今回は自分の設定した環境での最短の手順で解説しています。
SRやNetworkは特に何も設定しなくても存在するはずですが、環境やXenのバージョンによっては若干の違いがある可能性があります。ない場合はその都度追加することも可能です。

①.VMの作成

まずは仮想マシンの本体を作成します。
テンプレートから仮想マシンを作った上で、インストールするOSに合わせた設定を行っていきます。

1.テンプレートの確認
仮想マシンはテンプレートを元にして作成します。
テンプレートにはCPU、ディスク容量、メモリ容量、デバイス上限数などの元から設定されています。
テンプレートは様々なOSが最初から揃っていますが、今回のようにテンプレートの存在しないOSをインストールしたい場合は「Other install media」という名前のテンプレートを利用します。

# xe template-list
  〜 略 〜

uuid ( RO)                : 3630cb30-99a5-9665-ff7b-1425ba5ae133
          name-label ( RW): Other install media
    name-description ( RW): Template which allows VM installation from install media
  〜 略 〜

name-labelがOther install mediaの項目があることを確認してください。

2.VMの作成
以下のコマンドを入力します。

# xe vm-install template="Other install media" new-name-label="Ubuntu12.04LTS"
db0288bd-16bc-65de-8bb6-42e5a9aa0379

コマンドを入力してEnterを押下すると赤字の文字列(UUID)だけが表示されます。
このUUIDはVMを管理していく上で必要になってきますので、どこかメモ帳に保存しておいてもいいかもしれません。

3.VMのパラメータを確認する
先ほど作成したVMのパラメータを確認します。
以下のコマンドを入力します。

# xe vm-param-list uuid=db0288bd-16bc-65de-8bb6-42e5a9aa0379
  〜 略 〜

             memory-static-max ( RW): 268435456
            memory-dynamic-max ( RW): 268435456
            memory-dynamic-min ( RW): 268435456
             memory-static-min ( RW): 134217728
                     VCPUs-max ( RW): 1
              VCPUs-at-startup ( RW): 1
           allowed-VBD-devices (SRO): 0; 1; 2; 3
           allowed-VIF-devices (SRO): 0; 1; 2; 3
                  other-config (MRW): mac_seed: c1d70cbf-1cea-8422-1f20-ff89e76b3887; install-methods: cdrom
  〜 略 〜


大量にパラメータが表示されますので必要な部分だけ抜粋したのが上記項目です。
まずは各項目の意味を説明します。

memory-static-max
memory-dynamic-max
memory-dynamic-min
memory-static-min
メモリの上限値と下限値を設定しています(Byte)。上の項目から順に大きい値を設定してやる必要があります。
メモリの値を固定値にしたい場合はmemory-dynamic-maxとmemory-dynamic-minの値を同じ値にします。

VCPUs-at-startup
VCPUs-max
起動時の仮想CPU数とその上限値を設定します。
仮想CPU数の上限は物理CPU数の数です。(今回の僕の環境では8が上限)

allowed-VBD-devices
allowed-VIF-devices
仮想デバイスの接続状況が表示されています。(パラメータの書き換え不可)
すでに接続されているデバイスは数字が表示されません。例えばVIFデバイスの2番目にVIFが接続された場合、下記のような表示になります。

           allowed-VIF-devices (SRO): 0; 2; 3

other-config
いわゆる仮想マシンのオプション設定です。
特に確認しなければいけない項目は「install-methods: cdrom」の部分です。この設定が無いと、CDストレージからのOSインストールをすることはできません。
設定がない場合は以下のコマンドで追加してください。
# xe vm-param-set uuid=db0288bd-16bc-65de-8bb6-42e5a9aa0379 other-config:install-methods=cdrom

4.パラメータの設定
上記で確認したパラメータを今回インストールするデスクトップ版Ubuntuに合わせて設定していきます。

# xe vm-param-set uuid=db0288bd-16bc-65de-8bb6-42e5a9aa0379 VCPUs-max=2 VCPUs-at-startup=2
# xe vm-memory-limits-set uuid=db0288bd-16bc-65de-8bb6-42e5a9aa0379 static-max=2147483648 dynamic-max=2147483648 dynamic-min=2147483648 static-min=2147483648

メモリ容量の設定はvm-param-setでも設定することができますが、vm-memory-limits-setを覚えておいたほうがいいでしょう。という意味でこちらを使いました。(例えばDomain0のメモリ容量を変更したい場合、こちらで変更することができます)

以上でVMの外枠作りは完了です。必要に応じて、xe vm-param-listを再度打って設定したパラメータが正しく設定されたことを確認してもいいかもしれません。

次はネットワークと接続します。

②VIFの作成

VIFを設定することでインターネット接続が可能になります。
VIFの作成はそれほど難しくありませんのでサラっと説明したいと思います。

1.Networkの確認
VIFを接続する先のネットワークをまずは確認します。

以下のコマンドを入力します。

# xe network-list
  〜 略 〜

uuid ( RO)                : 10eeb14f-376c-1627-de7e-86595122dad8
          name-label ( RW): Pool-wide network associated with eth0
    name-description ( RW): 
              bridge ( RO): xenbr0
  〜 略 〜

仮想マシンと接続する仮想ブリッジIF(xenbr0)のuuidを確認します。

2.VIFの作成
以下のコマンドを入力します。
# xe vif-create network-uuid=10eeb14f-376c-1627-de7e-86595122dad8 vm-uuid=db0288bd-16bc-65de-8bb6-42e5a9aa0379 device=0 mac=00:16:3e:00:00:01
811343f5-b8e3-7633-6396-9405f35bcee8

コマンドを入力して成功するとVIFのuuidだけ表示されます。
各パラメータの解説は以下のとおりです。

network-uuid
xe network-listで確認したxenbr0のuuidです。

vm-uuid
接続したいVMのuuidです。指定した仮想マシンには自動的に接続されます。

device
vm-uuidで指定したVMのデバイス番号を指定します。
xe vm-param-listで確認した、allowed-VIF-devicesパラメータに表示されている数字を指定します。
今回はまだ何も接続されていないはずですので、0を指定しています。

mac
VIFのMACアドレスを指定します。未指定の場合は自動で割り当てられます。
ちなみにXenに割り当てられているmacアドレスは00:16:3e:xx:xx:xxだそうです。あえてこれに倣う必要はないとは思いますが、一応こういうのもあるんだという事でおぼえておくと良いかもしれません。

3.VIFの確認
VIFが作成され、正しく仮想マシンに接続されていることを確認します。

# xe vm-vif-list uuid=db0288bd-16bc-65de-8bb6-42e5a9aa0379
uuid ( RO)                  : 811343f5-b8e3-7633-6396-9405f35bcee8
         vm-name-label ( RO): YKHG02
                device ( RO): 0
                   MAC ( RO): 00:16:3e:00:00:01
          network-uuid ( RO): 10eeb14f-376c-1627-de7e-86595122dad8
    network-name-label ( RO): Pool-wide network associated with eth0

device=0で指定したVIFが存在することを確認します。

③.DISKの作成

1.SRの確認
仮想ディスクのリソースとなるSRを確認します。

以下のコマンドを入力します。
# xe sr-list

uuid ( RO)                : b0745d9c-9dcb-55eb-1349-aa4968e20a22
          name-label ( RW): ADATA SSD 128GB
    name-description ( RW): 
                host ( RO): YKHV01
                type ( RO): ext
        content-type ( RO): ext3

name-labelを元にそれっぽいストレージを探し、uuidを覚えておきましょう。

2.DISKの作成
以下のコマンドを入力します。

# xe vm-disk-add vm="YKHG02" sr-uuid=b0745d9c-9dcb-55eb-1349-aa4968e20a22 disk-size=1635778560 device=0
#

Enter押下した時に何も出力されなければ成功です。


各パラメータの解説は以下のとおりです。

vm
仮想マシン名を指定します。
xe vm-listコマンドを打った時のname-labelの項目を指定してください。

sr-uuid
仮想ディスクのソースとなるSRリポジトリのUUIDを指定します。
1.SRの確認 で調べたUUIDを入力してください。

disk-size
仮想ディスクの容量を指定します。(Byte)
今回は15GBの仮想ディスクを作成するので1635778560(Byte)を指定しています。

device
DISKを接続する仮想ポート番号を指定します。
今回はまだ何も接続されていないはずですので0を指定しています。
どのポートが使えるかを調べるには xe vm-param-list コマンドを打ち、allowed-VBD-devicesの項目を確認します。
           allowed-VBD-devices (SRO): 0; 1; 2; 3
           allowed-VIF-devices (SRO): 1; 2; 3
どのポートが開いているかは、VIFの項番でも解説しましたが、表示されている数字が開いているポートとなります。



3.DISKの確認

以下のコマンドを入力します。

# xe vm-disk-list vm="YKHG02"
Disk 0 VBD:
uuid ( RO)             : 1d7040df-51e0-5800-e8e1-16faa17f373c
    vm-name-label ( RO): YKHG02
       userdevice ( RW): 0


Disk 0 VDI:
uuid ( RO)             : ac709d73-6043-4911-a806-b14229e6c16a
       name-label ( RW): Created by xe
    sr-name-label ( RO): ADATA_SDD_128GB
     virtual-size ( RO): 1635778560

userdeviceが0になっているVBDがあることを確認します。(device=0で設定した部分です)


④CDの追加

インストールするOSのディスクイメージを仮想マシンに追加します。
項番名ではCDの追加となっていますが、DVDディスクイメージでも物理ディスクドライブでも大丈夫です。
今回はXenのコマンドに合わせて便宜上CDと呼ばせていただきます。

1.ディスクイメージの取得〜SRに取り込む
Ubuntuのインストールディスクイメージをミラーサイトから拾ってきて、Xenで利用できるように認識させます。

まずはディスクイメージを保存するディレクトリを確認します。

# xe pbd-list

uuid ( RO)                  : 842f6303-7610-851a-0a27-165b996f3a12
             host-uuid ( RO): 8bdd3544-4d4b-7c5b-d77f-eba4607c6772
               sr-uuid ( RO): c0b9982c-8a79-7278-f411-2c3077753702
         device-config (MRO): location: /usr/share/xcp/packages/iso; legacy_mode: true
    currently-attached ( RO): true

device-configの項目がlocationになっているデバイスを調べ、sr-uuidの値を覚えておきます。

カレントディレクトリを上記locationの場所に移動し、インストールディスクイメージを取得します。
# cd /usr/share/xcp/packages/iso
# wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu-releases/precise/ubuntu-12.04.3-desktop-i386.iso

ダウンロードが完了したらSRリポジトリの更新を行います。

# xe sr-scan uuid=c0b9982c-8a79-7278-f411-2c3077753702

VDIを確認して先ほどダウンロードしたイメージファイルが認識されていることを確認します。

# xe vdi-list 


  〜 略 〜
uuid ( RO)                : 893b9440-19d3-4ed4-88f6-f8323a8e75e8
          name-label ( RW): ubuntu-12.04.3-desktop-i386.iso
    name-description ( RW): 
             sr-uuid ( RO): c0b9982c-8a79-7278-f411-2c3077753702
        virtual-size ( RO): 741343232
            sharable ( RO): false
           read-only ( RO): true
  〜 略 〜


2.CDの追加

取り込んだイメージファイルを作成した仮想マシンに追加します。

# xe vm-cd-add vm="YKHG02" device=1
#

Enter押下した時に何も出力されなければ成功です。


3.CDの確認
以下のコマンドを入力します。

# xe vm-cd-list vm="YKHG02"
CD 0 VBD:
uuid ( RO)             : 7aa4c930-42d5-4701-d085-76d8af608ed3
    vm-name-label ( RO): YKHG02
            empty ( RO): false
       userdevice ( RW): 1


CD 0 VDI:
uuid ( RO)             : 893b9440-19d3-4ed4-88f6-f8323a8e75e8
       name-label ( RW): ubuntu-12.04.3-desktop-i386.iso
    sr-name-label ( RO): XenServer Tools
     virtual-size ( RO): 741343232

イメージファイル名が表示されていれば成功です。

⑤.初回起動〜インストール

仮想マシンを起動する準備が完了したので、実際に起動してインストールを行います。

1.仮想マシンを起動する。
仮想マシンを起動する際は以下のコマンドを入力します。

# xe vm-start vm="YKHG02"

何も表示されなければ起動できたことになります。
起動状況は xe vm-list の power-state の項目で確認することができます。


2.VNCで仮想マシンの画面を表示する。
Xenでは仮想マシンの画面はすべてVNCを用いて接続し、表示します。
インストールするOSがCUIのものであっても最低限初期設定の時はVNCを利用して設定をしなければなりません。
今回はVNCクライアントにUbuntu12.04にデフォルトで入っているRemminaを利用します。



左から2番めのアイコン、または「接続」→「新規(N)」を押下します。


プロトコルを「VNC - 仮想ネットワークコンピューティング」にします。

サーバー名をlocalhostまたはXenServerのアドレスを指定し、最後に「:1」を追加します。
(:1というのは仮想マシンの起動順で割り当てられている番号(VNCのTCPポート5901〜に相当する)なので、複数起動する場合は2,3,4...と変更してみてください)


3.普通にOSインストールをする
OSのインストール方法に関しては省略します。

■終わりに

今回は必要最低限の仮想マシン作成手順について紹介しました。他にも必要に応じてVDIを作成したりしてディスクを増設したり、物理ディスクドライブを追加したりなどもあります。
この記事書いただけでもう満足してしまっているので、多分次はないと思いますが、気分が向いたら書くかもしれません。多分書かないけど。

XAPI便利なのに、なんで使われないのかなぁ。


■参考URL

リンク先には特に許可とってませんのでごめんなさいですが、大変参考にさせていただきました。ありがとうございます。

Citrix公式のxeコマンドリファレンス
http://docs.vmd.citrix.com/XenServer/4.0.1/ja/reference/ch05s04.html
日本語最新のリファレンスはXenServer4.0.1用なので若干古いが、基本的なコマンドは大して変わっていないので参考にはなる。
英語版なら最新のXenServer6.2.0版があったけど読むのがめんd
http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/reference.html

TeckTarget Japanの記事が秀逸でした。
XenServerのコマンドラインインタフェース(CLI)を理解しよう[XenServer Tips] - TeckTargetJapan
http://techtarget.itmedia.co.jp/tt/news/1106/06/news01.html
その他XenServerTipsの記事も色々参考になるかも
http://techtarget.itmedia.co.jp/tt/news/1012/17/news05.html
sr-scan関連なんかもTeckTargetJapan参考だったし。
http://techtarget.itmedia.co.jp/tt/news/1101/06/news02.html