
Zunächst einige damit zusammenhängende Fragen:
- Wie wechselt man von einem Laufwerk zu einem anderen mit anderer Größe?
- Mit welchem Dienstprogramm kann ich meine Windows-Startpartition auf eine andere Festplatte verschieben?
Meine Situation ist folgende:
- Erstellen Sie eine virtuelle Maschine (VBox), um Linux zu installieren (Debian-Test, Kernel 3.14).
- Eine BTRFS-Bootpartition, eine LUKS BTRFS-Rootpartition.
- Nehmen Sie zur Geschwindigkeitssteigerung IO-intensive Änderungen in der VM vor.
- Übertragen Sie die Installation auf einen USB-Stick.
Mein erster Versuch war, in der VM eine Festplatte mit der gleichen Größe wie das Flash-Laufwerk zu verwenden und nur dd
das Ganze. Aus irgendeinem Grund kann die UUID der Bootpartition nicht abgerufen und daher zum Booten auf dem Flash-Laufwerk verwendet werden.
Wenn ich das Flash-Laufwerk manuell mit einer Boot-Partition von EXT4 und einer Root-Partition von LUKS BTRFS partitioniere, funktioniert der UUID-Abruf rundum einwandfrei. Ich habe dann rsync -aEXS --progress
die Dateien von jeder gemounteten Partition übertragen (VM-Image -> Flash-Laufwerk). Ich chroot
habe -ed in das Flash-Laufwerk eingegeben und es grub-install
auf dem Flash-Laufwerk-Gerät ausgeführt, zusammen mit, update-grub
um die Dateisystem-UUIDs zu aktualisieren. Das hat nicht funktioniert. Es konnte die verschlüsselte Partition nicht richtig erkennen/verwenden, um Root zu erhalten. Ich habe es update-initramfs -u
ohne Erfolg versucht.
Was habe ich bei der Durchführung dieses Szenarios übersehen oder hätte ich besser machen können?
Antwort1
Die ursprünglichen Schritte waren größtenteils korrekt, aber aus irgendeinem Grund endete ich immer mit einem beschädigten initrd. Nachfolgend sind alle Schritte zusammengefasst, die zu einem funktionierenden Szenario für alle führen sollten, die dasselbe tun möchten:
- Erstellen Sie nach Wunsch eine virtuelle Maschine.
- Installieren Sie Linux mit dem gewünschten Partitionslayout und nehmen Sie alle gewünschten Änderungen vor. In diesem Fall besteht es aus einer BTRFS-Bootpartition und einer mit LUKS verschlüsselten BTRFS-Rootpartition. Andere Layouts sollten funktionieren, wenn darauf geachtet wird, die Referenzen während der Übertragung richtig zu aktualisieren.
- Booten Sie die vorherige VM mit einem Linux Live ISO, damit Sie offline auf das installierte System zugreifen können.
- Schließen Sie für die Übertragung einen USB-Stick an die VM an. (Hinweis: Sie können ein
dd
Image des installierten Laufwerks erstellen und außerhalb der VM speichern, das Sie dann von einem normalen Linux-System aus verwenden können.) - Bereiten Sie die Partitionen des Flash-Laufwerks vor.
- Option:
dd
Kopieren Sie das Originalabbild auf den USB-Stick und fahren Sie mit Schritt 7 und dann mit Schritt 10 fort. (Hinweis: In meinem Fall war es aus einem unbekannten Grund offenbar notwendig, die Partitionen neu zu erstellen, dablkid
die UUID der BTRFS-Bootpartition nicht aufgelistet werden konnte.) - Option: Erstellen Sie neue Partitionen mit denselben UUIDs wie die ursprünglichen. Vorausgesetzt,
/dev/sda1
für Boot und/dev/sda2
für Root.- Für die BTRFS-Bootpartition:
sudo mkfs.btrfs -f -L BOOT -U <original UUID> /dev/sda1
- Für die LUKS-Root-Partition:
sudo cryptsetup --uuid=<original UUID> luksFormat /dev/sda2
- Stammpartition zuordnen:
sudo cryptsetup --allow-discards open --type luks /dev/sda2 flash_luks
- Stammverzeichnis mit BTRFS formatieren:
sudo mkfs.btrfs -f -L ROOT -U <original UUID> /dev/mapper/flash_luks
- Für die BTRFS-Bootpartition:
- Option: Erstellen Sie neue Partitionen mit neuen UUIDs. Wiederholen Sie die gleichen Schritte wie bei Option 2, entfernen Sie jedoch Argumente in Bezug auf UUID/uuid. Notieren Sie sich die neuen UUIDs mit
sudo blkid
.
- Option:
- Mounten Sie die Original-Image-Partitionen.
- Erstellen Sie schreibgeschützte Loopback-Geräte für jede Partition:
sudo kpartx -ar <flash dd image file>
. Angenommen, kpartx wird an loop0 angeschlossen. - Erstellen Sie Verzeichnisse für Einhängepunkte:
sudo mkdir -p /media/orig_boot /media/orig_root
- Stiefel:
sudo mount -r /dev/mapper/loop0p1 /media/orig_boot
- Wurzel-LUKS:
sudo cryptsetup -r open --type luks /dev/mapper/loop0p2 orig_luks
- Wurzel:
sudo mount -r /dev/mapper/orig_luks /media/orig_root
- Erstellen Sie schreibgeschützte Loopback-Geräte für jede Partition:
- Mounten Sie Flash-Laufwerkpartitionen. Angenommen,
/dev/sda1
zum Booten.- Erstellen Sie Verzeichnisse für Einhängepunkte:
sudo mkdir -p /media/flash_boot /media/flash_root
- Stiefel:
sudo mount -t btrfs -o nodiratime,noatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_boot
- Root (vorausgesetzt, es wurde bereits zuvor mit Cryptsetup zugeordnet):
sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/mapper/flash_luks /media/flash_root
- Erstellen Sie Verzeichnisse für Einhängepunkte:
- Inhalt kopieren:
- Stiefel:
sudo rsync -aEXS --progress /media/orig_boot/ /media/flash_boot
- Wurzel:
sudo rsync -aEXS --progress /media/orig_root/ /media/flash_root
- Stiefel:
- Originalabbild aushängen.
- Wurzel:
sudo umount /media/orig_root
- Wurzel-LUKS:
sudo cryptsetup close orig_luks
- Stiefel:
sudo umount /media/orig_boot
- kpartx:
sudo kpartx -d <flash dd image file>
- Wurzel:
- Chroot ins Flash-Laufwerk.
- Binden
/sys
:sudo mount --bind /sys /media/flash_root/sys
- Binden
/dev
:sudo mount --bind /dev /media/flash_root/dev
- Binden
/dev/pts
:sudo mount --bind /dev/pts /media/flash_root/dev/pts
- Binden
/proc
:sudo mount --bind /proc /media/flash_root/proc
- Boot aushängen:
sudo umount /media/flash_boot
- Erneutes Einhängen innerhalb des Root-Zustands:
sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_root/boot
- Chroot:
sudo chroot /media/flash_root
- Binden
- Aktualisieren
/etc/fstab
.- Startzeile:
UUID=<btrfs boot uuid> /boot btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 2
- Stammzeile:
UUID=<btrfs root uuid> / btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 1
- Startzeile:
- Aktualisieren
/etc/crypttab
:flash_luks UUID=<luks root uuid> none discard,luks
- Installieren
btrfs-tools
(falls nicht installiert):sudo apt-get install btrfs-tools
- Boot-Sachen aktualisieren.
- Initrd (nutzt fstab/crypttab, um vor dem Mounten zu entscheiden, was benötigt wird, und um beim Booten nach dem LUKS-Passwort zu fragen):
sudo update-initramfs -u -k all
(Hinweis: Sie können alle Initrds mit neu erstellensudo update-initramfs -c -k all
, aber ich habe das zur Sicherheit nicht versucht.) - Grub (verwendet fstab, um die Startoptionen des Kernels zu aktualisieren und die richtigen Partitionen zu mounten):
sudo update-grub
- Installieren Sie Grub im MBR (vorausgesetzt
/dev/sda
):sudo grub-install --recheck /dev/sda
- Chroot beenden:
exit
- Initrd (nutzt fstab/crypttab, um vor dem Mounten zu entscheiden, was benötigt wird, und um beim Booten nach dem LUKS-Passwort zu fragen):
- Alles demontieren.
sudo umount /media/flash_root/boot
sudo umount /media/flash_root/proc
sudo umount /media/flash_root/dev/pts
sudo umount /media/flash_root/dev
sudo umount /media/flash_root/sys
sudo umount /media/flash_root
sudo cryptsetup close flash_luks