Physikalischen Server per Rsync auf einen Xen Server umziehen (P2V)

Wer sich überlegt seine Server zu virtualisieren stoßt über kurz oder lang auf folgende Frage:

Wie zur Hölle kriege ich meine Physikalischen Server nun umgezogen?

AHA – zum Glück gibt es ja Xenconvert – damit kann ich meine Maschinen migrieren – klappt auch, allerdings nur für Windows Clients  und Server. Da fällt mir ein, beim Installieren von XenServer (bis 5.6) wurde ich ja gefragt ob ich XenServer installieren oder eine vorhande Instalation umwandeln möchte, also  CD rein in die Physikalische Maschine (PM) und booten.

Das Ergebniss in den meisten Fällen dürfte sein, dass man auf einer Fehlermeldung landet welche sagt, dass ausgerechnet dein System nicht kompatibel ist, Schade auch.

Ich möchte mit diesem Post eine kleine Anleitung geben wie man mit sehr wenig Aufwand Linux Server doch umziehen kann (probiert habe ich das mit Debian und Centos).

Diese Methode kann man natürlich auch für P2P oder V2V oder für P2V nach nicht XenServern nutzen, die Anleitung muss dann entsprechend angepasst werden, das Prinzip bleibt das Gleiche.

Ich übernehme keinerlei Haftung dafür, dass diese Anleitung auf deinem Server funktioniert. Alle Änderungen welche du an deinem System vornimmst erfolgen auf dein eigenes Risiko. Wenn du nicht weißt was du machst, dann beauftrage lieber jemanden damit der sich auskennt!

Was man braucht:

  1. Natürlich einen physikalischen Server mit Linux (in meinen Fall Debian)
  2. einen XenServer Host auf dem man die Virtuelle Maschine (VM) aufsetzen kann
  3. Eine Netzwerkverbindung zwischen den beiden Servern. Das System läuft auch remote, ich empfehle dringlich doch lieber in der Nähe von der PM zu sitzen damit man bei Problemen diese auf jeden Fall erreichen kann – besonders bei Debian basierten Systemen.
  4. Root Zugriff auf die PM und XenCenter für den Zugriff auf den XenServer

Zur Transfer geht man wie folgt vor:

1. Auf der PM schaut mal sich die eingebundenen Devices an:

mount

Hier muss man sich alle Verzeichnisse notieren, welche nicht von einem lokalen Medium gemountet sind (NFS und ähnliches), diese schreibt man sich raus.

2. Da wir beide Maschinen in Runlevel 1 benötigen um den Transfer einleiten zu können müssen wir sicherstellen, dass sowohl das Netzwerk als auch SSH laufen. In der Regel sind diese Dienste im Runlevel 1 NICHT verfügbar – Ergebniss ist dann, dass die Maschine weg ist (daher besser daneben sitzen :) )

Bei Debian habe ich die Erfahrung gemacht, dass unter Umständen ein Maintenance Kennwort eingegeben werden muss, das funktioniert NUR wenn man lokal Zugriff auf den Server hat!

Bei RedHat basierten System (z.B. Centos 5) löst man das wie folgt:

chkconfig --level 1 network on
chkconfig --level 1 sshd on

bei anderen Systemen kann man das wie folgt lösen:

echo /etc/init.d/networking start >> /root/.bashrc
echo /etc/init.d/ssh start >> /root/.bashrc

Bitte beachten, dass die Daemons auch anders heißen könnten!

Wenn ihr vor der Kiste sitzt – was ich nochmals empfehlen möchte – dann könnt ihr den vorherigen Schritt sparen und die Dienste manuell starten!

3. sicher stellen, dass rsync installiert ist, das ist nicht immer der Fall!

Debian:

apt-get install rsync

Centos:

yum install rsync

Konfigurieren muss man hier nichts.

4. In Xencenter einloggen und eine VM erstellen, am Besten ist es ihr installiert hier exakt die OS Version welche ihr transferieren möchtet, also wenn die PM ein Centos 5 ist – dann erstellt eine Centos 5 VM – für Debian Etch eine Debian Etch VM etc.
Auf der VM muss mindestens so viel Speicherplatz konfiguriert werden wie auf der PM – das ist eigentlich logisch aber man weiß ja nie :)
Dennoch empfehle ich etwas mehr zu nehmen, man möchte ja auch noch neue Daten auf den Server spielen.

5. Auf der VM einloggen und sicherstellen, dass rync auch hier installiert ist.

6. VM und PM in den Runlevel 1 bringen – ACHTUNG! ab hier sind die Dienste auf der PM nicht mehr erreichbar!

Zum switchen des Runlevels auf beiden Maschinen ausführen:

init 1

dann noch die erforderlichen Dienste starten:

/etc/init.d/networking start
/etc/init.d/ssh start

7. nun werden alle Daten von der PM zur VM übertragen, wir schließen einige Verzeichnisse und Dateien aus, ansonsten schlägt der Transfer oder der Reboot fehl! Wichtig ist auch, dass alle nicht lokalen Verzeichnisse welche wir in Punkt 1. aufgeschrieben haben auch ausgenommen werden müssen, diese stehen auf der PM in init 1 nicht zur Verfügung!

Auf der VM startet wir nun den folgenden Befehl:

rsync -av --numeric-ids --delete --progress --exclude /sys --exclude /boot --exclude /dev --exclude /proc --exclude /etc/mtab --exclude /etc/fstab --exclude /etc/udev/rules.d --exclude /lib/modules PM-Servername-oder-IP:/ /

Wichtig ist, dass ganze Geraffel muss in einer Zeile stehen und den Roten Teil muss man natürlich anpassen.
Nun kann man einen (oder drei) lecker Kaffee trinken gehen, bis der Zähler am Ende auf 0 steht.

8. Fetich… nur noch die PM ausschalten:

init 0

Und die VM neu booten

reboot

Das war alles :)

Wenn man beide Maschinen weiterhin laufen haben möchte, dann muss man auf einer der Beiden die IP Adresse(n) anpassen, ansonsten gibt es Salat. Natürlich nicht vergessen darf man, dass z.B. in einem Apache Server auch die IP Adressen konfiguriert sind – diese muss man selbstverständlich alle anpassen.

4 Kommentare

  1. Bei dem Versuch, mit obiger Anleitung einen Serverumzug durchzuführen, bekam ich ssh-Fehler. Erst nachdem ich auf dem Zielrechner (der, auf dem das Skript nicht ausgeführt wurde), die beiden Einträge aus der .bashrc entfernt hatte und networking und ssh manuell gestartet hatte, klappte es.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

eMail-Benachrichtigung bei Kommentaren. Auch möglich: Abo ohne Kommentar.