¿Qué es el uso del inode y cómo podemos reducirlo?

Los inodes realizan un seguimiento de todos los archivos en un sistema Linux. Con la excepción del nombre y el contenido real del archivo, los inodes guardan todo. Es como una estructura de datos basada en archivos que contiene metadatos sobre todos los archivos del sistema.

Los inodes o “nodos de índice” se introdujeron por primera vez en el sistema operativo Unix en la década de 1970. En los años 90, Linux introdujo el mismo concepto. Aún sigue en uso. En gran medida, todo el sistema operativo depende de inodes para funcionar adecuadamente. Este artículo explicará por qué.

Algunos antecedentes sobre cómo ayudan los inodes

En un sistema Linux, los archivos se almacenan en forma de bloques de un cierto tamaño. Si un archivo es más grande que este tamaño predeterminado, se divide en fragmentos y se almacena en bloques vacíos disponibles en el disco. Si aumenta el número de archivos, esto puede ser confuso. Los inodes ayudan al sistema a organizar los datos.

Aunque los inodes no almacenan el contenido real del archivo, contienen las ubicaciones de los distintos fragmentos de cada archivo. Esto incluye los siguientes metadatos:

  • El tamaño del archivo
  • Varios dispositivos de almacenamiento y ubicaciones donde se almacenan los archivos
  • Los permisos de acceso asociados a los archivos
  • Información del propietario de los archivos
  • Marcas de tiempo de los archivos (ej., fecha de creación, última modificación, etc.)

Como los inodes no almacenan un nombre de archivo, no importa si cortamos y pegamos un archivo en una ubicación diferente en el disco virtual o le cambiamos el nombre. El archivo seguirá estando físicamente en la misma ubicación. Esto no requiere cambiar datos del inode. Esta es una de las características que los hace tan flexibles.

¿Cómo afecta el uso de inode a un sistema Linux?

Si bien los inodes pueden ayudar a administrar archivos, también vienen con ciertas limitaciones. Al igual que los archivos se almacenan en unidades de un tamaño determinado, los inodes también se almacenan en bloques. Esto hace posible que un archivo de hasta 4 MB sobrecargue por sí solo un inode de 32 bytes.

Cuando esto sucede, un puntero indirecto en el inode apunta a otro. Un archivo que tiene cientos de MB puede hacer que una cadena de inodes se use solo para un archivo. Esto reducirá rápidamente el número de inodes disponibles.

Incluso con archivos pequeños, todos los inodes disponibles se pueden agotar porque hay un número limitado en un sistema. Si bien es posible aumentar este número, esto no está exento de riesgos. Cambiar el número de inodes requiere una reconstrucción completa del disco, lo que podría provocar una pérdida completa de datos. Esto se debe a que el comando mkfs tiene la opción i, que se puede utilizar para establecer el parámetro bytes-por-inode al formatear un disco. Reducir el número garantizaría que se creen más inodes para un disco determinado.

Hay algunos indicadores de que un sistema se ha quedado sin inodes. Dado que los inodes son necesarios para almacenar la ubicación de un archivo, no se mostrarán nuevos archivos en el computador cuando se creen. Esto sucederá incluso si hay suficiente almacenamiento disponible en el disco.

También puede haber otros problemas. Estos incluyen que se bloqueen las aplicaciones, se reinicie el sistema operativo o no se ejecuten las tareas programadas. Si estos problemas ocurren con frecuencia, es un signo de que los inodes se han agotado.

Limitaciones de los inodes

Cada sistema Linux tiene su propio límite de inode basado en el hardware del sistema. Podemos usar el “sistema de archivos de disco” (comando df) para obtener estos números. Por ejemplo, la captura de pantalla de la figura 1 muestra la información del inode de un computador portátil MacBook Pro con un disco de almacenamiento de 1 TB.

df -i output Fig. 1: salida de df -i

El comando utilizado aquí es:

df -i

Esta salida muestra varias columnas con los siguientes significados:

  • Filesystem: todos los discos montados en el sistema
  • Size: tamaño de los discos
  • Used: almacenamiento usado en el sistema de archivos, presentado en GiB (gibibytes)
  • Capacity: porcentaje de almacenamiento utilizado
  • iused: el número de inodes utilizados
  • ifree: el número de inodes libres
  • %iused: el porcentaje de inodes utilizados
  • Mounted on: la ubicación donde se monta el disco

Este comando hace que sea más fácil comprobar el número de inodes y la cantidad de almacenamiento disponible. El número total de inodes disponibles para un disco determinado se puede calcular sumando los valores en las columnas iused y ifree. Aunque altos, estos números siguen siendo limitados para los computadores modernos. En teoría, el número máximo de inodes que un sistema puede tener es 2^32, o 4,3 mil millones. Prácticamente, el número está cerca de 1:16 KB de la capacidad del sistema.

Como se señaló, los inodes podrían agotarse incluso si hay suficiente espacio de almacenamiento disponible en el disco para crear nuevos archivos. He aquí un ejemplo. En la figura 1, hay 480 MiB de espacio de almacenamiento disponible y 4.910.520 inodes libres en el sistema de archivos /dev/disk1s2.

Eso es un montón de inodes. Pero si creamos 4.910.520 archivos de solo 1 byte cada uno en ese disco, ocuparán todos los inodes disponibles y consumirán solo 5 MB de espacio de almacenamiento. Por lo tanto, a pesar de que hay más de 400 MiB de espacio disponible en el disco, no se pueden crear nuevos archivos. Este es el problema de quedarse sin inodes en un sistema Linux.

Identificar y solucionar problemas de inode

Se podría argumentar que nadie va a crear 4 millones de archivos pequeños. Si bien eso puede ser cierto, es posible en el caso de las aplicaciones. Por ejemplo, una podría guardar cada correo electrónico como un archivo en el disco y —con el tiempo— generar muchos archivos pequeños.

Una vez que las señales de advertencia mencionadas comienzan a aparecer, lo primero que debes hacer es usar el comando df -i para comprobar el número de inodes disponibles. Este comando proporcionará el número real de inodes, lo que permite ver si los inodes están completamente agotados o simplemente se están agotando.

Una vez que hayas establecido que el problema está relacionado con los inodes, el siguiente paso es eliminar todos los archivos innecesarios en el disco. Esto requiere identificar dichos archivos en su origen. Con el ejemplo de la aplicación de correo electrónico, sería útil configurar la aplicación para guardar todos los correos electrónicos en una ubicación concreta. Puedes eliminar esos archivos pequeños de esa ubicación o directamente desde la aplicación.

Otra forma de recuperar algunos inodes es borrar la caché y los archivos temporales. Dependiendo del sistema operativo o la distribución de Linux elegida, la ubicación para almacenar archivos temporales cambia. Esto también aplica para los archivos almacenados en caché.

El siguiente lugar para buscar son los directorios donde se almacenan los archivos temporales. A menudo se olvidan. Un ejemplo es el directorio de descargas, donde se pueden borrar los archivos innecesarios.

Por último, ordenar todos los archivos en una ubicación o un directorio determinado por tamaño de archivo hace que sea fácil identificar los archivos pequeños que puede que ya no necesites y —por ende— podrías eliminar. Este es el comando para mostrar archivos en orden ascendente por tamaño de archivo:

ls -laShr <path_to_directory> 

La Figura 2 muestra una captura de pantalla de la salida de este comando, enumerando todos los archivos y directorios en la ubicación dada en un computador portátil MacBook Pro.

ls -laShr output Fig. 2: salida de ls -laShr

El comando delete file se puede canalizar con este comando para eliminar automáticamente los archivos pequeños innecesarios. Sin embargo, eliminar archivos de esta manera puede ser peligroso. Muchas veces, el usuario no sabe qué archivos están siendo afectados. Naturalmente, eliminar los archivos que son necesarios para el correcto funcionamiento de una aplicación causará problemas.

Si eliminar los archivos no es una opción, la única otra manera de aumentar el número de inodes es reparticionar el disco completo. Si esto no se hace correctamente, podría resultar en la pérdida de datos u otros problemas.

Was this article helpful?
Supervise su entorno Linux

Verifique el estado y la disponibilidad de sus servidores Linux para obtener un rendimiento óptimo con la herramienta de monitoreo de Linux de Site24x7.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 "Learn" portal. Get paid for your writing.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 “Learn” portal. Get paid for your writing.

Apply Now
Write For Us