¿Cómo cambio el tamaño de una partición ext4 más allá del límite de 16 TB?

26

Al intentar cambiar el tamaño y la antigua partición ext4 que se creó sin el indicador de 64 bits, resize2fs 1.42 fallará si el nuevo tamaño es o excede 16TiB.

$ resize2fs -p /dev/mapper/target-device
resize2fs: New size too large to be expressed in 32 bits

No quiero copiar los archivos a un medio externo. Tampoco quiero arriesgarme a perder datos. ¿Cómo puedo cambiar el tamaño del volumen de forma segura?

ansioso
fuente

Respuestas:

46

Está intentando cambiar el tamaño de un sistema de archivos que se creó antes de que la -O 64bitopción se convirtiera en predeterminada. Es posible actualizar su sistema de archivos ext a direcciones de 64 bits, lo que le permite abarcar volúmenes significativamente mayores (1024 PiB en lugar de 16 TiB).

Suponiendo que se llama a su dispositivo de destino /dev/mapper/target-device, esto es lo que debe hacer:

Prerrequisitos

  1. Este tamaño de volumen debe estar respaldado por RAID. Errores de disco regulares serán causar daño de otra manera.
  2. Aún así, RAID no es una copia de seguridad . También debe tener sus objetos de valor almacenados en otro lugar.
  3. Primero cambie el tamaño y verifique todos los volúmenes circundantes (tablas de partición, cifrado, lvm).
  4. Después de cambiar la configuración RAID de hardware, Linux puede o no reconocer inmediatamente el nuevo tamaño máximo. Verifique $ cat /proc/partitionsy reinicie si es necesario.

Use un kernel estable reciente y e2fsprogs

  1. Asegúrese (marque uname -r) que está ejecutando un núcleo que puede manejar adecuadamente los sistemas de archivos ext4 de 64 bits; desea usar un 4.4.xnúcleo o posterior (predeterminado Ubuntu 16 y superior).
  2. Adquiera e2fsprogs de al menos la versión 1.43

    • Ubuntu 16.04(2016-04-21) fue lanzado con e2fsprogs 1.42.12(2014-08-25)
    • e2fsprogs 1.43 (2016-05-17) es la primera versión capaz de actualizar el tamaño de la dirección extfs.
    • Ubuntu 18.04(2018-04-26) se envía con e2fsprogs 1.44.x(¡bueno!)

Si está encendido 16.04y no puede actualizar a una versión más reciente de Ubuntu, deberá habilitar el soporte del paquete fuente e instalar una versión más nueva manualmente:

$ resize2fs
# if this  prints version 1.43 or above, continue to step 1
$ sudo apt update
$ sudo apt install git
$ sudo apt build-dep e2fsprogs
$ cd $(mktemp -d)
$ git clone -b v1.44.2 https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git e2fsprogs && cd e2fsprogs
$ ./configure
$ make
$ cd resize
$ ./resize2fs
# this should print 1.43 or higher
# if this prints any lower version, panic
# use `./resize2fs` instead of `resize2fs` for the rest of the steps

Redimensionar

Paso 1: desmonte correctamente el sistema de archivos

$ sudo umount /dev/mapper/target-device

Paso 2: compruebe el sistema de archivos en busca de errores

$ sudo e2fsck -fn /dev/mapper/target-device

Paso 3: habilite el soporte de 64 bits en el sistema de archivos

Consulte man tune2fsy man resize2fspuede cambiar algunos indicadores del sistema de archivos.

$ sudo resize2fs -b /dev/mapper/target-device

En un HDD RAID típico, esto lleva 4 minutos de alta carga de E / S y CPU.

Paso 4: cambie el tamaño del sistema de archivos

$ sudo resize2fs -p /dev/mapper/target-device

Si no pasa un tamaño en la línea de comando, resize2fs asume "crecer a todo el espacio disponible", esto es exactamente lo que desea. La -pbandera habilitó las barras de progreso, pero solo se muestran después de algunos pasos iniciales.

En un HDD RAID típico, esto lleva 4 minutos de alta carga de E / S y CPU.

Verificar de nuevo

Verifique nuevamente el sistema de archivos

$ sudo e2fsck -fn /dev/mapper/target-device

e2fsck de versiones más recientes puede sugerir que se corrijan las marcas de tiempo o los árboles de extensión que las versiones anteriores manejan mal. Esto no es una indicación de ningún problema grave y puede optar por solucionarlo ahora o más tarde.

Si se producen errores, no entre en pánico y no intente escribir en el volumen; Consulte a alguien con un amplio conocimiento del sistema de archivos, ya que otras operaciones probablemente destruirían los datos.

Si no se producen errores, vuelva a montar el dispositivo:

$ sudo mount /dev/mapper/target-device

¡Éxito!

No necesitará ninguna versión de e2fsprogs que no sea Ubuntu para el funcionamiento continuo del sistema de archivos actualizado; el núcleo las admite desde hace bastante tiempo. Solo fue necesario iniciar la actualización.


Como referencia, hay un mensaje de error similar que imprimirá mke2fs si se le pide que cree un dispositivo enorme con opciones inapropiadas:

$ mke2fs -O ^64bit /dev/huge
mke2fs: Size of device (0x123456789 blocks) is too big to be expressed in 32 bits using a blocksize of 4096.
ansioso
fuente
1
Esto es correcto. Me gustaría agregar que Redhat (por lo tanto, RHEL, Centos, etc.) solía preferir XFS sobre Ext4 en su instalador al particionar un sistema de archivos de más de 16 TB, y ahora solo prefiere XFS directamente como el sistema de archivos predeterminado.
Diablo-D3
Sí, la mayoría de los núcleos más antiguos aún importantes en RedHat World aún no contienen soporte estable para 64 bits ext4. Afaik Ubuntu va con lo que dicen muchos gurús de Linux, ext4 debe ser reemplazado por btrfs, aunque ext4 está cerca de btrfs en características ahora, creo que btrfs es más elegante en diseño y quizás incluso menos propenso a errores.
ans
2
btrfs no está listo para la producción, y puede que nunca esté listo para la producción, ya que Oracle ha dejado el desarrollo en segundo plano. Mi opinión personal es que si necesita ese nivel de complejidad del sistema de archivos, use una pequeña raíz XFS de 8GB combinada con el uso de ZFS para sus necesidades reales de almacenamiento de datos.
Diablo-D3
0

Me sucedió recientemente, con un Ubuntu 18.04 que se actualizó después de instalarse inicialmente con un Ubuntu 16.04 ... La matriz de almacenamiento (/ dev / sdb) se particionó inicialmente en dos particiones de 14 TB, y eso es por querer agrandar la primera partición a 28 TB que ocurrió el problema.

No necesitaba descargar una nueva versión de resize2fs porque era muy reciente.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

El único problema era convertir la partición 1 de 64 bits que había sido formateada en 32 bits ... En lugar de invitar al lector a consultar la documentación de tune2fs (como sugiere Anx), ¡propongo un ejemplo real!

# tune2fs -O 64bit /dev/sdb1
tune2fs 1.44.1 (24-Mar-2018)
Please run "resize2fs -b /dev/sdb1" to enable 64-bit mode.

# resize2fs -b /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Convert the file system to 64 bits.
The file system on /dev/sdb1 now has a size of 3662109119 blocks (4k).

¡Finalmente, ampliamos la partición del disco!

# resize2fs /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Resizing the file system on /dev/sdb1 to 7324303099 (4k) blocks.
The file system on / dev / sdb1 now has a size of 7324303099 blocks (4k).
MaxiReglisse
fuente