Kurzanleitungen/Howtos

System auf SSD umziehen

02.11.2018

Pinguin zieht um

Möchte man seine bereits auf einer normalen Festplatte fertig eingerichtete Linux-Partition auf eine schnellere SSD umziehen, die HDD aber weiterhin im System behalten, ergeben sich hieraus ein paar zu beachtende Punkte. Diese Kurzanweisung zeigt exemplarisch den Umzug einer Linux- und zugehöriger UEFI-Partition von /dev/sda auf /dev/nvme0n1. Die folgenden Schritte sollten unter einem Live-Linux durchgeführt werden, damit Quell- und Ziellaufwerk nicht eingebunden sind.

Sie sollte auch hier – wie immer bei solchen Systemeingriffen – vorher eine Sicherung anlegen. Alle Daten auf der SSD gehen verloren!

Partitionstabelle von /dev/sda sichern

Mit folgendem Befehl wird die Partitionstabelle von im Format von sfdisk als Textdatei gespeichert:
sfdisk -d /dev/sda > sda.part
Das Resultat sieht dann z.B. wie folgt aus:
label: gpt
label-id: 37266872-F7BE-4630-80E4-D5C6DDCBC58A
device: /dev/sda
unit: sectors
first-lba: 34
last-lba: 2906091234

/dev/sda1 : start=        2048, size=     1048576, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, uuid=10C43D83-C14F-CFE2-BF38-1D641E94F63B, name="primary"
/dev/sda2 : start=     1050624, size=   104857600, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=3853B7D6-93AA-F6DB-0F61-0C2BCF05FC05, name="primary"
/dev/sda3 : start=   105908224, size=  2048000000, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, uuid=7B14311C-3F4D-3CD5-7841-12B9F96D0729
Hinter den kryptischen Werten nach "type" verbergen sich die Partitionstypen wie Linux-Swap oder EFI. Hier ist /dev/sda1 die EFI-Partition, /dev/sda2 das Linux-System und /dev/sda3 eine Daten-Partition.

Partitionstabellendatei ändern

Nun können/müssen Sie die Partitionstabellendatei ändern:
  • Löschen Sie ggf. Zeilen mit Partitionsdefinitionen, wenn die Ziel-SSD kleiner ist oder Sie einige Partitionen nicht auf die SSD übernehmen wollen
  • Ersetzen Sie bei den "uuid="-Werten, die ersten Zeichen z.B. durch "ABC", damit sich alle von ihren Originalwerten unterscheiden
  • Löschen Sie die "last-lba:"-Zeile

Partitionstabelle auf /dev/nvme0n1 anwenden

Achtung: Vergewissern Sie sich, daß das richtige Ziellaufwerk angeben, da es dort zu Datenverlust kommt.
sfdisk /dev/nvme0n1 < sda.part

Partitionen kopieren

Der Inhalt der Partitionen kann effizient mit Partclone übertragen werden, wobei Partclone nur die verwendeten Sektoren kopiert. Das partclone-Kommando gibt es in einer Version für jedes unterstützte Dateisystem. Zum Kopieren der Beispielpartitionen (EFI-Partition mit vfat und Linux-Partition mit ext4-Dateisystem) sieht das Kopieren wie folgt aus:
partclone.vfat -b -s /dev/sda1 -o /dev/nvme0n1p1
partclone.ext4 -b -s /dev/sda2 -o /dev/nvme0n1p2

UUIDs der geschriebenen Dateisysteme ändern

Nach dem Kopieren der Partitionsdaten von der Festplatte auf die SSD bleiben zwar die PARTUUIDs unverändert und so, wie sie durch sfdisk geschrieben wurden, die UUIDs der Dateisysteme sind aber nun mit denen der Quellpartitionen identisch. Die UUIDs auf den Zielpartitionen müssen daher geändert werden, damit die Zuordnung von UUID zur Partitionsgerät (z.B. /dev/nvme0n1p1) eindeutig ist und es zu keinen Problemen kommt. Die aktuell verwendeten UUIDs und PARTUUIDs erhalten Sie mit:
blkid
Die Ausgabe sieht dann z.B. so aus:
/dev/nvme0n1p1: UUID="1234-5678" TYPE="vfat" PARTLABEL="primary" PARTUUID="abc7d731-1c36-4784-b5c6-dc84ca5c6cfb"
/dev/nvme0n1p2: UUID="12345678-1234-5678-90ab-cdef12345678" TYPE="ext4" PARTLABEL="primary" PARTUUID="abc91ada-8df7-463a-a9bc-5af91e418d4d"
Für das Ändern der PARTUUID von VFat-Partitionen gibt es leider kein entsprechendes Programm, weshalb Sie die UUID direkt in die Partition schreiben müssen. Glücklicherweise hat Rod Smith einen Zweizeiler veröffentlicht, der das Ändern vornimmt:
UUID='ABC1-1C4B'
printf "\x${UUID:7:2}\x${UUID:5:2}\x${UUID:2:2}\x${UUID:0:2}" | dd bs=1 seek=67 count=4 conv=notrunc of=/dev/nvme0n1p1
Für die Linux-Partition übernimmt tune2fs (nach Herstellen eines sauberen Dateisystemzustandes mittels e2fsck) das Setzen der geänderten UUID:
e2fsck -f /dev/nvme0n1p2
tune2fs /dev/nvme0n1p2 -U abce1234-1234-5678-90ab-cdef12345678

UUIDs in Konfigurationsdateien ändern

Nachdem Sie die geänderten UUIDs in die Partitionen geschrieben haben, müssen Sie diese in Konfigurationsdateien auf der Ziel-SSD ebenfalls eintragen, damit der Rechner zukünftig von der SSD und nicht mehr von der HDD bootet.

Erstellen Sie zuerst Mountpunkte für die auf die SSD geklonten EFI- und Linux-Partition und mounten diese anschließend:

mkdir /tmp/nvme0n1p1
mkdir /tmp/nvme0n1p2
mount /dev/nvme0n1p1 /tmp/nvme0n1p1
mount /dev/nvme0n1p2 /tmp/nvme0n1p2
Ändern Sie die UUIDs in den folgenden Dateien (sofern vorhanden):
  • /tmp/nvme0n1p2/etc/fstab
  • /tmp/nvme0n1p2/etc/default/grub
  • /tmp/nvme0n1p2/etc/grub.d/*
  • /tmp/nvme0n1p2/etc/crypttab
  • ggf. weitere von Ihnen verwendete Konfigurationsdateien und Skripte /tmp/nvme0n1p2/...

Bootmanager auf SSD installieren

Damit der Rechner auch von der SSD booten kann, müssen Sie den Bootmanager grub direkt auf der SSD installieren, nachdem Sie in die Linux-Partition der SSD "gechrootet" sind:

# Zum Mountpunkt der Linux-Partition der SSD wechseln
cd /tmp/nvme0n1p2

# Pseudodateisysteme einbinden, aus denen grub Informationen auslesen muß
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/

# Aktuelles Wurzelverzeichnis wechseln
chroot .

# EFI-Partition einbinden
mount /boot/efi/

# grub installieren
grub-install /dev/nvme0n1

# Vorhandene Linux-Kernel suchen und ins grub-Menü aufnehmen
update-grub

# chroot-Umgebung verlassen
exit

# Rechner neustarten
reboot

Neustart

Wählen Sie aus dem BIOS-Bootmenü die SSD als zu startendes System aus. Am wahrscheinlich deutlich beschleunigten Start sollte ersichtlich sein, daß nun statt der HDD die SSD verwendet wird. Wirkliche Gewißheit erhalten Sie aber erst über die Ausgabe der folgenden Befehlszeile:
mount | grep ' / '
Hier sollte nun stehen, daß das root-Dateisystem auf /dev/nvme0n1p2 liegt.

Speicher der HDD wiederverwenden

Nachdem Sie sich – vorzugsweise über mehrere Wochen – vom korrekten Funktionieren Ihrer SSD-Installation überzeugt haben, können Sie die (ausgediente) Linux-Partition auf HDD neu formatieren und für andere Zwecke verwenden.
Achtung! Achtung! Die folgenden Anweisungen richten sich ausschließlich an fachkundige Personen. Bei jedem Schritt kann es zum kompletten Datenverlust kommen. Alle Angaben ohne Gewähr! Die Anweisungen, Skripte, etc. sind ausschließlich für Lernzwecke auf Lernsystemen und nicht für Produktivumgebungen bestimmt!