¿Cómo puedo reducir una partición LUKS? ¿Qué hace `cryptsetup resize`?

14

Estoy en proceso de cambiar el tamaño de una partición cifrada LUKS que contiene un único sistema de archivos ext4 (sin LVM o algo así). Las preguntas frecuentes de cryptsetup recomiendan eliminar la partición anterior y volver a crearla, pero eso suena como perder mucho tiempo. Por lo tanto, quiero proceder manualmente, redimensionando cuidadosamente la partición.

Hasta ahora, creo que tengo que hacer:

  1. Cree una copia de seguridad (encriptada) del sistema de archivos. ¡Importante! No será el primero en perder sus datos mientras realiza las siguientes tareas.
  2. Desmonte el sistema de archivos ext4 existente (por ejemplo, iniciando en un Live CD). Si arranca desde un Live CD, monte la partición encriptada usandocryptsetup luksOpen /dev/sdXY ExistingExt4
  3. Cambiar el tamaño del sistema de archivos ext4 existente .
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. Cierre / "desmonte" la partición LUKS usando cryptsetup luksClose ExistingExt4
  6. Reduce el tamaño de la partición.

¿Son correctos los pasos anteriores?

En el paso 4, ¿para qué debo elegir $SECTORS? ¿Es este paso incluso necesario? La cryptsetuppágina del manual no es realmente descriptiva sobre la resizeopción:

resize <name>
    resizes an active mapping <name>.
    If --size (in sectors) is not specified, the size of the underlying
    block device is used.

Finalmente, si reduzco la partición ext4 en 15 GiB, ¿puedo asumir con seguridad que se pueden eliminar 15 GiB de la partición existente parted? En caso afirmativo, ¿cómo hacerlo? Mi disco tiene particiones GPT, si eso importa.

Lekensteyn
fuente
1
Siempre me he preguntado sobre la opción de cambio de tamaño en cryptsetup también. Incluso las preguntas frecuentes de cryptsetup dicen: "2.15 ¿Puedo cambiar el tamaño de una partición dm-crypt o LUKS? Sí, puede hacerlo, ya que ni dm-crypt ni LUKS almacenan el tamaño de la partición". Entonces, ¿por qué tiene una opción de cambio de tamaño si no tiene nada que ver con el tamaño de la partición ...
Dago

Respuestas:

15

Después de realizar una copia de seguridad (paso 1) y desmontar (entre 2 y 3), ejecute fsckpara asegurarse de que el sistema de archivos esté en buen estado:

e2fsck -f /dev/mapper/ExistingExt4

Aparte de eso, los pasos están bien.

¿Qué debo elegir para $ SECTORS? ¿Es este paso incluso necesario?

Este paso es necesario, de lo contrario la partición aún se mostraría en el lado anterior. Esto se confirma con Nautilus, incluso después de cambiar el tamaño resize2fs, la partición LUKS se mostró como el tamaño anterior. Después de correr cryptsetup resize, se muestra el número correcto. Este paso no es necesario. Solo afecta el estado del tamaño actual como se muestra en el navegador de archivos. Después de cambiar el tamaño y cerrar / abrir la partición nuevamente, el número se restaura. Entonces, al cerrar la partición LUKS como se muestra más adelante, esto quedará obsoleto.

$SECTORSse puede determinar observando la salida de cryptsetup status ExistingExt4:

    / dev / mapper / ExistingExt4 está activo.
      tipo: LUKS1
      cifrado: aes-cbc-essiv: sha256
      tamaño de la llave: 256 bits
      dispositivo: / dev / sda2
      compensación: 2056 sectores
      tamaño:     156049348 sectores
      modo: lectura / escritura

Un sector siempre tiene 512 bytes (mencionado en cryptsetupla página del manual). Por lo tanto, para restar 15 GiB, use un tamaño de sector de 156049348 - 15 * 1024 * 1024 * 2 = 124592068:

cryptsetup resize ExistingExt4 -b 124592068

En cuanto a cambiar el tamaño de la partición, partedfunciona bien con particiones GPT. El resizecomando no funciona, sin embargo, como una solución (o solución), retire la información de la partición y crear una nueva partición como inspirado por http://ubuntuforums.org/showthread.php?p=8721017#post8721017 :

# cryptsetup luksClose ExistingExt4 
# parted / dev / sda2
GNU Parted 2.3
Usando / dev / sda
¡Bienvenido a GNU Parted! Escriba 'ayuda' para ver una lista de comandos.
(dividida) unidad s 
(dividida) p
Modelo: ATA INTEL SSDSA2CW08 (scsi)
Disco / dev / sda: 156301488s
Tamaño del sector (lógico / físico): 512B / 512B
Tabla de particiones: gpt

Número Inicio Fin Tamaño Sistema de archivos Nombre Banderas
 1 34s 2082s 2049s Arranque bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s 156301438s 156051404s Todo

Como 15 GiB tienen que afeitarse, el nuevo final se convierte 156301438 - 15 * 1024 * 1024 * 2 = 124844158. Como quiero cambiar la partición 2, primero tengo que eliminarla y luego volver a crearla con la etiqueta "Todo" (esto se puede cambiar si lo desea). Nota : este disco tiene un diseño GPT. Para MBR, debe reemplazarlo Everythingpor primaryo extended(sin probar, no se ha probado el cambio de tamaño de una partición en MBR y no se recomienda porque no se ha probado).

ADVERTENCIA : los siguientes comandos han destruido datos . No lo copie sin comprender lo que está sucediendo. Las dimensiones del sector deben ser cambiados, de lo contrario SE destruir su partición (s). No soy de ninguna manera responsable de su estupidez, COPIA DE SEGURIDAD COPIA DE SEGURIDAD COPIA DE SEGURIDAD de sus datos a un segundo medio de almacenamiento antes de arriesgar sus datos.

(dividido) rm 2 
(dividido) mkpart Everything 250035s 124844158s
Advertencia: la partición resultante no está alineada correctamente para un mejor rendimiento.
¿Ignorar / Cancelar? ignorar 
(dividido) p
Modelo: ATA INTEL SSDSA2CW08 (scsi)
Disco / dev / sda: 156301488s
Tamaño del sector (lógico / físico): 512B / 512B
Tabla de partición: gpt

Número Inicio Fin Tamaño Sistema de archivos Nombre Banderas
 1 34s 2082s 2049s Arranque bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s   124844158s 124594124s                Todo
(separado) salir

En el partedejemplo anterior , mis sectores no están alineados, lo cual es un error de una instalación anterior, no le preste demasiada atención.

¡Eso es! Puede usar cryptsetup statusy file -Ls /dev/...para verificar que todo esté bien y luego reiniciar.

Lekensteyn
fuente
1
Recomiendo encarecidamente no utilizar esta solución sin una copia de seguridad completa, ya que es muy probable que salga mal. Pero si tiene una copia de seguridad completa, crear una nueva partición es mucho más fácil.
Déjame adivinar, ¿un humano hizo esto? De todos modos, ahora he enfatizado claramente que se debe realizar una copia de seguridad antes de jugar con esto. Pensé que era obvio que se debe realizar una copia de seguridad antes de hacer esto manualmente ... incluso entonces, ¿cómo podría alguien estropear esto dadas las instrucciones claras y las formas de verificar?
Lekensteyn
¿También tiene una fuente para el fracaso que mencionó? Todos pueden reclamar que la información proporcionada es incorrecta, pero me gustaría verificarla. Puede ser útil para otros usuarios en el futuro ...
Lekensteyn
Arno estaba hablando de esta publicación en la lista de correo: saout.de/pipermail/dm-crypt/2013-September/003521.html
Philipp Wendler
En lugar de rm 2y mkpart [part-type] [start] [end], también se puede usar resizepart 2 [end]para cambiar el tamaño de una partición sin cambiar el nombre o iniciar el desplazamiento.
Rob W