Übertragen von Linux-Betriebssystemen von einem Laufwerk auf ein anderes mit unterschiedlichen Partitionen

1208
Ioan

Zunächst einige verwandte Fragen:

Meine Situation ist wie folgt:

  1. Erstellen Sie eine virtuelle Maschine (VBox) zur Installation von Linux (Debian Testing, 3.14 Kernel).
  2. Eine BTRFS-Startpartition, eine LUKS-BTRFS-Rootpartition.
  3. Nehmen Sie für die Geschwindigkeit IO-intensive Änderungen in der VM vor.
  4. Übertragen Sie die Installation auf ein USB-Flashlaufwerk.

Mein erster Versuch bestand darin, eine Festplatte in der VM zu verwenden, die genauso groß ist wie das Flash-Laufwerk und nur dddas 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 Startpartition von EXT4 und einer Stammpartition von LUKS BTRFS partitioniere, funktioniert der UUID-Abruf rundherum einwandfrei. Ich habe dann rsync -aEXS --progressdie Dateien von jeder gemounteten Partition (VM-Image -> Flash-Laufwerk) übertragen. Ich habe chrootauf das Flash-Laufwerk geschrieben und grub-installauf dem Flash-Laufwerk ausgeführt, update-grubum die UUID des Dateisystems zu aktualisieren. Das hat nicht funktioniert. Es war nicht möglich, die verschlüsselte Partition richtig zu erkennen und zu verwenden, um root zu werden. Ich habe es update-initramfs -uohne Erfolg versucht .

Was habe ich vermisst oder hätte besser tun können, um dieses Szenario durchzuführen?

0

1 Antwort auf die Frage

0
Ioan

Die ursprünglichen Schritte waren größtenteils korrekt, aber aus irgendeinem Grund endete ich mit einer korrupten Initrd. Nachfolgend sind alle Schritte zusammengefasst, die zu einem Arbeitsszenario für alle führen sollten, die daran interessiert sind, dasselbe zu tun:

  1. Erstellen Sie eine virtuelle Maschine wie gewünscht.
  2. Installieren Sie Linux mit dem gewünschten Partitionslayout und nehmen Sie alle gewünschten Änderungen vor. In diesem Fall besteht sie aus einer BTRFS-Bootpartition und einer LUKS-verschlüsselten BTRFS-Rootpartition. Andere Layouts sollten funktionieren, wenn darauf geachtet wird, dass Referenzen während der Übertragung ordnungsgemäß aktualisiert werden.
  3. Starten Sie die vorherige VM mit einem Linux-Live-ISO, damit Sie offline auf das installierte System zugreifen können.
  4. Schließen Sie ein USB-Flashlaufwerk für die Übertragung an die VM an. (Hinweis: Sie können ein ddImage des installierten Laufwerks erstellen und außerhalb der VM speichern, das Sie dann von einem normalen Linux-System aus verwenden können.)
  5. Bereiten Sie die Flash-Laufwerkpartitionen vor.
    1. Option: ddDas Originalbild auf das Flash-Laufwerk und mit Schritt 7, dann mit Schritt 10 fortfahren. (Hinweis: In meinem Fall war es notwendig, die Partitionen aus einem unbekannten Grund neu zu erstellen, bei dem blkiddie UUID des Bootes nicht aufgelistet werden konnte BTRFS-Partition.)
    2. Option: Erstellen Sie neue Partitionen mit denselben UUIDs wie die ursprünglichen. Angenommen /dev/sda1für boot und /dev/sda2für root.
      1. Für BTRFS-Bootpartition: sudo mkfs.btrfs -f -L BOOT -U <original UUID> /dev/sda1
      2. Für LUKS-Root-Partition: sudo cryptsetup --uuid=<original UUID> luksFormat /dev/sda2
      3. Map-Root-Partition: sudo cryptsetup --allow-discards open --type luks /dev/sda2 flash_luks
      4. Wurzel mit BTRFS formatieren: sudo mkfs.btrfs -f -L ROOT -U <original UUID> /dev/mapper/flash_luks
    3. Option: Erstellen Sie neue Partitionen mit neuen UUIDs. Wiederholen Sie die gleichen Schritte wie bei Option 2, entfernen Sie jedoch Argumente, die sich auf UUID / uuid beziehen. Beachten Sie die neuen UUIDs mit sudo blkid.
  6. Mounten Sie die ursprünglichen Bildpartitionen.
    1. Erstellen Nur - Lese-Loop-Back - Geräte für jede Partition: sudo kpartx -ar <flash dd image file>. Angenommen, kpartx hängt an loop0 an.
    2. Erstellen Sie Verzeichnisse für Einhängepunkte: sudo mkdir -p /media/orig_boot /media/orig_root
    3. Stiefel: sudo mount -r /dev/mapper/loop0p1 /media/orig_boot
    4. Wurzel-LUKS: sudo cryptsetup -r open --type luks /dev/mapper/loop0p2 orig_luks
    5. Wurzel: sudo mount -r /dev/mapper/orig_luks /media/orig_root
  7. Mounten Sie Flash-Laufwerkpartitionen. Vorausgesetzt /dev/sda1für den Start.
    1. Erstellen Sie Verzeichnisse für Einhängepunkte: sudo mkdir -p /media/flash_boot /media/flash_root
    2. Stiefel: sudo mount -t btrfs -o nodiratime,noatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_boot
    3. Root (vorausgesetzt, es wurde bereits früher mit cryptsetup abgebildet): sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/mapper/flash_luks /media/flash_root
  8. Inhalt kopieren:
    1. Stiefel: sudo rsync -aEXS --progress /media/orig_boot/ /media/flash_boot
    2. Wurzel: sudo rsync -aEXS --progress /media/orig_root/ /media/flash_root
  9. Hängen Sie das Originalbild ab.
    1. Wurzel: sudo umount /media/orig_root
    2. Wurzel-LUKS: sudo cryptsetup close orig_luks
    3. Stiefel: sudo umount /media/orig_boot
    4. kpartx: sudo kpartx -d <flash dd image file>
  10. Chroot in Flash-Laufwerk.
    1. Binden /sys:sudo mount --bind /sys /media/flash_root/sys
    2. Binden /dev:sudo mount --bind /dev /media/flash_root/dev
    3. Binden /dev/pts:sudo mount --bind /dev/pts /media/flash_root/dev/pts
    4. Binden /proc:sudo mount --bind /proc /media/flash_root/proc
    5. Boot aushängen: sudo umount /media/flash_boot
    6. Remount in root: sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_root/boot
    7. Chroot: sudo chroot /media/flash_root
  11. Aktualisieren /etc/fstab.
    1. Startlinie: UUID=<btrfs boot uuid> /boot btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 2
    2. Grundlinie: UUID=<btrfs root uuid> / btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 1
  12. Update /etc/crypttab:flash_luks UUID=<luks root uuid> none discard,luks
  13. Installieren btrfs-tools(falls nicht installiert):sudo apt-get install btrfs-tools
  14. Aktualisieren Sie die Startsachen.
    1. Initrd (verwendet fstab / crypttab, um zu entscheiden, was vor dem Mounten benötigt wird, und beim Booten das LUKS-Kennwort sudo update-initramfs -u -k alleinzugeben ): (Hinweis: Sie können alle initrds mit neu erstellen sudo update-initramfs -c -k all, aber ich habe es nicht versucht, um sicher zu gehen.)
    2. Grub (verwendet fstab zum Aktualisieren der Kernel-Startoptionen und zum Einhängen korrekter Partitionen): sudo update-grub
    3. Installiere grub in MBR (vorausgesetzt /dev/sda):sudo grub-install --recheck /dev/sda
    4. Ausgang chroot: exit
  15. Unmount alles
    1. sudo umount /media/flash_root/boot
    2. sudo umount /media/flash_root/proc
    3. sudo umount /media/flash_root/dev/pts
    4. sudo umount /media/flash_root/dev
    5. sudo umount /media/flash_root/sys
    6. sudo umount /media/flash_root
    7. sudo cryptsetup close flash_luks