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:
Informar de los cambios:
partprobe /dev/sdaRedimensionar la partición cifrada:
cryptsetup resize sda5_cryptRedimensionar el Volumen Físico:
pvresize /dev/mapper/sda5_cryptExpandir 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 -1sLuego 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.