df
es un comando que muestra el espacio libre en cada partición montada en el sistema. Por defecto muestra bloques totales, usados y disponibles de cada partición, pero también soporta una opción --inodes
que muestra la cantidad de inodos en lugar de cantidad de bloques.
En mi VM, que está instalada hace un par de años (desde que la publicamos, je), aunque con no demasiado uso, veo lo siguiente:
$ df
S.ficheros blocks de 1K Usados Disponibles Uso% Montado en
/dev/sda1 50959004 4709416 43637980 10% /
none 4 0 4 0% /sys/fs/cgroup
udev 243936 4 243932 1% /dev
tmpfs 50720 908 49812 2% /run
none 5120 0 5120 0% /run/lock
none 253596 50640 202956 20% /run/shm
none 102400 32 102368 1% /run/user
$ df --inodes
S.ficheros Nodos-i NUsados NLibres NUso% Montado en
/dev/sda1 3244032 213480 3030552 7% /
none 63399 2 63397 1% /sys/fs/cgroup
udev 60984 457 60527 1% /dev
tmpfs 63399 417 62982 1% /run
none 63399 3 63396 1% /run/lock
none 63399 249 63150 1% /run/shm
none 63399 26 63373 1% /run/user
Básicamente, en mi FS raíz (/dev/sda1
, el montado en /
) tengo 213.480 inodos usados (aka, "213 mil archivos").
Hoy en clase Adro nombró la utilidad de los punteros directos, que hacen que, teniendo 12 punteros directos a bloques de 4kb, los archivos de menos de 48K puedan grabarse sin indirecciones.
Al entender que hablábamos de 48kb me imaginé a algunos de ustedes, jóvenes millenials, pensando que deben mandarse emojis más pesados que eso cuando chatean cons sus clientes de chat de jovencitos (?). No, en serio - más allá del chiste, en 2016 suena un poco irrisorio hablar de 48kb como un tamaño "considerable".
Así que, con alguna conjetura en la cabeza, quise tener una aproximación de qué cantidad de archivos de una instalación de Linux tendrán más de 48k, y cuántos menos.
En mi VM, estos son los números:
$ sudo find / -size -48k 2>/dev/null | grep -v /proc/ | wc -l
227588
$ sudo find / -size +48k 2>/dev/null | grep -v /proc/ | wc -l
7638
La suma da 230.000 archivos, y dije que tenía 213.000 inodos. La diferencia está, en parte, porque el find
es sobre todo el sistema de archivos (contando todos los FS extra que tenga montados), mientras que el df
es sólo sobre la partición /dev/sda1
(el FS raíz), y en parte por los hardlinks que puedan existir (muchas rutas para un mismo inodo). Pero no están tan lejos, tampoco, como para descartar el experimento: 200.000 contra 10.000, exagerando los datos a favor de los archivos grandes.
Es decir, tengo 20 veces más archivos direccionados sólo con los punteros directos que los que usan indirecciones (los números "posta" de find
dan 30x, pero aproximé a 20). Parece que Juan José Extended tuvo una gran idea el día que diseñó los inodos.
Ahora, volviendo a los millenials, ¿qué son esos archivos de menos de 48k? ¿Qué guardan en un disco, si no son fotos y MP3?
Bueno... ¡Archivos de configuración! En Linux, la mayoría de los programas se configuran mediante archivos. Muchos archivos, porque en general hay un archivo de configuración global al sistema (en el que los admins ponen defaults), más un archivo de configuración por cada usuario (para poder tunear cada uno sus opciones sin molestar a los demás).
Además, si somos desarrolladores - ¡lo somos! -, los archivos fuente suelen pesar mucho menos que 48k (y, si los tuyos no lo hacen, te invito a que los pongas a dieta). Y usamos git, que por cada versión de cada archivo en cada commit guarda un archivo con su contenido comprimido.
Y así con mil cosas más. Si te intriga mucho, corré ese comando en la VM, pero reemplazá el wc -l
del final por un less
, para poder ver la lista de archivos. Y fijate qué onda - ¡y contame!
Por último, y sólo para comparar, corrí los mismos comandos en la compu que uso todos los días tanto para trabajar como para cualquier otra cosa desde hace aproximadamente 3 años. Dejé el 48k sólo para tener alguna mínima noción, aunque el asunto se pone menos representativo, ya que es otro sistema operativo (MacOS X), y que no tengo en claro cómo está diseñado su FS - no sería raro que, por decir algo, el FS pueda tener buena performance con archivos más grandes, y por eso todo el sistema tienda a usar archivos más grandes que 48k. Pero como no perdía mucho más que un ratito de CPU hacer la prueba, ahí fue:
$ sudo find / -size -48k 2>/dev/null | wc -l
3683340
$ sudo find / -size +48k 2>/dev/null | wc -l
163493
Si bien tengo muchísimos archivos más (¿ya dije que son 3 años de usarla mucho a diario?), la proporción sigue dando alta (22.5x, más o menos), aunque bajó respecto a la proporción que dieron los find
en Linux (era 29.5, aprox).
Nada, jugando un poco :)
👏 👏 👏 👏 👏 👏