Trasferimento del sistema operativo Linux da un'unità a un'altra con partizioni diverse


0

Prima di tutto, alcune domande correlate:

La mia situazione è la seguente:

  1. Creare una macchina virtuale (VBox) per installare Linux (test Debian, kernel 3.14).
  2. Una partizione di avvio BTRFS, una partizione radice BTRFS LUKS.
  3. Apporta modifiche intensive all'IO nella VM per la velocità.
  4. Trasferire l'installazione su un'unità flash USB.

Il mio tentativo iniziale era di utilizzare un disco rigido nella VM delle stesse dimensioni dell'unità flash e dddel tutto. Per qualche motivo, l'UUID della partizione di avvio non può essere recuperato e quindi utilizzato per l'avvio sull'unità flash.

Se partiziono manualmente l'unità flash con una partizione di avvio di EXT4 e una partizione radice di LUKS BTRFS, il recupero UUID funziona perfettamente. Ho quindi usato rsync -aEXS --progressper trasferire i file da ogni partizione montata (immagine VM -> unità flash). Sono chrootentrato nell'unità flash e ho eseguito grub-installsul dispositivo dell'unità flash, insieme update-grubad aggiornare gli UUID del filesystem. Questo non ha funzionato. Non è stato in grado di rilevare / utilizzare correttamente la partizione crittografata per ottenere il root. Ho provato update-initramfs -usenza successo.

Cosa mi sono perso o avrei potuto fare meglio per eseguire questo scenario?

Risposte:


0

I passaggi originali erano per lo più corretti, ma per qualche motivo, ho continuato a finire con un initrd corrotto. Di seguito sono riepilogati tutti i passaggi che dovrebbero risultare in uno scenario di lavoro per chiunque sia interessato a fare lo stesso:

  1. Creare una macchina virtuale come desiderato.
  2. Installa Linux usando il layout di partizione desiderato e apporta tutte le modifiche desiderate. In questo caso, è costituito da una partizione di avvio BTRFS e da una partizione radice BTRFS crittografata LUKS. Altri layout dovrebbero funzionare se si cura di aggiornare correttamente i riferimenti durante il trasferimento.
  3. Avviare la VM precedente utilizzando un ISO live di Linux in modo da poter accedere al sistema installato offline.
  4. Collegare un'unità flash USB alla VM per il trasferimento. (Nota: è possibile creare ddun'immagine dell'unità installata e salvarla al di fuori della VM, che è quindi possibile utilizzare da un normale sistema Linux.)
  5. Preparare le partizioni dell'unità flash.
    1. Opzione: ddl'immagine originale sull'unità flash e andare al passaggio 7, quindi al passaggio 10. (Nota: nel mio caso sembra essere stato necessario ricreare le partizioni per un motivo sconosciuto in cui blkidnon è stato possibile enumerare l'UUID dell'avvio Partizione BTRFS.)
    2. Opzione: creare nuove partizioni utilizzando gli stessi UUID di quelli originali. Supponendo /dev/sda1per l'avvio e /dev/sda2per il root.
      1. Per la partizione di avvio BTRFS: sudo mkfs.btrfs -f -L BOOT -U <original UUID> /dev/sda1
      2. Per la partizione radice LUKS: sudo cryptsetup --uuid=<original UUID> luksFormat /dev/sda2
      3. Partizione radice mappa: sudo cryptsetup --allow-discards open --type luks /dev/sda2 flash_luks
      4. Formattare la radice usando BTRFS: sudo mkfs.btrfs -f -L ROOT -U <original UUID> /dev/mapper/flash_luks
    3. Opzione: creare nuove partizioni utilizzando nuovi UUID. Ripeti gli stessi passaggi dell'opzione 2, ma rimuovi gli argomenti relativi a UUID / uuid. Prendi nota dei nuovi UUID che utilizzano sudo blkid.
  6. Montare partizioni di immagini originali.
    1. Creazione di sola lettura dei dispositivi di loop-back per ogni partizione: sudo kpartx -ar <flash dd image file>. Supponendo che kpartx si attenga a loop0.
    2. Crea dir per punti di montaggio: sudo mkdir -p /media/orig_boot /media/orig_root
    3. Stivale: sudo mount -r /dev/mapper/loop0p1 /media/orig_boot
    4. Root LUKS: sudo cryptsetup -r open --type luks /dev/mapper/loop0p2 orig_luks
    5. Radice: sudo mount -r /dev/mapper/orig_luks /media/orig_root
  7. Montare le partizioni di unità flash. Supponendo l' /dev/sda1avvio.
    1. Crea dir per punti di montaggio: sudo mkdir -p /media/flash_boot /media/flash_root
    2. Stivale: sudo mount -t btrfs -o nodiratime,noatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_boot
    3. Root (supponendo che fosse già stato mappato utilizzando cryptsetup in precedenza): sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/mapper/flash_luks /media/flash_root
  8. Copia il contenuto:
    1. Stivale: sudo rsync -aEXS --progress /media/orig_boot/ /media/flash_boot
    2. Radice: sudo rsync -aEXS --progress /media/orig_root/ /media/flash_root
  9. Smonta l'immagine originale.
    1. Radice: sudo umount /media/orig_root
    2. Root LUKS: sudo cryptsetup close orig_luks
    3. Stivale: sudo umount /media/orig_boot
    4. kpartx: sudo kpartx -d <flash dd image file>
  10. Chroot nell'unità flash.
    1. Legare /sys:sudo mount --bind /sys /media/flash_root/sys
    2. Legare /dev:sudo mount --bind /dev /media/flash_root/dev
    3. Legare /dev/pts:sudo mount --bind /dev/pts /media/flash_root/dev/pts
    4. Legare /proc:sudo mount --bind /proc /media/flash_root/proc
    5. Smonta avvio: sudo umount /media/flash_boot
    6. Rimontare dentro 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. Aggiornamento /etc/fstab.
    1. Linea di avvio: UUID=<btrfs boot uuid> /boot btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 2
    2. Linea di radice: UUID=<btrfs root uuid> / btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 1
  12. Aggiornamento /etc/crypttab:flash_luks UUID=<luks root uuid> none discard,luks
  13. Installa btrfs-tools(se non installato):sudo apt-get install btrfs-tools
  14. Aggiorna roba di avvio.
    1. Initrd (usa fstab / crypttab per decidere cosa è necessario prima del mount e richiedere la password LUKS all'avvio): sudo update-initramfs -u -k all(Nota: puoi ricreare tutti gli initrd usando sudo update-initramfs -c -k all, ma non ne ho provato per sicurezza.)
    2. Grub (usa fstab per aggiornare le opzioni di avvio del kernel e montare le partizioni corrette): sudo update-grub
    3. Installa grub su MBR (supponendo /dev/sda):sudo grub-install --recheck /dev/sda
    4. Esci dal chroot: exit
  15. Smonta tutto.
    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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.