6 votos

Crecimiento monótono de conteo de tamaño/bloque de directorio de Linux

En Linux, (tal vez como una función del tamaño de bloque del sistema de ficheros), cuando me cree un directorio y stat , devuelve un tamaño de 4096. Puedo crear archivos en este directorio, hasta un punto, sin aumento de la percepción del tamaño de un directorio (como se informa por stat).

En algún punto, ya que el directorio se llena con muchos archivos, el tamaño del directorio globos (no estoy hablando de el contenido del directorio, estoy hablando acerca de los bloques consumido para representar el directorio de sí mismo). Si se eliminan los archivos, el directorio de tamaño sigue siendo el mismo.

Aquí está un ejemplo rápido:

[root@uxlabtest:/]$ mkdir test
[root@uxlabtest:/]$ stat test
  File: `test'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd00h/64768d    Inode: 1396685     Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:04.000000000 -0400
Change: 2011-07-26 14:06:04.000000000 -0400

A continuación, toque un montón de archivos:

[root@uxlabtest:/]$ for i in `seq 1 10000`; do touch /test/$i; done
[root@uxlabtest:/]$ stat test
  File: `test'
  Size: 155648          Blocks: 312        IO Block: 4096   directory
Device: fd00h/64768d    Inode: 1396685     Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:56.000000000 -0400
Change: 2011-07-26 14:06:56.000000000 -0400

A continuación, elimine los archivos:

[root@uxlabtest:/]$ rm -rf /test/*
[root@uxlabtest:/]$ stat test
  File: `test'
  Size: 155648          Blocks: 312        IO Block: 4096   directory
Device: fd00h/64768d    Inode: 1396685     Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2011-07-26 14:07:11.000000000 -0400
Modify: 2011-07-26 14:07:12.000000000 -0400
Change: 2011-07-26 14:07:12.000000000 -0400

Mis preguntas son:

  • ¿Por qué el tamaño/número de bloque de un directorio de aumentar monótonamente?
  • Esta es una función del sistema de ficheros subyacente o el Linux VFS?
  • Puede que el tamaño del directorio cada vez ser reducido sin eliminar y volver a crear el directorio?
  • Los puntos de bonificación: me apunte en el núcleo de código fuente donde este comportamiento se implementa.

4voto

user48838 Puntos 7140

El bloque de incrementos que usted está viendo es debido a cómo el sistema de archivos se encarga de gestionar el almacenamiento de archivos y archivo relacionado con la gestión de la información. En la situación descrita, que aparecería en incrementos de 4K, por lo que cada "nuevo"/"único" de entrada en el sistema de archivos de reserva de 4K, si el real tamaño de los datos de que se llene todo el 4K. Si los datos relacionados ocupa todo el 4K, luego otro bloque de 4K es reservado y llenar si es necesario almacenar toda relacionados con el flujo de datos/secuencia.

Dependiendo de los "duros" y "blandos" elimina gestionada por el sistema de archivos, la eliminación no puede (generalmente no para "recuperar" la funcionalidad) liberar inmediatamente el bloque(s) que estaba reservado. Algunos sistemas de archivos pueden diferenciar diferentes tipos de "borra" y proporcionar almacenamiento correspondiente bloque de capacidades de gestión.

Cómo de administración de almacenamiento se acercó y aplicado diferentes por los sistemas de archivos, por lo que en los sistemas operativos que admiten varios/modular de los sistemas de archivos, el sistema operativo normalmente sólo se proporcionan "ganchos" para el sistema de archivos para integrarse.

1voto

mailq Puntos 13433

Aquí están las respuestas que son verdaderas para ext2/ext3/ext4. Si son verdad para otros sistemas de archivos depende de su aplicación.

  1. user48838 respondió este correctamente. Más archivos de consumir más datos de metadatos. Se asignan en 4k trozos o en cualquier otro tamaño definido en el momento de la creación del sistema de archivos
  2. Sí es una característica o problema de la real del sistema de archivos
  3. En un sistema de archivos ext3 esto no es posible. Sólo mediante la recreación de la (vacío) directorio
  4. El código fuente es de alrededor de aquí y en los archivos relacionados

Pero tienes suerte. Cuando se vuelve a crear la misma cantidad de archivos ya eliminados, el tamaño del directorio será el mismo. Sólo al agregar más archivos que se va a aumentar.

1voto

MikeyB Puntos 26178

La adición de algunos de senderismo comentario a user48838 buena respuesta:

Todo es un archivo, incluidos los directorios. Para almacenar toda esa información de archivo, necesita espacio.

También sería válida para mostrar, decir, '64B utilizado" para un pequeño directorio y realmente mostrar la cantidad de espacio utilizado, pero estaríamos utilizando múltiples de 4 KB en disco de todos modos, así que fue una decisión de diseño para simplemente mostrar la cantidad de espacio utilizado.

A partir de un FS perspectiva de diseño, ¿para qué molestarse en ir por la molestia de calcular lo que se utiliza? No es necesario. Y, a continuación, usted tendría que mover las entradas para evitar dejar agujeros... ick.

Cuando se elimina suceder y dir tamaño de las gotas de modo que usted podría liberar un bloque, todos los que la administración tendría que suceder antes de que en realidad podría hacerlo. ¿Por qué molestarse en guardar un par de KB? Las probabilidades son que usted tendrá que ampliar más tarde de todos modos.

Deja como ejercicio para el lector: Pensar acerca de por qué su /lost+found directorio se crea vacío pero ocupa 16K (en ext3, al menos).

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: