Wenn, wie in meinem Fall, der Serverbetreiber es nicht ermöglicht den Kernel selbst zu wechseln, also der Kernel außerhalb des zugreifbaren Dateisystems liegt durch die Konfiguration des xen-Servers, wird der Server nach einem simplen Upgrade nicht mehr booten können. Kann allerdings über z.B. ein Webinterface 10.04 per Neuinstallation auf dem Server installiert werden, so gibt es einen anderen Weg dennoch zu upgraden.
Das Problem liegt hierbei darin, dass Ubuntu 10.04 nicht mit einem älteren Kernel starten kann.
Der neue Kernel wird aber (zwangsweise) installiert, wenn 10.04 neu installiert wird.
Lösen können wir das Dilemma, wenn wir erst Upgraden, nicht rebooten, ein Backup ziehen, Ubuntu 10.04 neu installieren und dann das Backup wieder einspielen.
Also kurz noch mal die Situation:
- Kein Zugriff auf den Kernel (z.B. in xen-Umgebung)
- 10.04 Neuinstallation über (Web)-Interface verfügbar
- Rettungssystem über (Web)-Interface startbar
Für das Backup werde ich dd und ssh benutzen. In meinem Fall steht mir ein Rettunssystem zur Verfügung, in dem mein Server als Ordner gemountet wird.
ACHTUNG: Falls was schief geht, bootet euer Server evtl. nicht mehr! Macht vorher auch ein Backup!
Also fangen wir an. Erst mal das System updaten.
sudo apt-get update
sudo apt-get upgrade
Dann das System upgraden (evtl. wollt ihr noch ein Backup vorher machen, falls es dennoch nicht klappt).
sudo do-release-upgrade --proposed
Dann den Anweisungen folgen. Dies wird sicher einige Zeit dauern...
Der Server wird NICHT mehr booten können, solltet ihr jetzt neu starten.
Ich habe nun das Backup beim noch laufenden System gemacht, da in einem vorangegangenem Versuch das Rettungssystem nicht mehr richtig wollte, bis ich neu Installiert habe.
Also dann jetzt das Backup machen
# Herausfinden, welches Device wir Backupen müssen
mount
/dev/xvda1 on / type ext3 (rw,noatime,nodiratime,errors=remount-ro)
...
# Backup starten
sudo dd if=/dev/xvda1 bs=1M 2> dd_msg | gzip -c | ssh user@backupserver.de "cat /path/to/backup.img.bz"
Und weil das einige Zeit brauchen kann und dd nicht gerade gesprächig ist, öffnen wir eine weitere ssh-Verbindung und können dann das Vorgehen verfolgen. Dafür habe ich den stderr in die Datei dd_msg umgeleitet.
pgrep -l '^dd$'
12345 dd
sudo watch "kill -USR1 12345 && tail dd_msg"
Sobald das fertig ist, können wir den Server runter fahren.
Nun muss das neue Ubuntu 10.04 System installiert werden.
Ist die Installation fertig, so wird das Recoverysystem gestartet.
Nun wird das Backup wieder eingespielt.
Zunächst im Rettungssystem das Device herausfinden, dann auf dem Backupserver das Backup schicken.
ssh user@recovery.system
mount
/dev/xvda1 on /rescue type ext3 (rw,noatime,nodiratime,errors=remount-ro)
...
umount /dev/xvda1
exit
ssh user@backup.system
dd if=/path/to/backup.img.bz 2> dd_msg | ssh user@recovery.system "gzip -cd | dd of=/dev/xvda1"
Wenn nun der Server neu gestartet wird, sollte das Upgrade vollzogen sein und alle Daten wieder verfügbar.
Allerdings läuft so einiges noch nicht rund. Das liegt daran, dass noch die falschen Kernelmodule installiert sind.
Diese müssen noch installiert werden.
sudo apt-get install linux-image-`uname -r` linux-image-ec2
Dies wird alles zum derzeitigen Kernel und des aktuellen ec2 Kernels installieren.
In meinem Fall viel dies nicht aufeinander, aber ich habe beides installiert, falls mein Provider entscheidet den Kernel zu updaten...
Ansonsten noch viel Spaß mit dem Server

