Umzug eines laufenden Linux Systems auf eine kleinere Platte

Im Azure hat man das Problem, dass man keine normale Linux Konsole hat, daher funktionieren normale Live CDs wie Clonezilla nicht.

Da muss man dann etwas tricksen um das System auf eine neue Platte umzuziehen.

Die Schritte sind wie folgt (ymmv, die exakten Werte hängen immer von den Platten und vom OS ab):

Neue Platte in die Azure VM hängen und Server starten

Die alte Platte ist /dev/sdb

Die neue ist /dev/sda

Die alte Partitionierung sieht so aus

Im fdisk:

Man muss jetzt auf der neuen Platte die 3 kleinen Partitionen exakt so anlegen.
Und den Rest vom Platz auf die 4. legen

Partitionierung im fdisk

  • sudo fdisk /dev/sda (WICHTIG! Die neue, leere Platte auswählen! )

Auswahl “g” für eine leere GPT Tabelle

4x Auswahl „n“ für eine neue Partition

Partition 14 von Block 2048 bis 10239

Partition 15 von Block 10240 bis 227327

Partition 16 von Block 227328 bis 2097152

Partition 1 von 209920 bis Ende (default).

Danach die Partitionstypen setzen mit „t“ (Liste gibts mit „l“)

Partition 14 ist Typ 4

Partition 15 ist Typ 1

Partition 16 ist Typ 142

Partition 1 ist schon Typ 20, ist standard

Danach mit „w“ die Tabelle schrieben und raus aus fdisk.

Dann kopieren wir die drei kleinen Partitionen mit dd 1:1 rüber, die sind ja blockgenau gleichgroß.

  • sudo dd if=/dev/sdb14 of=/dev/sda14 bs=4k
  • sudo dd if=/dev/sdb15 of=/dev/sda15 bs=4k
  • sudo dd if=/dev/sdb16 of=/dev/sda16 bs=4k

Die Partition 1 ist unterschiedlich, da müssen wir die Dateien manuell rüberkopieren.

Dafür brauchen wir vorher ein Dateisystem

  • sudo mkfs.ext4 /dev/sda1

Dann können wir die Partition mounten.

  • cd /home/user
  • mkdir sda
  • sudo mount /dev/sda1 sda
  • sudo rsync -ahPHAXx –delete –exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/boot/*,/home/user/sda/*,/media/*,/lost+found} / /home/user/sda

Das dauert etwas

Danach haben wir das komplette System auf der neuen Platte.

Damit das booted, muss aber noch der Bootloader und die Partitionsids korrigiert werden.

Das geht, wenn man mit chroot in das gemountete Dateisystem rein geht.

  • sudo mount /dev/sda15 /home/user/sda/boot
  • sudo mount /dev/sda14 /home/user/sda/boot/efi
  • mount -t proc /proc /home/user/sda/proc/
  • mount –rbind /sys /home/user/sda/sys/
  • mount –rbind /dev /home/user/sda/dev/
  • sudo chroot /home/user/sda

Jetzt arbeitet man im „neuen“ System, so als hätte man davon gebooted.

Zur Erinnerung, im lsblk stehen die aktuellen UUIDS

In der /etc/fstab stehen die alten, die muss man anpassen.

Man ist schon root, also

  • nano /etc/fstab

In Zeile 1 für „/“ und in Zeile 3 für „/boot/efi“ muss man die neuen UUIDS eintragen.

Die boot Partition wird übers Label angesprochen, da muss man nichts ändern.

Wenn das getan ist, muss nur noch der grub Bootloader installiert werden auf der neuen Platte.

Das geht mit

  • grub-mkconfig -o /boot/grub/grub.cfg
  • grub-install –recheck /dev/sda

Jetzt sollte man das System herunterfahren und von der neuen Platte booten können.