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!
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.
sfdisk /dev/nvme0n1 < sda.part
partclone.vfat -b -s /dev/sda1 -o /dev/nvme0n1p1
partclone.ext4 -b -s /dev/sda2 -o /dev/nvme0n1p2
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
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):
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
mount | grep ' / '
Hier sollte nun stehen, daß das root-Dateisystem auf /dev/nvme0n1p2 liegt.