inodes, comparación de espacio consumido para muchos archivos pequeños (xfs, btrfs, ext4)

9

Tengo una partición ext4 (LVM en una VM) con una gran cantidad de archivos pequeños , que tengo que extender cada 3-4 meses.

En cuanto a la cantidad de espacio utilizado por los inodes.

¿Uno de los sistemas de archivos xfs, btrfs o ext4 usa menos espacio?

En otras palabras, ¿cambiar a btrfs o xfs hará que una partición se llene con inodes más lentamente que con ext4?

abadys
fuente
Si usa ext4 y espera almacenar tipos pequeños en su mayoría, debe crearlo mkfs.ext4 -t newspara 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, haga df -i(o find | wc -l) para encontrar cuál logró almacenar la mayoría de sus archivos, de esa manera lo sabrá con seguridad.
Matija Nalis
1
@MatijaNalis, -Tcon una T mayúscula. El archivo de configuración también tiene otras opciones útiles
ilkkachu
@ilkkachu correcto, gracias. Debería sermkfs.ext4 -T news
Matija Nalis
¿Qué tan pequeños son los archivos?
drudru

Respuestas:

6

Para comenzar con su primera pregunta: sí, uno de estos sistemas de archivos usa menos espacio. Incluso sin más detalles, sería poco probable que todos usen exactamente la misma cantidad de espacio, dado que tienen implementaciones diferentes. Entonces uno está obligado a usar menos espacio que todos los demás.

Btrfs tiene una asignación dinámica de inodo, por lo que no se puede llenar como lo hace con las tablas de inodo para ext4 (cuyo tamaño se establece en el tiempo de creación del sistema de archivos ext4).

XFS es dinámico de manera similar, pero tiene un límite (porcentaje del sistema de archivos que se puede usar para inodes), por lo tanto, si llena su asignación de inodo depende del porcentaje establecido, así como del recuento de archivos / tamaños de archivo

Anthon
fuente
¡Gracias por la rápida respuesta! Parece que XFS es la opción más segura por ahora. ¿Se puede cambiar dinámicamente este porcentaje de uso de inodo? y si no, ¿hay alguna manera de predecir cuánto se necesitará?
abadys
1
Usted debe ser capaz de hacer eso conxfs_growfs -m XX
Anthon
3

Sí, y tenga en cuenta que todo depende de sus necesidades:

Btrfs (pronunciado como Butter FS, Better FS o B-Tree FS)

Teniendo en cuenta que el btrfs podrá abarcar varios discos duros, es muy bueno que pueda soportar 16 veces más espacio en disco que el ext4 . El tamaño máximo de partición del sistema de archivos btrfs es de 16 exbibytes, así como el tamaño máximo de archivo es de 16 exbibytes también.

Número máximo de archivos: 2 ** 64

XFS

El XFS es un sistema de archivos de diario de 64 bits de alto rendimiento. XFS admite un tamaño máximo del sistema de archivos de 8 exbibytes para el sistema de archivos de 64 bits. Ahora, el RHEL 7.0 usa XFS como el sistema de archivos predeterminado, incluido el soporte para usar XFS para la /bootpartición.

Número máximo de archivos: 2 ** 64

EXT4

El ext4 es bien conocido por traer las mejoras de velocidad sobre ext3. El ext4 tiene algunos límites. El tamaño máximo de archivo es de 16 tebibytes (que es aproximadamente 17,6 terabytes). El volumen / partición más grande que puede tener con ext4 es 1 exbibyte. Al igual que en los sistemas de archivos más modernos, es un sistema de archivo de registro en diario que significa que mantendrá un registro de dónde se ubican principalmente los archivos en el disco y de cualquier otro cambio que ocurra en el disco. Independientemente de todas sus características, no admite la compresión transparente, el cifrado transparente o la deduplicación de datos. Las instantáneas son compatibles técnicamente, pero tal característica es experimental en el mejor de los casos.

Número máximo de archivos: 4 mil millones

XFS vs Btrfs

XFS no tiene ningún RAID, mientras que Btrfs RAID aún no es completamente estable y está en sus inicios. XFS es cada vez más maduro que Btrfs , pero no podemos negar que Btrfs es poderoso y un buen FileSystem en crecimiento.

Por ahora, XFS es mi elección, especialmente porque es el FS predeterminado en RHEL 7, a menos que realmente necesite Btrfs.

FarazX
fuente
1
Esto tiene buena información general sobre los sistemas de archivos en general, pero no veo el problema específico de los archivos pequeños que se mencionan aquí.
ilkkachu
@ilkkachu "gran cantidad de archivos pequeños" ¿qué significa? Se trata de inodes ya que todos los archivos se crean a través de inodes y el inodo es una estructura de datos utilizada para representar un objeto del sistema de archivos. Así que creo que he explicado todas las necesidades del autor, además he mencionado sobre el número máximo de archivos.
FarazX
2

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 -ideberí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 4096un 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.ext4Tambié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 smallequivalente 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.

ilkkachu
fuente