Supongo que el problema que tiene no es la partición que se llena con inodos en sí, sino que se está quedando sin el número de inodos en el sistema de archivos. ext4 reserva los inodos estáticamente cuando se crea el sistema de archivos, pero puede establecer el número con opciones paramkfs.ext4
:
-i bytes por inodo
Especifique la relación bytes / inodo. mke2fs crea un inodo por cada byte de bytes por inodo en el disco. Cuanto mayor sea la relación bytes por inodo, se crearán menos inodos.
-N número de inodes
Reemplaza el cálculo predeterminado del número de inodes que debe reservarse para el sistema de archivos (que se basa en el número de bloques y la relación bytes por inodo). Esto permite al usuario especificar el número de inodos deseados directamente.
El manual establece explícitamente que los bytes por relación de inodo no se pueden cambiar después de crear el FS, pero el número total se escalará para cumplir con la relación si se cambia el tamaño del FS.
También puede establecer el tamaño de cada inodo. El valor predeterminado es 256 bytes en "la mayoría" de los sistemas de archivos, pero puede reducirse a 128 (el valor predeterminado para los sistemas de archivos "pequeños"). El espacio adicional se usa para almacenar atributos extendidos (por ejemplo, etiquetas SELinux), por lo que si no los necesita, debería ser seguro reducir el tamaño al mínimo.
-I inode-size
Especifica el tamaño de cada inodo en bytes. El valor del tamaño del inodo debe ser una potencia de 2 mayor o igual a 128.
df -i
debería mostrar el número de inodes asignados y utilizados. Con las opciones predeterminadas, una partición de 30 GB que vi tenía un inodo por cada 16 kB, pero si sus archivos son muy pequeños, podría establecer, por ejemplo, -i 4096
un inodo para cada bloque de datos en el sistema.
Si sus archivos son más pequeños que 4096, es posible que también desee reducir el tamaño del bloque del sistema de archivos, ya que todos los archivos normales requerirán un bloque de datos completo de todos modos. (Es decir, en ext4. No sé si otros sistemas de archivos actuales empaquetan archivos pequeños).
-b block-size
Especifica el tamaño de los bloques en bytes. Los valores de tamaño de bloque válidos son 1024, 2048 y 4096 bytes por bloque. Si se omite, el tamaño del bloque está determinado heurísticamente por el tamaño del sistema de archivos y el uso esperado del sistema de archivos (consulte la opción -T).
mkfs.ext4
También tiene la -T <type>
opción que se puede utilizar como una abreviatura para algunos o todos estos. La configuración está en /etc/mke2fs.conf
, que en mi Debian hace, por ejemplo, mkfs.ext4 -T small
equivalente a
mkfs.ext4 -b 1024 -I 128 -i 4096
Lo que podría no ser un mal conjunto de opciones para muchos archivos pequeños (y no xattrs).
Si sus archivos son incluso más pequeños que un kB, un sistema de archivos puede no ser la mejor manera de guardar los datos, pero tal vez debería considerarse algo como una base de datos o un sistema específico de la aplicación.
mkfs.ext4 -t news
para obtener mejores resultados. Además, sugeriría probar: crear (en lvm, o dispositivo de bucle invertido, por ejemplo) cada uno de los elementos de archivo a su vez, y comenzar a copiar sus archivos reales hasta que se llene. Cuando se llene, hagadf -i
(ofind | wc -l
) para encontrar cuál logró almacenar la mayoría de sus archivos, de esa manera lo sabrá con seguridad.