XenServerでの仮想マシンのコピーを行う時どのようにしていますでしょうか?通常はXenCenterから仮想マシンのエキスポート、インポートを使っている人が多いかとおもいます。もし仮想マシンのディスクをVHDというファイル形式で作成されている場合、VHDのファイルをコピーすることも可能です。その際に注意するべき点を踏まえて、手順を書いてみましたので参考になればと思います。VHD形式で仮想ディスクを作成する場合はSRをNFSにするか、Local SRをextで作成しなおす必要があります。



xvaファイルでの操作

  • エキスポート
    シャットダウンしている仮想マシンを右クリックして、Export as Backupを選択して、エキスポートを指定します
  • インポート
    XenCenterで、XenServerを選択して、右クリックして、Import VMを選択して、インポートしたい仮想マシンを選択します



VHDファイルのコピー(XenServer -> XenServer)

仮想マシンのディスクをVHDファイルで持たせるにはSRをあらかじめNFSで設定しておく必要があります
また、Local SRであればextで再作成する必要があります。詳しくはこちらを参照ください。

  1. コピー元の仮想マシンのStorageタブの仮想ディスクのプロパティでNameとDescriptioinを設定し
    ておきます
  2. コピー元のVHDファイルを探します

    [root@xs503 ~]# xe vm-disk-list vm=ddc21 <--ddc21という名前の仮想マシンの仮想ディスク(VDI)をリストします
    Disk 0 VBD:
    uuid ( RO)             : b65be04e-e7cc-f71d-aa67-a5db057adaf8
        vm-name-label ( RO): ddc21
           userdevice ( RW): 0
    
    Disk 0 VDI:
    uuid ( RO)             : ef707d10-2da7-4149-b5ad-c5d12e23fe9c <-- このUUIDが仮想ディスク名になります。
           name-label ( RW): ddc
        sr-name-label ( RO): Local File SR
         virtual-size ( RO): 8589934592
    
    [root@xs503 ~]# xe sr-list type=ext  <-- ext形式のストレージをリストします。
    uuid ( RO)                : d8e9523d-23be-6203-0550-76d6df40f029  <-- このUUIDがext形式のストレージとなります。
              name-label ( RW): Local File SR
        name-description ( RW):
                    host ( RO): xs503
                    type ( RO): ext
            content-type ( RO): local SR
    
    [root@xs503 ~]# ls -lah /<span class="code-keyword">var</span>/run/sr-mount/d8e9523d-23be-6203-0550-76d6df40f029/ef707d10-2da7-4149-b5ad-c5d12e23fe9c.vhd  &lt;-- 仮想ディスクのファイルサイズや更新日を確認します。
    -rw-r--r-- 1 root root 4.1G Apr  7 20:24 /<span class="code-keyword">var</span>/run/sr-mount/d8e9523d-23be-6203-0550-76d6df40f029/ef707d10-2da7-4149-b5ad-c5d12e23fe9c.vhd


  3. コピー先のXenServerのSRにリンクを設定します。あとでコマンドを打ちやすいように。

    [root@xs501 ~]# xe sr-list type=ext  &lt;-- ext形式のストレージをリストします。
    uuid ( RO)                : b3cbfe22-c84f-1bc9-68a5-711eb93f14a6  &lt;-- このUUIDがext形式のストレージとなります。
              name-label ( RW): Local File SR
        name-description ( RW):
                    host ( RO): xs501
                    type ( RO): ext
            content-type ( RO): Local SR
    
    [root@xs501 ~]# cd /<span class="code-keyword">var</span>/run/sr-mount/
    [root@xs501 sr-mount]# ln -s b3cbfe22-c84f-1bc9-68a5-711eb93f14a6/ link  &lt;-- リンクを設定します。
    [root@xs501 sr-mount]# ls link/
    830e58d1-709c-42bb-b9fd-310400d2b4a0.vhd
    c9ead5de-ff80-4f24-a938-ec06db78597a.vhd
    ca3ffca6-3513-4d2f-a2ae-4e1478af5014.vhd


  4. コピー元のXenServerから、VHDファイルをコピー先のXenServer(192.168.1.241)にコピーします

    [root@xs503 d8e9523d-23be-6203-0550-76d6df40f029]# scp ef707d10-2da7-4149-b5ad-c5d12e23fe9c.vhd 192.168.1.241:/<span class="code-keyword">var</span>/run/sr-mount/link/ &lt;--scpでXenServerからXenServerにコピーします。
    root@192.168.1.241's password:
    ef707d10-2da7-4149-b5ad-c5d12e23fe9c.vhd                                       100% 4126MB  21.3MB/s   03:14
    [root@xs503 d8e9523d-23be-6203-0550-76d6df40f029]#


  5. コピー先のXenServerで、コピーしたVHDファイルをSRに認識させます。

    [root@xs501 ~]# xe sr-scan uuid=b3cbfe22-c84f-1bc9-68a5-711eb93f14a6  &lt;-- コピー先のXenServerのSRでは新しくコピーしてきた仮想ディスクの認識していないので、認識させます。
    [root@xs501 ~]# xe sr-param-list uuid=b3cbfe22-c84f-1bc9-68a5-711eb93f14a6 &lt;-- 認識されたか確認します。VDIsにコピーしてきた仮想ディスクのUUIDがあればOK
    uuid ( RO)                    : b3cbfe22-c84f-1bc9-68a5-711eb93f14a6
                  name-label ( RW): Local File SR
            name-description ( RW):
                        host ( RO): xs501
          allowed-operations (SRO): forget; VDI.create; VDI.snapshot; plug; destroy; VDI.destroy; scan; VDI.clone; unplug
          current-operations (SRO):
                        VDIs (SRO): ef707d10-2da7-4149-b5ad-c5d12e23fe9c
                        PBDs (SRO): 60e3a493-2da2-9fbb-77ff-9d68a7cede2f
          virtual-allocation ( RO): 8606732288
        physical-utilisation ( RO): 29132607488
               physical-size ( RO): 484164509696
                        type ( RO): ext
                content-type ( RO): Local SR
                      shared ( RW): <span class="code-keyword">false</span>
                other-config (MRW):
                   sm-config (MRO): devserial: scsi-SATA_ST3500630NS_5QG2VTXB
                       blobs ( RO):


  6. コピー先のXenServerで、XenCenterで新規に仮想マシンを作成します(Start VM automaticallyはチェックオフしておきます)
  7. コピー先のXenServerのStorageタブで、先ほど作成した仮想マシンからディスクを削除します
  8. コピー先のXenServerで、先ほどコピーしたVHDをアタッチします。アタッチするときに、Noneと出てきますのでファイルサイズで判断してアタッチします。複数のVHDファイルを同時にコピーすると、どのVHDファイルがどの仮想ディスクか分からなくなる場合があるので1つづつコピーしてアタッチしていったほうがいいかと思います。
  9. 仮想マシンのStorageタブの仮想ディスクのプロパティで、後で分かりやすいようにNameとDescriptioinを設定しておきます



VHDファイルのコピー(Windowsマシン -> XenServer)

  • WinSCPで、scpか/sftpモードで転送します
    scpでログインすると、4G以上のファイルをリストできないようです
    sftpコマンドでログインして、ファイルを転送すると、scpで転送するより遅いようです
    但し、WinCSP 4.2.1で若干ましになっているようです。4.1.xはかなり遅いです
  • CygWinでscpコマンド/sftpコマンドを使用する
    まだ試してないですが、XenServer -> XenServerと同じくらいのスピードはでると思われます。

VHDをコピー後、仮想マシンを作成して、コピーしたVHDファイルをアタッチする必要があります。詳細はVHDファイルのコピー(XenServer -> XenServer)を参照してください

VHD形式で仮想ディスクのバックアップを持つと、xvaのエキスポート、インポートよりはるかにコピーにかかる時間がすくないですし、仮想ディスクを作成するときに割り当てたサイズのファイルを作らず、動的にサイズを増やしていきますので、仮想マシンの移動が楽になります。ただ、仮想マシンからディスクI/Oパーフォーマンスとしては、ボリューム単位で仮想ディスクを割り当てるほうがよいといわれています。