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.
Llené el FS.
3042411 directorios creados, el directorio pesa 86487040 bytes (83MB).
El error con el que falló fue:
Pero sí hay espacio en disco:
Ese error corresponde al
errno
ENOSPC
.Al principio pensé que había llenado el directorio, nomás, pero no:
Pero sigo teniendo espacio en disco:
No se qué estará pasando...