ext4 Error del sistema de archivos Ubuntu 18.04 "La estructura necesita limpieza"

ext4 Error del sistema de archivos Ubuntu 18.04 "La estructura necesita limpieza"

Quiero tener un disco de 24TB preparado para poder contener una gran cantidad de directorios y archivos en un solo directorio (Por favor, no me digan que cambie esta estrategia, es una estructura utilizada por un software que es una caja negra para nosotros). por lo que no podemos cambiar este enfoque). Como he investigado a fondo, el sistema de archivos ext4 tiene la capacidad de almacenar miles de millones de archivos en un directorio, pero debe prepararse utilizando algunas opciones y parámetros especiales. Esto es lo que he usado según mi investigación:

sudo mke2fs -T news /dev/sdb1
sudo tune2fs -O dir_index /dev/sdb1
sudo tune2fs -O large_dir /dev/sdb1
sudo tune2fs -O dir_nlink /dev/sdb1


sudo mkdir /hdd
sudo gedit /etc/fstab

- add following to the end of the file:
/dev/sdb1    /hdd    ext4    defaults,noatime    0    0

sudo mount /hdd

Para probar la estructura, preparé scripts bash que crean directorios y archivos en un solo directorio. Algo como esto:

for ((i = 1000000; i <= 200000000; i++))
do
  sudo mkdir "/hdd/largedir/$i" -p
  sudo cp "sample-file.jpg" "/hdd/largedir/$i"
  if (( $i % 1000 == 0 ));
  then
    echo "$i created";
  fi;
done

Después de horas de trabajo, cuando revisé el sistema me estaba imprimiendo este error:

Structure needs cleaning

En mis pruebas, imprime este error no para todos los archivos y directorios. Por ejemplo, puedo crear un directorio llamado "10000" pero no puedo crear un directorio llamado "1000". También cambié el algoritmo hash usando este comando:

sudo tune2fs -E "hash_alg=tea" /dev/sdb1

y reinicié y volví a montar el sistema, pero el problema aún existe. ¿Alguien sabe cuál es el problema y por qué se ha producido esta situación en el sistema de archivos? ¿El sistema de archivos ext4 no es lo suficientemente fuerte para tener una estructura tan grande? He leído en algunas páginas sobre el uso de xfs en lugar de ext4 para una gran cantidad de archivos. ¿Es realmente cierto?

Verá que durante la operación del archivo, no se produjo ninguna pérdida de energía ni fallas en el sistema. No esperaba tal comportamiento cuando todo estaba bien.

-- EDITADO para más información: --

La información de inodo para el disco es la siguiente:

Filesystem        Inodes     IUsed     IFree IUse% Mounted on
/dev/sdb1      421216256 183643803 237572453   44% /hdd

La información del espacio es la siguiente:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        26T  3.1T   21T  13% /hdd

Revisé el sistema de archivos y es ext4 (como se muestra en varias herramientas). Por ejemplo, gparted muestra el sistema de archivos de la partición como ext4. En cuanto a las funciones, ninguna de las funciones anteriores estaba habilitada de forma predeterminada en mi ubuntu 18.04 LTS. Llegué a varios errores durante mis pruebas anteriores y finalmente llegué a este.

Respuesta1

Con el comando sudo mke2fs -T news /dev/sdb1no necesariamente estás creando un sistema de archivos ext4, sino unext2sistema de archivos.

Suponiendo que su Ubuntu 18.04 tiene esencialmente el mismo /etc/mke2fs.confarchivo que mi Debian 10, entonces dir_indexya está habilitado como el conjunto de funciones base actual para todos los sistemas de archivos ext2/3/4 creados con moderno mke2fs. Y dir_nlinkestá habilitado de forma predeterminada para elext4tipo de sistema de archivos.

La mke2fs.conf(5)página de manual dice: "si tanto el usuario como el mke2fs.confarchivo no especifican un tipo de sistema de archivos predeterminado, mke2fsutilizarán un tipo de sistema de archivos predeterminado deext3si se solicitó un diario a través de una opción de línea de comando, oext2si no."

Según el /etc/mke2fs.confarchivo, la -T newsopción solo especifica la inode_ratio = 4096opción, nada más. Entonces, a menos que use el mkfs.ext4formulario en lugar del simple mke2fs, es posible que obtenga unext2Sistema de archivos diseñado para archivos con tamaños promedio de 4 kB o menos.

Debian no tiene lo fs_type =especificado en la [defaults]sección de mke2fs.conf, y no incluyes la -jopción para tu mke2fscomando, por lo que si el de Ubuntu mke2fs.confes igual al de Debian (como suele ser), es posible que tu comando te haya dado 24 TB.ext2sistema de archivos, que es algo que probablemente nadie haya probado particularmente bien.

La ext4(5)página de manual dice que la 64bitfunción del sistema de archivos se configurará automáticamente según sea necesario, lo que podría explicar por qué las herramientas no informaron ningún error. También dice dir_indexque los sistemas de archivos ext2 ignoran la función.

Según experiencias pasadas con sistemas de archivos de varios terabytes ext3, habría esperado tiempos enormes de creación y verificación de sistemas de archivos. Para su caso de uso, la presencia o ausencia de la dir_indexfunción puede mejorar o perjudicar el rendimiento de la aplicación.

¿Podría editar el tune2fs -l /dev/sdb1resultado real de su pregunta original para eliminar la necesidad de que adivinemos qué pudo haber sucedido o no?

"La estructura necesita limpieza" parece ser el texto predeterminado correspondiente al EUCLEANcódigo de error del kernel, lo que indica que el sistema de archivos está dañado y es necesario verificarlo. En un sistema de archivos de este tamaño, esto requerirá bastante tiempo y RAM. Y, por supuesto, es necesario desmontar el sistema de archivos mientras se verifica.

Respuesta2

En realidad, después de muchas pruebas, llegué al punto en que parece que ext4 no tiene la capacidad de hacer tal cosa (contener miles de millones de archivos en un directorio). Y siguiendo mis investigaciones sobre cómo hacer esto en Linux, los resultados (de hecho, también mis pruebas prácticas) muestran que para tal escenario, debería usar XFS en lugar de ext4, que realmente está diseñado para realizar esta tarea.

información relacionada