Übertragen des Linux-Betriebssystems von einem Laufwerk auf ein anderes mit verschiedenen Partitionen


0

Zunächst einige verwandte Fragen:

Meine Situation ist wie folgt:

  1. Erstellen Sie eine virtuelle Maschine (VBox), um Linux zu installieren (Debian-Test, 3.14-Kernel).
  2. Eine BTRFS-Boot-Partition, eine LUKS BTRFS-Root-Partition.
  3. Nehmen Sie in der VM aus Gründen der Geschwindigkeit intensive E / A-Änderungen vor.
  4. Übertragen Sie die Installation auf einen USB-Stick.

Mein erster Versuch war, eine Festplatte in der VM mit der gleichen Größe wie das Flash-Laufwerk und nur zu verwenden dd das ganze Ding. 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. Habe ich dann benutzt rsync -aEXS --progress Übertragen der Dateien von jeder bereitgestellten Partition (VM-Image - & gt; Flash-Laufwerk). ich chroot -in das Flash-Laufwerk und lief grub-install auf dem Flash-Laufwerk 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 werden. Ich habe es versucht update-initramfs -u ohne Erfolg.

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

Antworten:


0

Die ursprünglichen Schritte waren größtenteils korrekt, aber aus irgendeinem Grund endete ich immer wieder mit einer beschädigten initrd. Im Folgenden sind alle Schritte zusammengefasst, die für alle, die das Gleiche tun möchten, zu einem Arbeitsszenario führen sollten:

  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 es aus einer BTRFS-Boot-Partition und einer LUKS-verschlüsselten BTRFS-Root-Partition. Andere Layouts sollten funktionieren, wenn die 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-Flash-Laufwerk für die Übertragung an die VM an. (Hinweis: Sie können einen erstellen dd Image des installierten Laufwerks erstellen und außerhalb der VM speichern, die Sie dann von einem normalen Linux-System aus verwenden können.)
  5. Bereiten Sie die Partitionen des Flash-Laufwerks vor.
    1. Möglichkeit: dd das ursprüngliche Image auf das Flash-Laufwerk kopieren und mit Schritt 7 fortfahren, dann mit Schritt 10. (Hinweis: In meinem Fall schien es aus einem unbekannten Grund erforderlich gewesen zu sein, die Partitionen neu zu erstellen, wo blkid konnte die UUID der Boot-BTRFS-Partition nicht auflisten.)
    2. Option: Erstellen Sie neue Partitionen mit denselben UUIDs wie die ursprünglichen. Vorausgesetzt /dev/sda1 für boot und /dev/sda2 fü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. Kartenstammpartition: sudo cryptsetup --allow-discards open --type luks /dev/sda2 flash_luks
      4. Formatieren Sie root mit BTRFS: sudo mkfs.btrfs -f -L ROOT -U <original UUID> /dev/mapper/flash_luks
    3. Option: Erstellen Sie neue Partitionen mit neuen UUIDs. Wiederholen Sie dieselben Schritte wie bei Option 2, entfernen Sie jedoch Argumente, die sich auf UUID / uuid beziehen. Beachten Sie die neuen UUIDs mit sudo blkid.
  6. Hängen Sie die ursprünglichen Image-Partitionen ein.
    1. Erstellen Sie schreibgeschützte Loopback-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. Root-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. Laden Sie die Partitionen des Flash-Laufwerks. Vorausgesetzt /dev/sda1 zum booten.
    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 zuvor mit cryptsetup gemappt): 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 aus.
    1. Wurzel: sudo umount /media/orig_root
    2. Root-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. In root wieder einhängen: 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. Wurzelzeile: UUID=<btrfs root uuid> / btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 1
  12. Aktualisieren /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. Aktualisiere das Boot-Zeug.
    1. Initrd (verwendet fstab / crypttab, um zu entscheiden, was vor dem Mounten erforderlich ist, und um beim Booten zur Eingabe des LUKS-Kennworts aufzufordern): sudo update-initramfs -u -k all (Hinweis: Sie können alle initrds mit neu erstellen sudo update-initramfs -c -k all, aber ich habe das nicht ausprobiert, um sicherzugehen.)
    2. Grub (verwendet fstab, um die Kernel-Boot-Optionen zu aktualisieren und korrekte Partitionen bereitzustellen): sudo update-grub
    3. Installiere grub auf MBR (vorausgesetzt /dev/sda ): sudo grub-install --recheck /dev/sda
    4. Chroot verlassen: exit
  15. Alles aushängen.
    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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.