Ein Export einer XEN-VM über das XEN-Center dauert eine erhebliche Zeit, wobei nicht nachvollziehbar ist, wo diese verschenkt wird. Daher ist es empfehlenswert, den Export in eine .xva-Datei über die Befehlszeile auf ein Netzlaufwerk, lokale Platte oder USB-Disk vorzunehmen.
Anzeige aller VMs, die exportiert werden könnten (status: halted)
xe vm-list params=all power-state=halted
Wichtig ist für uns der vm-name bzw. die uuid. Jetzt können wir den Export starten.
[root@xen211 ~]# time xe vm-export filename=/tmp/export/017-otrs.xva vm=09faa5ff-ceea-1234-e02e-97cae69878d5
Export succeeded
real 7m30.623s
user 0m1.310s
sys 0m12.590s
[root@xen211 ~]# ls -Al /tmp/export/017-otrs.xva
-rwxr-xr-x 1 root root 4234127360 Jun 24 20:28 /tmp/export/017-otrs.xva
Sofern die Maschine nicht für den Export bereit ist, kommt eine entsprechende Meldung, z.B.
Another operation involving the object is currently in progress
class: VM
time xe vm-export vm=742ba99e-5f8b-b29d-e5a4-2f0e647838cb filename=/data/xtradius.xvm
In ca. 5 minuten ist er mit 4GB fertig.
Was macht XENserver da ? Es erstellt ein Archiv mit allen Daten der VM.
[root@xen211 data]# file xtradius.xvm
xtradius.xvm: tar archive
[root@xen211 data]# tar tvf xtradius.xvm
---------- 0/0 73769 1970-01-01 01:00:00 ova.xml
---------- 0/0 1048576 1970-01-01 01:00:00 Ref:42/00000000
---------- 0/0 40 1970-01-01 01:00:00 Ref:42/00000000.checksum
---------- 0/0 1048576 1970-01-01 01:00:00 Ref:42/00000001
---------- 0/0 40 1970-01-01 01:00:00 Ref:42/00000001.checksum
---------- 0/0 1048576 1970-01-01 01:00:00 Ref:42/00000003
...
Die ova.xml sieht ungefähr so aus:
<value>
<struct>
<member>
<name>version</name>
<value>
<struct>
<member>
<name>hostname</name>
<value>chocky-2</value>
</member>
<member>
<name>date</name>
<value>2009-01-30</value>
</member>
<member>
<name>product_version</name>
<value>5.0.0</value>
</member>
<member>
<name>product_brand</name>
<value>XenServer</value>
</member>
<member>
<name>build_number</name>
<value>12527p</value>
</member>
<member>
<name>xapi_major</name>
<value>1</value>
</member>
<member>
<name>xapi_minor</name>
<value>2</value>
</member>
<member>
<name>export_vsn</name>
<value>2</value>
</member>
</struct>
</value>
</member>
<member>
<name>objects</name>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>class</name>
<value>VM</value>
</member>
<member>
<name>id</name>
<value>Ref:36</value>
</member>
<member>
<name>snapshot</name>
<value>
<struct>
<member>
<name>uuid</name>
<value>742ba99e-5f8b-b29d-e5a4-2f0e647838cb</value>
</member>
<member>
<name>allowed_operations</name>
<value>
<array>
<data>
<value>copy</value>
<value>clone</value>
<value>export</value>
</data>
</array>
</value>
</member>
<member>
<name>current_operations</name>
<value>
<struct>
<member>
<name>OpaqueRef:3f0b3fc4-771d-a131-a254-27c6bcbe941f</name>
<value>export</value>
</member>
</struct>
</value>
</member>
<member>
<name>power_state</name>
<value>Halted</value>
</member>
<member>
<name>name_label</name>
<value>xtradius .178.14</value>
</member>
<member>
<name>name_description</name>
<value/>
</member>
<member>
<name>user_version</name>
<value>1</value>
</member>
<member>
<name>is_a_template</name>
<value>
<boolean>0</boolean>
</value>
</member>
<member>
<name>suspend_VDI</name>
<value>OpaqueRef:NULL</value>
</member>
<member>
<name>resident_on</name>
<value>OpaqueRef:NULL</value>
</member>
<member>
<name>affinity</name>
<value>OpaqueRef:23f2b1c8-1a4d-324b-6e91-a98a091ac0de</value>
</member>
<member>
<name>memory_target</name>
<value>268435456</value>
</member>
<member>
<name>memory_static_max</name>
<value>268435456</value>
</member>
<member>
<name>memory_dynamic_max</name>
<value>268435456</value>
</member>
<member>
<name>memory_dynamic_min</name>
<value>268435456</value>
</member>
<member>
<name>memory_static_min</name>
<value>16777216</value>
</member>
<member>
<name>VCPUs_params</name>
<value>
<struct/>
</value>
</member>
<member>
<name>VCPUs_max</name>
<value>1</value>
</member>
<member>
<name>VCPUs_at_startup</name>
<value>1</value>
</member>
<member>
<name>actions_after_shutdown</name>
<value>destroy</value>
</member>
<member>
<name>actions_after_reboot</name>
<value>restart</value>
</member>
<member>
<name>actions_after_crash</name>
<value>restart</value>
</member>
<member>
<name>consoles</name>
<value>
<array>
<data/>
</array>
</value>
</member>
<member>
<name>VIFs</name>
<value>
<array>
<data>
<value>Ref:37</value>
<value>Ref:39</value>
</data>
</array>
</value>
</member>
<member>
<name>VBDs</name>
<value>
<array>
<data>
<value>Ref:41</value>
<value>Ref:44</value>
<value>Ref:45</value>
</data>
</array>
</value>
</member>
<member>
<name>crash_dumps</name>
<value>
<array>
<data/>
</array>
</value>
</member>
...
Die exportierte Maschine können wir jetzt mittels scp auf einen anderen XENserver bringen und dort
importieren. Da wir eine identische Kopie wollen mit denselben MAC-Adressen, wird der Parameter “preserve” verwendet.
xe vm-import filename=/data/xtradius.xvm preserve=true
Nach ca. 20 Minuten ist die VM komplett verfügbar, taucht auch im XENcenter des neuen Hosts auf und
kann gestartet und genutzt werden. Allerdings hat die Maschine nun eine neue UUID, weshalb man beim Skripten besser auf den Namen gehen sollte.
xe vm-start name-label="xtradius .178.14"
Alternativ kann man import und start auch verknüpfen:
xe vm-start uuid=$(xe vm-import filename=/data/xtradius.xvm preserve=true)