Un sistema de archivos típicamente se llena porque no quedan bloques disponibles (espacio en disco, efectivamente). Aunque también se puede "llenar" porque, a pesar de haber bloques disponibles, no hay inodos libres. Recordemos que los inodos conforman la estructura de datos que representa a un archivo en disco en los sistemas de archivos Unix. Por supuesto esta estructura de metadatos ocupa su propio espacio en disco, que se "pierde" (o invierte, mejor dicho) al momento de dar formato a un dispositivo o partición.



En el inodo se guarda el tamaño del archivo, usuario y grupo dueños del archivo, el modo de acceso (permisos Unix), las estampillas de tiempo (fecha de acceso/creación/modificación) y la estructura de punteros a los bloques de datos del archivo, entre otra información. Y un detalle importante es que la cantidad de inodos en un sistema de archivos es fija. No es posible mantener una cantidad ilimitada de inodos en un mismo sistema de archivos, y es posible que se ocupen todos.

Esto ocurre típicamente cuando tenemos miles de archivos pequeños, los cuales a pesar de no consumir demasiados bloques (por ser de poco tamaño) llegan a consumir todos los inodos de un filesystem. Cunado se da esta situación, es probable que sistema de archivos en cuestión tenga mucho espacio en disco disponible (en bloques) pero no queden inodos para representar a nuevos archivos (sólo es posible que los archivos actuales crezcan en tamaño, pero no es posible crear nuevos).

No hace falta decir que el no poder crear nuevos archivos en disco es una limitación muy seria, ya que afecta al normal funcionamiento del sistema operativo y las aplicaciones de usuarios.

A pesar de que no es común que un sistema de archivos se quede sin inodos disponibles, veamos entonces cómo es posible determinar el número total de inodos en un sistema de archivos y su ocupación. A tal fin, es posible recurrir a la herramienta df.

Por defecto, df muestra la cantidad total de bloques (de 1 KByte), utilizados y disponibles.

emi@freebsd:~ % df /
Filesystem   1K-blocks     Used   Avail Capacity  Mounted on
/dev/ada0s1a  40614492 33187392 4177944    89%    /

La salida es idéntica tanto en GNU/Linux como FreeBSD:

root@debian:~# df /
Filesystem          1K-blocks    Used Available Use% Mounted on
/dev/mapper/rootfs    2241544 1994732    224040  90% /

Se observa que el sistema de archivos / en el dispositivo /dev/mapper/rootfs posee un total de 2241544 bloques, de los cuales 1994732 están utilizados y 224040 están disponibles, contabilizando un 90% de ocupación o uso de disco.

La opción -h, frecuentemente utilizada, muestra esta misma información pero utilizando unidades amigables (KB, MB, GB) en lugar de cantidad de bloques:

emi@freebsd:~ % df -h /
Filesystem      Size    Used   Avail Capacity  Mounted on
/dev/ada0s1a     39G     32G    4.0G    89%    /

Una vez más, la salida es idéntica en GNU/Linux y FreeBSD:

root@debian:~# df -h /
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/rootfs   2,2G  2,0G  219M  90% /

De esta forma se aprecia más fácilmente que el espacio utilizado en el sistema de archivos es de 2 GBytes y tiene disponible sólo 219 MBytes.

Más allá del uso típico, esta herramienta posee muchas opciones y funcionalidades, incluyendo la capacidad de obtener información acerca de la cantidad y uso de inodos en el sistema de archivos a través de la opción -i:

emi@freebsd:~ % df -i /
Filesystem   1K-blocks     Used   Avail Capacity iused   ifree %iused  Mounted on
/dev/ada0s1a  40614492 33187484 4177852    89%  869141 4427753   16%   /

Aquí iused, ifree e %iused representan la cantidad de inodos utilizados y disponibles, y el porcentaje utilizado respectivamente.

En los sistemas GNU/Linux la salida es diferente, ya que no se incluye el detalle a nivel bloques. Sólo se muestra el uso de inodos, aunque se agrega una columna para la cantidad total de inodos:

root@debian:~# df -i /
Filesystem          Inodes IUsed IFree IUse% Mounted on
/dev/mapper/rootfs  142560 77169 65391   55% /

En esta salida Inodes representa la cantidad total de inodos; IUsed la cantidad de inodos utilizados; IFree la cantidad de inodos libres; %IUse el porcentaje de inodos utilizados.

Notar que este es el caso de la mayoría de los sistemas de archivos, donde el espacio ocupado (90%) es mayor al uso de inodos (55%). Con lo cual es probable que agoten antes los bloques que los inodos. Sin embargo, en ciertos escenarios es probable que se agoten los inodos y sea imposible crear nuevos archivos, aún cuando el espacio disponible en disco (cantidad de bloques libres) sea grande.

Si alguna vez un programa o aplicación termina con error aduciendo que no hay espacio en disco, y al consultar con df o df -h el porcentaje de uso es menor a 100%, esto puede significar que nos hemos quedado sin inodos disponibles. En realidad significa que no es posible crear archivos por no quedar inodos disponibles, más allá de haber bloques disponibles, aunque el error genérico suele ser "no space left on device" (no hay espacio disponible en el dispositivo).

En estos casos la única solución consiste en borrar archivos para liberar inodos. Es posible moverlos a otro filesystem o archivarlos con tar (de esta forma podremos agrupar muchos archivos en un único inodo).

Para mayor información y otras opciones consultar la página de manual de df:

man df


Tal vez pueda interesarte


Compartí este artículo