dd remote cloning
Für unseren Testserver brauchte ich eine Möglichkeit eine virtuelle Xen-Maschine auf ein anderes System zu klonen. Auf der Dom0 wird hierzu ein LVM-Snapshot der zu klonenden Maschine erzeugt, damit sich die Daten während des Kopiervorgangs nicht verändern.
Das Ziel des Kopiervorgangs ist eine andere Dom0, welche per SSH erreichbar ist. Ausgelöst wird der Kopiervorgang von einem dritten System aus, weil nur hier die nötigen SSH-Keys vorliegen (der Befehl ist Teil eines komplexeren Scripts welches weitere Informationen von anderen Rechnern per SSH einsammelt).
Insgesamt sind an dem Kopiervorgang also drei Systeme beteiligt. Der Rechner von dem aus das Script gestartet wird, die Quell-Dom0 und die Ziel-Dom0.
Hier der Kopierbefehl:
ssh ${source_dom0} "dd if=${lvm_vg_path}${machine_to_clone}-clone-snapshot" \
| pv -ptrbe -s ${lvm_disk_size}G | ssh ${target_dom0} "dd of=${lvm_clone_path}"
Der pv
Part ist nicht zwingend nötig sondern dient nur dazu eine Progressbar für den Kopiervorgang anzuzeigen.
Zuvor hatte ich versucht den Kopiervorgang mittels netcat
umzusetzen (die Rechner befinden sich alle im gleichen Netz, daher wäre die Verschlüsselung per SSH eigentlich nicht zwingend nötig). Leider brach die Übertragung mit dieser Methode aber immer wieder mal vorzeitig ab:
ssh ${target_dom0} "nc -l -p 4242 | dd of=${lvm_clone_path}" &
ssh ${source_dom0} "dd if=${lvm_vg_path}${machine_to_clone}-clone-snapshot \
| nc ${target_dom0} 4242"