Cómo migrar una instalación LVM cifrada a un nuevo disco


15

Tengo una instalación de computadora portátil algo personalizada. Quiero pasar a un SSD directamente, sin tener que reinstalar Ubuntu, reinstalar todas las aplicaciones y hacer todos los demás cambios nuevamente. El SSD es más pequeño, así que no puedo hacerlo dd.

La instalación original se realizó con el instalador alternativo de Ubuntu, seleccionando el cifrado de disco completo con la opción LVM.

¿Qué pasos son necesarios y cómo los hago? Espero tener que:

  • configurar las particiones del disco, cifrado, etc.
  • copiar los datos a través de
  • instale grub y haga que funcione con nuevos valores de UUID, etc.

Respuestas:


14

Particionamiento y copia de archivos - mientras se ejecuta

Lo hice comenzando con el sistema en ejecución. Conecté el nuevo SSD a un adaptador USB SATA y lo particioné, configuré LVM y copié los archivos.

# 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

Su disco ahora debería verse así:

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

El siguiente paso es colocar el cifrado en la partición y LVM encima del cifrado.

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

Ahora cree los sistemas de archivos, móntelos y copie su 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/

Hasta este punto, puede mantener el sistema en funcionamiento y usarlo. Ahora necesita apagar e iniciar en un CD / USB en vivo para que pueda hacer que el sistema se apague.

Particionamiento y copia de archivos - CD / USB en vivo

Una vez que haya arrancado, abra una terminal y:

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/

Cambio de UUID

Ahora somos root dentro del chroot y ejecutamos los siguientes comandos:

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

Ahora verá todos los UUID para los distintos discos del sistema. Deberá editar los UUID /etc/fstaby /etc/crypttabhacer coincidir los valores de/dev/sdc?

En /etc/fstablo que necesita utilizar el UUID para el disco de arranque - /dev/sdc1si los discos tienen la misma letra que yo.

En /etc/crypttablo que necesita utilizar el UUID para el otro (grande) de particiones - /dev/sdc5si los discos tienen la misma letra que yo.

initramfs y 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

Ahora apague, coloque el SSD dentro de su computadora portátil, cruce los dedos y arranque.

Enlaces útiles

Buena guía para las cosas de cryptsetup en http://www.debian-administration.org/articles/577

Para instalar grub en una partición externa: /programming/247030/how-to-set-up-grub-in-a-cloned-hard-disk

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


Acabo de descubrir que la exclusión rsync de sys excluía algunos directorios que quería incluir. Se me ocurrirá un comando rsync más exigente y actualizaré esta respuesta.
Hamish Downer

Solo un recordatorio: prometiste una actualización para esta excelente respuesta :-)
guntbert

En la sección chroot, antes de montar, tuve que crear los puntos de montaje: de sudo mount -t proc proc /mnt/sdcroot/proc sudo mount -t sysfs sys /mnt/sdcroot/sys sudo mount -o bind /dev /mnt/sdcroot/devantemano hacer: sudo mkdir /mnt/sdcroot/proc sudo mkdir /mnt/sdcroot/sys--- En mi caso, el comando para crear initramfs no funcionó, porque las versiones del kernel no coincidían y por lo tanto initramfs no podía encontré el kernel correcto en / boot, por lo que no pude hacer que todo funcionara.
Blindfreddy

He seguido su guía "mientras se ejecuta", hice algunos ajustes (ext4) y hasta ahora funcionó maravillosamente. Cambié el UUID de fstab para el arranque a la nueva partición. También cambié los puntos de montaje para root e intercambio. ¿Hay algo más además de fstab necesario para cambiar? Voy a intentar arrancar ahora: D
Luka

Cuando haga luksOpen, asegúrese de asignar la misma etiqueta que se usa en crypttab o la configuración de grub no funcionará correctamente. Me llevó una eternidad entender eso. Otra respuesta menciona vinculante / run / lvm. No sé si eso es necesario. Para la depuración, puede ahorrar tiempo practicando en un disco USB e intentando arrancarlo con kvm.
Dan Stahlke

3

Traté de comentar, pero me falta la reputación :-)

De todos modos, utilicé con éxito la increíble guía de Hamish para migrar a un ssd en mi computadora portátil de trabajo encriptada con luks basada en Linux. Solo algunas observaciones:
1. Después de crear el intercambio, lv también usa

# mkswap /dev/mapper/crypt-swap 

para inicializar el intercambio, de lo contrario falla durante el arranque, como se indica en el comentario anterior.
2. El rsynccomando es demasiado restrictivo como es. Cuando lo usé con --exclude run, me encontré con todo tipo de muuuuuuuuuuuuuuuuuuuuy extraño en general, no visto por los errores de Internet. La carrera tiene que ser incluida . El sistema está vacío de todos modos cuando se inicia en modo de mantenimiento, por lo que puede permanecer. Además, si excluye tmp, los recién creados en el destino / tmp y / var / tmp no se ponen un poco pegajosos; recuerde configurarlos usted mismo. Terminé usando algo como

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

En general, una gran guía, muestra la descripción del proceso con precisión ¡Te enseña a pescar, por así decirlo!


0

[No se pudo incluir un comentario, aunque esta publicación pertenece a un comentario y no a una respuesta]

Con este método, también podría mover una instalación lvm ** no ** cifrada existente a una instalación lvm cifrada en el nuevo disco; solo necesita los pasos adicionales (para instalar cryptsetup mientras está chrooteado en el disco de destino), como se menciona en http://blog.andreas-haerter.com/2011/06/18/ubuntu-full-disk-encryption-lvm -luks , específicamente:

apt-get install lvm2 cryptsetup

El comando anterior también instala lvm2 en el disco de destino, aunque eso es innecesario, hubiera sido útil si estuviera moviendo un sistema que no sea lvm a un sistema lvm en su SSD, utilizando un Live CD / DVD. Tenga en cuenta que también necesitaría copiar sobre /etc/resolve.conf en su chroot para que pueda ejecutar apt-get install con éxito: se menciona en la URL mencionada anteriormente, fragmento de código:sudo cp /etc/resolv.conf /mnt/sdcroot/etc/resolv.conf

Además, es más fácil hacer un cp (usando una instalación diferente (no desde dentro de la instalación de origen que es), por ejemplo, un CD / DVD en vivo) en lugar de rsync para la partición /, como se describe en Cómo mover Ubuntu a un SSD

Quizás también deba crear un intercambio utilizando mkswapsu /dev/mapper/<swap-name-here>partición.

También debe habilitar el soporte TRIM al mismo tiempo, como se menciona en http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html

ADVERTENCIA: El texto adicional a continuación no es para aquellos que usan MBR, a lo que parece pertenecer este tema / hilo. Encontré esto útil de todos modos, así que estoy publicando para el beneficio de aquellos que pueden adaptar las instrucciones en este hilo / tema a su disco GPT.

Y para aquellos que usan GPT en lugar de MBR (usando parted / gparted y gdisk en lugar de fdisk), aprendí por las malas que su partición / boot (que no está encriptada) no debe numerarse después de su dispositivo luks en el orden GPT. Debido a que había creado una partición ESP después de crear las particiones / boot y luks usando gparted, tuve que ordenar los números de partición para que / boot aún tuviera un número menor que el dispositivo luks.

Como comentario aparte y no relacionado con esta publicación estrictamente hablando, aquellos que usan GPT y UEFI con rEFInd, rEFInd tal vez tengan problemas para presentarle una lista de particiones para arrancar si tiene múltiples ESP en su sistema, tengo uno por disco, así que en su lugar de usar rEFInd, estoy usando grub, que funciona bien.


0

Antes de la sección initramfs y grub, es posible que deba:

vgscan
vgchange -a y

0

Un poco tarde, pero debe actualizar el archivo /etc/initramfs-tools/conf.d/resume para reflejar la modificación del intercambio. Sin esta modificación, romperá la función de hibernación.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.