Redimensionar discos con LVM + LUKS: Cuando parted te complica la vida

En una máquina virtual (VM) he asignado espacio extra, como de costumbre. A la hora de redimensionar, el proceso debería haber sido sencillo:

Lo de siempre:

  1. Informar de los cambios: partprobe /dev/sda

  2. Redimensionar la partición cifrada: cryptsetup resize sda5_crypt

  3. Redimensionar el Volumen Físico: pvresize /dev/mapper/sda5_crypt

  4. Expandir el volumen lógico y el sistema de archivos: lvextend -l +100%FREE /dev/debian-vg/root -r

 ¿Que pasó ?

No me acordaba que estaba cifrado y lo primero que hice fue meterme a parted:

parted /dev/sda 
unit s
resizepart 5 -1s

Luego vi que tenía LVM. Es normal; llevo levantado desde las 4 AM y ya son las 21:00. Menos mal que es un entorno de pruebas que se me quedó sin espacio, pero tampoco pasó nada grave.

Se desalinearon las particiones y luego cryptsetup resize, junto con todo lo demás, no detectaba los cambios en el disco porque estaban trabajando directamente sobre la partición 5:

Disposit.  Inicio Comienzo    Final Sectores Tamaño Id Tipo
/dev/sda1  *          2048  1980415  1978368   966M 83 Linux
/dev/sda2          1982462 41940991 39958530  19,1G  f W95 Ext'd (LBA)
/dev/sda5          1982464 41940991 39958528  19,1G 83 Linux

Básicamente, al redimensionar con parted, tanto la partición extendida como la lógica se quedaron bloqueadas en el sector 41940991.

Solución: Eliminar y recrear

Aquí hubo un error interesante. Pego el history completo del proceso con fdisk:

fdisk /dev/sda

Bienvenido a fdisk (util-linux 2.41).
Los cambios solo permanecerán en la memoria, hasta que decida escribirlos.
Tenga cuidado antes de utilizar la orden de escritura.

Este disco está actualmente en uso - no se aconseja volver a crear particiones.
Se recomienda desmontar todos los sistemas de ficheros y deshacer todas las
particiones de intercambio de este disco.


Orden (m para obtener ayuda): p

Disco /dev/sda: 97,66 GiB, 104857600000 bytes, 204800000 sectores
Modelo de disco: VBOX HARDDISK   
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0x05f1eb04

Disposit.  Inicio Comienzo    Final Sectores Tamaño Id Tipo
/dev/sda1  *          2048  1980415  1978368   966M 83 Linux
/dev/sda2          1982462 41940991 39958530  19,1G  f W95 Ext'd (LBA)
/dev/sda5          1982464 41940991 39958528  19,1G 83 Linux

Orden (m para obtener ayuda): d
Número de partición (1,2,5, valor predeterminado 5): 

Se ha borrado la partición 5.

Orden (m para obtener ayuda): d
Número de partición (1,2, valor predeterminado 2): 2

Se ha borrado la partición 2.

Orden (m para obtener ayuda): n
Tipo de partición
   p   primaria (1 primaria(s), 0 extendida(s), 3 libre(s))
   e   extendida (contenedor para particiones lógicas)
Seleccionar (valor predeterminado p): e
Número de partición (2-4, valor predeterminado 2): 2
Primer sector (1980416-204799999, valor predeterminado 1980416): 1982462
Último sector, +/-sectores o +/-tamaño{K,M,G,T,P} (1982462-204799999, valor predeterminado 204799999): 

Crea una nueva partición 2 de tipo 'Extended' y de tamaño 96,7 GiB.

Orden (m para obtener ayuda): n
Se está utilizando todo el espacio para particiones primarias.
Se añade la partición lógica 5
Primer sector (1984510-204799999, valor predeterminado 1984512): 1982464
El valor está fuera del rango.

En condiciones normales habría hecho lo correcto, pero yo tenía un valor de referencia que no guardé originalmente antes de ejecutar parted. El inicio que yo tenía como referencia era 1982462, pero fdisk me recomendaba 1980416. Al intentar forzar el valor alterado, generé una desalineación que impedía redimensionar.

La solución ha sido usar la recomendación de fdisk para el inicio de la partición extendida. Al no tener la referencia previa a la "lía" con parted, le hacemos caso a la herramienta y regeneramos todo de nuevo:

NOTA!: Cuando te pregunte si quieres borrar la firma crypto_LUKS, dile que NO.  Si le dices que si igual no podrás salir ya nunca más de ese infierno.

orden (m para obtener ayuda): d
Número de partición (1,2, valor predeterminado 2): 2
Se ha borrado la partición 2.

Orden (m para obtener ayuda): n
Tipo de partición
   p   primaria (1 primaria(s), 0 extendida(s), 3 libre(s))
   e   extendida (contenedor para particiones lógicas)
Seleccionar (valor predeterminado p): e
Número de partición (2-4, valor predeterminado 2): 2
Primer sector (1980416-204799999, valor predeterminado 1980416): 
Último sector, +/-sectores o +/-tamaño{K,M,G,T,P} (1980416-204799999, valor predeterminado 204799999): 

Crea una nueva partición 2 de tipo 'Extended' y de tamaño 96,7 GiB.

Orden (m para obtener ayuda): n
Se está utilizando todo el espacio para particiones primarias.
Se añade la partición lógica 5
Primer sector (1982464-204799999, valor predeterminado 1982464): 
Último sector, +/-sectores o +/-tamaño{K,M,G,T,P} (1982464-204799999, valor predeterminado 204799999): 

Crea una nueva partición 5 de tipo 'Linux' y de tamaño 96,7 GiB.
Partición #5: contiene un crypto_LUKS en la firma.

¿Desea eliminar la firma? [S]í/[N]o: N

Orden (m para obtener ayuda): w

En la secuencia no borro la partición 5, ya que la había borrado antes en el history de arriba, que fue cuando cree la partición 2 con el inicio mal y luego la 5 no dejo crearla.

Aquí borramos la partición ->

d para borrar 

2 para el número de partición

n crear nueva partición

e para extendida

Ahora sí, con los comandos del inicio del post, redimensionamos la partición y extendemos el volumen. Todo funciona bien y el fdisk final nos muestra las particiones corregidas:

Disposit.  Inicio Comienzo     Final  Sectores Tamaño Id Tipo
/dev/sda1  *          2048   1980415   1978368   966M 83 Linux
/dev/sda2          1980416 204799999 202819584  96,7G  5 Extendida
/dev/sda5          1982464 204799999 202817536  96,7G 83 Linux

El cambio se ve claramente en /dev/sda2: antes iniciaba en 1982462 y ahora en 1980416. La lógica (/dev/sda5) mantiene su sector de inicio original, pero el final de ambas se extiende hasta el límite del nuevo espacio asignado. Pasamos de 20 GB a 100 GB.

Sí, acojona un poco borrar particiones en caliente, pero es un mal necesario cuando la hemos liado previamente. Borrar la tabla de particiones no borra los datos; los bits seguirán ahí. Solo hay que asegurarse de que la partición que contiene el cifrado empiece exactamente en el mismo sector que antes.

En fin, parted es muy amigable, toma decisiones por nosotros y aveces pasan estas cosas.