Come migrare un'installazione LVM crittografata su un nuovo disco


15

Ho un'installazione laptop un po 'personalizzata, voglio passare direttamente a un SSD, senza dover reinstallare Ubuntu, reinstallare tutte le app e apportare nuovamente tutte le altre modifiche. L'SSD è più piccolo, quindi non posso proprio farlo dd.

L'installazione originale è stata eseguita con il programma di installazione alternativo di Ubuntu, selezionando la crittografia completa del disco con l'opzione LVM.

Quali passaggi sono richiesti e come li faccio? Mi aspetto di dover:

  • impostare le partizioni del disco, la crittografia ecc
  • copia i dati attraverso
  • installa grub e fallo funzionare con nuovi valori UUID ecc.

Risposte:


14

Partizionamento e copia file - durante l'esecuzione

L'ho fatto iniziando con il sistema in esecuzione. Ho collegato il nuovo SSD a un adattatore SATA USB e l'ho partizionato, impostato LVM e copiato i file.

# confirm disk size is as expected for sdc
sudo fdisk -l /dev/sdc
# now partition - 500 MB partition as boot, the rest as a single (logical) partition
sudo cfdisk /dev/sdc

Il tuo disco dovrebbe ora apparire come:

sudo fdisk -l /dev/sdc
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63      979964      489951   83  Linux
/dev/sda2          979965   234441647   116730841+   5  Extended
/dev/sda5          980028   234441647   116730810   82  Linux swap / Solaris

Il prossimo passo è mettere la crittografia sulla partizione e LVM in cima alla crittografia.

sudo cryptsetup -y luksFormat /dev/sdc5
sudo cryptsetup luksOpen /dev/sdc5 crypt
sudo vgcreate crypt-lvm /dev/mapper/crypt
sudo lvcreate -L4G -nswap crypt-lvm
sudo lvcreate -l100%FREE -nroot crypt-lvm

Ora crea i filesystem e montali e copia il tuo sistema.

sudo mkfs.ext2 /dev/sdc1
# you do ls /dev/mapper to check the name if different
sudo mkfs.ext4 /dev/mapper/crypt-root
sudo mkdir /mnt/boot
sudo mkdir /mnt/root
sudo mount -t ext2 /dev/sdc1 /mnt/boot
sudo mount -t ext4 /dev/mapper/crypt-root /mnt/root

# rsync files
sudo rsync -a /boot/* /mnt/boot/
sudo rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude run --exclude boot --exclude sys --exclude tmp /* /mnt/root/

Fino a questo punto è possibile mantenere il sistema in esecuzione e utilizzarlo. Ora è necessario arrestare e avviare un CD / USB live in modo da poter mettere il sistema in uno stato di spegnimento.

Partizionamento e copia file - live CD / USB

Una volta avviato, apri un terminale e:

sudo apt-get install lvm2

# mount old hard drive
sudo cryptsetup luksOpen /dev/sda5 sda5_crypt
sudo mkdir /mnt/sdaroot
# you can do ls /dev/mapper to check the name if it is different
sudo mount -t ext4 /dev/mapper/sda5_crypt--root /mnt/sdaroot

# mount new hard drive (over USB)
sudo cryptsetup luksOpen /dev/sdc5 sdc5_crypt
sudo mkdir /mnt/sdcroot
sudo mount -t ext4 /dev/mapper/sdc5_crypt--root /mnt/sdcroot

# final rsync
sudo rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude run --exclude boot --exclude sys --exclude tmp /mnt/sdaroot/* /mnt/sdcroot/

chroot

# prepare chroot
cd /mnt/sdcroot
sudo mkdir boot

# these directories are set up by the system and we need them inside the chroot
sudo mount -t proc proc /mnt/sdcroot/proc
sudo mount -t sysfs sys /mnt/sdcroot/sys
sudo mount -o bind /dev /mnt/sdcroot/dev

# now enter the chroot
sudo chroot /mnt/root/

Modifica degli UUID

Ora siamo root all'interno del chroot ed eseguiamo i seguenti comandi:

# inside chroot, as root
mount -t ext2 /dev/sdc1 /boot
blkid

Ora vedrai tutti gli UUID per i vari dischi nel sistema. Sarà necessario modificare gli UUID /etc/fstabe /etc/crypttabfar corrispondere i valori per/dev/sdc?

In /etc/fstabdevi usare l'UUID per il disco di avvio - /dev/sdc1se i tuoi dischi hanno la mia stessa lettera.

In /etc/crypttabè necessario utilizzare l'UUID per l'altro (grande) partizione - /dev/sdc5se i dischi hanno la stessa lettera come me.

initramfs e grub

# now update initramfs for all installed kernels
update-initramfs -u -k all

# install grub and ensure it is up to date
grub-install /dev/sdc      # NOTE sdc NOT sdc1
update-grub

# hit Ctrl-D to exit chroot
sudo umount /mnt/root

Ora spegni, metti l'SSD nel tuo laptop, incrocia le dita e avvia.

Link utili

Buona guida per le cose di cryptsetup su http://www.debian-administration.org/articles/577

Per installare grub su una partizione esterna: /programming/247030/how-to-set-up-grub-in-a-cloned-hard-disk

https://help.ubuntu.com/community/UsingUUID


Ho appena scoperto che rsync exclude di sys ha escluso alcune directory che volevo includere. Verrò con un comando rsync più esigente e aggiornerò questa risposta.
Hamish Downer

Solo un promemoria: hai promesso un aggiornamento per questa eccellente risposta :-)
guntbert

Nella sezione chroot, prima del montaggio, dovevo creare i punti di mount: in sudo mount -t proc proc /mnt/sdcroot/proc sudo mount -t sysfs sys /mnt/sdcroot/sys sudo mount -o bind /dev /mnt/sdcroot/devanticipo do: sudo mkdir /mnt/sdcroot/proc sudo mkdir /mnt/sdcroot/sys--- Nel mio caso, il comando per creare initramfs non funzionava, perché le versioni del kernel non corrispondevano e quindi initramfs non poteva trova il kernel giusto in / boot, quindi non sono riuscito a far funzionare tutto.
Blindfreddy,

Ho seguito la tua guida "mentre corri", ho apportato alcune modifiche (ext4) e finora ha funzionato meravigliosamente. Ho cambiato in UUID fstab per l'avvio alla nuova partizione Ho anche cambiato i mountpoint per root e swap. C'è qualcos'altro oltre a fstab necessario per cambiare? Ora proverò a fare il boot: D
Luka,

Quando esegui luksOpen, assicurati di assegnare la stessa etichetta utilizzata in crypttab o l'installazione di grub non funzionerà correttamente. Mi ha preso per sempre per capirlo. Un'altra risposta menziona binding / run / lvm. Non so se è necessario. Per il debug puoi risparmiare tempo esercitandoti su un disco USB e provando ad avviarlo con kvm.
Dan Stahlke,

3

Ho provato a commentare, ma mi manca la reputazione :-)

Ad ogni modo, ho usato con successo la fantastica guida di Hamish per migrare su un ssd sul mio laptop di lavoro con crittografia Luks basato su Linux. Solo alcune osservazioni:
1. Dopo aver creato lo swap lv usare anche

# mkswap /dev/mapper/crypt-swap 

per inizializzare lo scambio, altrimenti non riesce durante l'avvio, come indicato nel commento sopra.
2. Il rsynccomando è troppo restrittivo. Quando l'ho usato con --exclude run, mi sono imbattuto in ogni sorta di veeeeeeery strano generalmente non visto dagli errori di Internet. La corsa deve essere inclusa . Il sistema è comunque vuoto quando si avvia in modalità manutenzione, quindi può rimanere. Inoltre, se si esclude tmp, i nuovi creati sul target / tmp e / var / tmp non ottengono un po 'di appiccicosità - ricordarsi di impostarli da soli. Ho finito per usare qualcosa del genere

# rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude boot /mnt/sdaroot/* /mnt/sdcroot/

Nel complesso, un'ottima guida, mostra accuratamente la panoramica del processo! Ti insegna a pescare, per così dire!


0

[Impossibile inserire un commento, sebbene questo post appartenga a un commento anziché a una risposta]

Usando questo metodo, puoi anche spostare un'installazione lvm ** non - ** crittografata esistente su un'installazione lvm crittografata sul nuovo disco; hai solo bisogno dei passaggi aggiuntivi (per installare cryptsetup mentre chroot 'nel disco di destinazione), come menzionato in http://blog.andreas-haerter.com/2011/06/18/ubuntu-full-disk-encryption-lvm -luks , in particolare:

apt-get install lvm2 cryptsetup

Il comando precedente installa anche lvm2 sul disco di destinazione, sebbene ciò non sia necessario, sarebbe utile se si stesse spostando un sistema non lvm in un sistema lvm sul proprio SSD, usando un Live CD / DVD. Nota che dovresti anche copiare su /etc/resolve.conf sul tuo chroot per poter eseguire apt-get install con successo: è menzionato nell'URL di cui sopra, frammento di codice:sudo cp /etc/resolv.conf /mnt/sdcroot/etc/resolv.conf

Inoltre, è più semplice eseguire un cp (utilizzando un'installazione diversa (non dall'interno dell'installazione di origine), ad esempio un CD / DVD live) invece di rsync per la partizione /, come descritto in Come spostare Ubuntu su un SSD

Forse dovresti anche creare swap usando mkswapsulla tua /dev/mapper/<swap-name-here>partizione.

Dovrebbe anche abilitare il supporto TRIM allo stesso tempo, come menzionato in http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html

ATTENZIONE: L'ulteriore testo di seguito non è per coloro che utilizzano MBR, a cui questo argomento / thread sembra pertinente. L'ho trovato comunque utile, quindi sto postando a beneficio di coloro che possono adattare le istruzioni in questo thread / argomento al proprio disco GPT.

E per quelli che usano GPT invece di MBR (usando parted / gparted e gdisk invece di fdisk), ho imparato a fondo che la tua partizione / boot (che non è crittografata) non dovrebbe essere numerata dopo il tuo dispositivo luks in ordine GPT. Poiché avevo creato una partizione ESP dopo aver creato le partizioni del dispositivo / boot e luks usando gparted, ho dovuto quindi ordinare i numeri di partizione in modo che / boot fosse ancora numerato meno del dispositivo luks.

A parte questo e non collegato a questo post in senso stretto, quelli che usano GPT e UEFI con rEFInd, rEFInd hanno forse problemi a presentarti un elenco di partizioni da cui avviare se hai più ESP nel tuo sistema, ne ho uno per disco, quindi invece di usare rEFInd, sto usando grub, che funziona benissimo.


0

Prima della sezione initramfs e grub potresti dover:

vgscan
vgchange -a y

0

Un po 'tardi, ma devi aggiornare il file /etc/initramfs-tools/conf.d/resume per riflettere la modifica dello swap. Senza questa modifica si interromperà la funzione di ibernazione.

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.