Skip to content

Instantly share code, notes, and snippets.

@mgarciaisaia
Created September 15, 2016 19:23
Show Gist options
  • Save mgarciaisaia/147c02ea412d115b43b328e872bb3c57 to your computer and use it in GitHub Desktop.
Save mgarciaisaia/147c02ea412d115b43b328e872bb3c57 to your computer and use it in GitHub Desktop.
Siguiendo la conversación que arrancó en https://github.com/sisoputnfrba/foro/issues/460

Me quedé pensando en lo que te decía de los límites de los FS, y quise ver si ext4 (el FS que usa la VM que les damos) tenía algún límite de entradas de directorios.

Armé un script de Bash bastante simple:

#!/bin/bash 
COUNTER=0
while [  $? -eq 0 ]; do
  let COUNTER=COUNTER+1
  mkdir "dir${COUNTER}"
done

Declara una variable COUNTER inicializada en 0, y, mientras que el último comando haya ejecutado bien ($? es una variable que guarda el código de salida del último comando - el valor del return de la función main del programa, digamos), incrementa esa variable COUNTER y crea un directorio (mkdir) llamado dirN, donde N es el valor del contador.

Lo puse a correr en un directorio de ejemplo y... corrió. Corrió un rato largo.

Esperaba que al llegar a 64k directorios empezara a fallar - pero no. Desde otra consola hacía ls -l | wl -l para obtener la cantidad de directorios que se habían creado hasta el momento, y eventualmente me pasó que el comando ese tardaba minutos en correr, porque el ls tardaba una bocha.

Eventualmente me aburrí y maté al script. Listando el directorio que contiene al mío, veo que la entrada de directorio pesa:

$ ls -l
drwxrwxr-x  1 utnso utnso 28127232 sep 15 16:01 ejemplo/

Así es: 27MB.

27MB de entradas de archivos en el directorio.

En general, los directorios pesan 4096 (un bloque), porque con eso les sobra para listar todos los archivos que contienen. En mi máquina "física", que vengo usando todos los días desde hace unos 2 o 3 años, mi directorio Downloads (donde se guarda todo lo que bajo de Internet) pesa 78710 bytes para guardar 2316 archivos. Está bien - es otro filesystem (es HFS+, el FS de MacOS X) -, pero tiene poco que ver con 27MB eso.

Intenté listar todo ese directorio, contando cuántas entradas había, y tomando el tiempo que tardaba en hacerlo:

$ time ll | wc -l
ls: memoria agotada
0

real	12m31.595s
user	0m0.144s
sys	8m48.868s

¡Ja! Me quedé sin memoria antes de poder contar todos. Cierro eclipse y atom, y pruebo de nuevo con el formato menos largo de ls:

$ time ls -1 | wc -l
971182

real	0m8.583s
user	0m6.988s
sys	0m0.096s

Eso fue rápido. Casi un millón de directorios creé - y eso pesa 27MB.

A ver si ahora que cerré eclipse y atom puedo listar en formato largo:

$ time ls -l | wc -l
971183

real	1m28.753s
user	0m9.760s
sys	0m33.796s

It works!

Bueno, eso. Si hay un límite, parece ser estúpidamente grande. Después seguiré jugando - ahora, a trabajar.

@mgarciaisaia
Copy link
Author

Mati del pasado: probablemente te hayas quedado sin inodos libres.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment