Desaventuras en la tierra de Linux, parte 16

Recientemente uno de mis discos duros empezó a dar problemas, todo funcionaba bien en mi PC hasta que intentaba actualizar la imagen de arranque de Linux como parte de una actualización de software y ya que la partición de arranque estaba en ese disco duro problemático, cada vez que intentaba la actualización, Linux montaba el sistema de archivos en / como de sólo lectura como una protección tanto al software como al hardware. En resumen, podía usar mi PC normalmente (mi carpeta /home funcionaba correctamente) mientras no intentara la actualización de la imagen de arranque. Lo anterior no parecía ser un problema hasta que tuve que instalar nuevo software usando el gestor de paquetes, lo cual resultó imposible ya que había una instalación de software previa incompleta. Aunque compilar el nuevo software manualmente o intentar instalarlo como usuario eran ambas posibilidades, entendí que era hora de cambiar el disco duro dañado y así comenzó esta aventura.

Para poder quitar el disco dañado de mi PC había dos opciones: reinstalar Linux desde cero o intentar usar LVM para mover los datos de ese disco a otro disco y cruzar los dedos para que funcionara. Decidí intentar los segundo; ya había usado LVM para agregar nuevos discos duros a mi sistema de archivos pero nunca para quitar discos duros y mucho menos uno con el sistema de archivos / y esa era la causa de mi nerviosismo inicial al considerar esta idea.

Lo primero que hice fue clonar la partición de arranque. Hay que recordar que, por obvias razones, la partición de arranque no forma parte del LVM y, ya que esta partición estaba en el disco duro que quería quitar de mi PC, tenía que mover primero los datos de arranque a un nuevo disco.

Advertencia: Las instrucciones en este post no son para segurilas literalmente, ¡no hagas eso!, la configuración de tu sistema será distinta. Este post está escrito para ser usado como referencia para quienes tengan problemas similares pero siempre debes saber qué es lo que estás haciendo y siempre debes hacer un respaldo de tus datos importantes antes de intentar algo como lo descrito en este post.

Para clonar la partición de arranque no basta con clonar los datos de la partición, en este caso /dev/sda1, sino que es necesario clonar el MBR y el grub, por lo que lo más fácil es clonar /dev/sda usando el comando dd; en este caso, clonar los primeros 256 MB (el tamaño de la partición de arranque) fue suficiente. Después de clonar la partición de arranque al nuevo disco duro y cambiar el disco de arranque en el BIOS, Linux arrancó sin problemas desde el nuevo disco duro.

Después de clonar la partición de arranque /dev/sda1 al nuevo disco duro, la partición de arranque era ahora /dev/sdb1. Utilicé fdisk para crear una nueva partición en el espacio restante del disco duro respetando la nueva partición de arranque. Antes de poder utilizar el nuevo disco con LVM es necesario agregarlo como un volumen físico pero, en este caso, no quería agregar directamente la partición /dev/sdb2 al LVM sino un volumen encriptado, por lo que antes de agregarla al LVM, encripté la partición usando cryptsetup. Después de crear el volumen encriptado, el estado de las particiones en el nuevo disco era el siguiente, nótese que el volumen que agregaré al LVM será /dev/mapper/sdb2_crypt:

monstruosoft@debian:~$ lsblk 
NAME                    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sdb                       8:16   0  74.5G  0 disk  
├─sdb1                    8:17   0   243M  0 part  /boot
└─sdb2                    8:18   0  74.3G  0 part  
  └─sdb2_crypt          253:5    0  74.3G  0 crypt

Ahora era posible agregar el nuevo volumen encriptado al ‘volume group‘ o ‘grupo de unidades‘ del LVM que contiene el sistema de archivos. En este caso, el nombre del ‘volume group‘ para agregar el volumen encriptado es debian-vg como lo indica el comando vgdisplay:

monstruosoft@debian:~$ sudo vgdisplay 
  --- Volume group ---
  VG Name               debian-vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  27
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               95.68 GiB
  PE Size               4.00 MiB
  Total PE              24495
  Alloc PE / Size       15336 / 59.91 GiB
  Free  PE / Size       9159 / 35.78 GiB

Se puede agregar el nuevo volumen encriptado al ‘volume group‘ usando el comando vgextend:

monstruosoft@debian:~$ sudo vgextend debian-vg /dev/mapper/sdb2_crypt
  Physical volume "/dev/mapper/sdb2_crypt" successfully created.
  Volume group "debian-vg" successfully extended

En este punto se puede revisar que el nuevo volumen haya sido agregado al LVM usando los comandos vgdisplay, pvdisplay y lvdisplay; no postearé aquí la salida de estos comandos para no hacer este post excesivamente largo.

Advertencia: El nuevo disco o partición que se agrega al LVM debe tener suficiente espacio libre para almacenar los datos usados en el disco que se va a eliminar.

Con el nuevo volumen físico agregado correctamente al LVM, ahora todo está listo para ejecutar el comando pvmove, esperar y cruzar los dedos. En este caso, el volumen que se eliminará del LVM es /dev/mapper/sdc6_crypt:

monstruosoft@debian:~$ sudo pvmove /dev/mapper/sdc6_crypt
  /dev/mapper/sdc6_crypt: Moved: 0.00%
  /dev/mapper/sdc6_crypt: Moved: 0.77%
  /dev/mapper/sdc6_crypt: Moved: 1.64%
  ...
  /dev/mapper/sdc6_crypt: Moved: 98.60%
  /dev/mapper/sdc6_crypt: Moved: 99.43%
  /dev/mapper/sdc6_crypt: Moved: 100.00%

Al terminar la ejecución de pvmove se puede verificar con pvdisplay que el volumen que se va a eliminar, en este caso /dev/mapper/sdc6_crypt, ya no esté siendo usado por el LVM:

--- Physical volume ---
  PV Name               /dev/mapper/sdc6_crypt
  VG Name               debian-vg
  PV Size               86.39 GiB / not usable 3.84 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              22115
  Free PE               22115
  Allocated PE          0

Esto significa que ahora es posible eliminar este disco o volumen encriptado del ‘volume group‘ usando el comando vgreduce:

monstruosoft@debian:~$ sudo vgreduce debian-vg /dev/mapper/sdc6_crypt
  Removed "/dev/mapper/sdc6_crypt" from volume group "debian-vg"

Una vez que se ha eliminado el disco dañado del LVM, es posible seguir usando el equipo normalmente pero no sin antes recordar que si se han agregado volúmenes encriptados al LVM se debe actualizar el archivo /etc/crypttab de manera correspondiente. En este caso, es necesario eliminar la referencia a /dev/mapper/sdc6_crypt ya que no se necesita más durante el arranque y se debe agregar el nuevo volumen /dev/mapper/sdb2_crypt; hay que recordar que el uuid que se debe escribir en /etc/crypttab es el de la partición que contiene el volumen encriptado. En este caso, el archivo /etc/crypttab actualizado luce de la siguiente manera:

monstruosoft@debian:~$ cat /etc/crypttab 
sdb5_crypt UUID=69efa93e-55e0-46b7-9042-5e4deadbeef9 none luks
sdb2_crypt UUID=d181b00e-a351-45f0-9cce-deadbeef66cd none luks

Ahora finalmente se puede ejecutar el comando update-initramfs para actualizar la imagen de arranque. Como recordarán, al inicio del post mencioné que intentar esta actualización de la imagen de arranque siempre causaba problemas con el viejo disco duro así que es hora de cruzar los dedos y esperar que todo salga bien:

monstruosoft@debian:~$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-3.16.0-4-amd64

Hora de reiniciar la PC.

. . .

. . .

Después de una cardiaca espera que pareció eterna, la pantalla de login de LDM apareció y todo funcionaba correctamente. Había usado LVM para remover exitosamente el disco duro dañado y pude retirarlo de mi PC sin afectar mi instalación de Linux. Aún quedaban algunas cuestiones por resolver, como el hecho de que el gestor de paquetes no funcionaba a causa de los errores causados por el viejo disco duro pero lo más difícil ya estaba solucionado y el resto tendrá que esperar hasta el siguiente post.

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s