inodo

Un inodo (index node) es una estructura de datos fundamental en los sistemas de archivos de tipo Unix (como ext4, XFS o UFS) que almacena toda la metainformación esencial de un archivo o directorio, excluyendo su nombre explícito y su contenido de datos real.

Cada archivo o carpeta en el sistema operativo Linux tiene asignado un número de inodo único dentro del sistema de archivos. Mientras que los seres humanos identificamos los ficheros por su nombre en una ruta, el núcleo del sistema operativo (kernel) gestiona, localiza y protege los archivos exclusivamente a través de su número de inodo asociado.

¿Qué información almacena un inodo?

A diferencia de lo que se suele pensar, el nombre de un archivo no se guarda dentro de su inodo, sino en la estructura de directorios del sistema de archivos. El inodo contiene únicamente los metadatos de control:

  • Tipo de archivo y permisos (modo): Si es un fichero regular, directorio, enlace simbólico o dispositivo, junto con los permisos clásicos de lectura, escritura y ejecución (rwx).
  • Identificadores de propiedad: El UID del usuario propietario y el GID del grupo al que pertenece el archivo.
  • Tamaño del archivo: El tamaño exacto en bytes.
  • Marcas de tiempo (timestamps): Las fechas de acceso (atime), modificación del contenido (mtime) y modificación de los metadatos o inodo (ctime).
  • Contador de enlaces (link count): El número de nombres de ruta (enlaces físicos o duros) que apuntan a este mismo inodo.
  • Punteros a bloques de datos: Direcciones físicas en el disco donde se encuentran almacenados los bloques de datos reales que componen el contenido del archivo.

Estructura de metadatos del inodo

Campo del Inodo Descripción del Metadato
Número de Inodo Identificador numérico único dentro de la partición del sistema de archivos.
Permisos y Modos Control de acceso POSIX y tipo de objeto (fichero, directorio, enlace).
Propietario y Grupo UID y GID que determinan quién posee los derechos sobre el recurso.
Fechas (Timestamps) Registro temporal de último acceso, modificación de datos y cambio de metadatos.
Punteros a Bloques Referencias directas e indirectas hacia los sectores del disco duro con la información.

Características principales:

  • Los inodos tienen un tamaño fijo predeterminado al formatear el sistema de archivos (habitualmente 256 o 128 bytes en ext4).
  • Existe un número máximo de inodos determinado durante la creación de la partición ($mkfs$). Esto significa que un disco duro puede quedarse sin espacio libre aunque aún le quede capacidad de almacenamiento en gigabytes si se agotan todos los inodos disponibles (por ejemplo, creando millones de archivos diminutos).
  • El comando clásico para consultar el número de inodo de un archivo es ls -i.
  • Para verificar el consumo y la disponibilidad de inodos a nivel global en las particiones del sistema operativo se utiliza el comando df -i.
  • Los enlaces duros (hard links) comparten exactamente el mismo número de inodo que el archivo original, mientras que los enlaces simbólicos (symbolic links) utilizan un inodo propio independiente.

Analogía: Imagina una gran biblioteca pública. El inodo funciona exactamente igual que la ficha catalográfica o la ficha de inventario de un libro: en esa ficha se anota el autor, la fecha de adquisición, las restricciones de préstamo, el estado de conservación y la sección exacta de la estantería donde está guardado. El título del libro en la portada es independiente; de hecho, podrías cambiarle el nombre o añadir otra copia en un estante distinto apuntando a la misma ficha maestra sin duplicar la información de control.

Actividad práctica

Objetivo:

Inspeccionar los números de inodo, comprobar el comportamiento de los enlaces duros frente a los simbólicos y auditar la ocupación de inodos en un entorno Linux.

Tareas:

  1. Crea un archivo de texto plano en tu terminal ejecutando: echo "Apuntes de sistemas" > archivo.txt.
  2. Visualiza el número de inodo asignado a ese fichero mediante el comando:
    ls -i archivo.txt
  3. Crea un enlace duro (hard link) y un enlace simbólico (symlink) hacia dicho archivo:
    ln archivo.txt duro.txt
    ln -s archivo.txt simbolico.txt
  4. Comprueba los inodos de los tres archivos usando ls -li y observa cuál de ellos comparte idéntico número de inodo y por qué el contador de enlaces (link count) ha cambiado.
  5. Audita el estado actual de los inodos en las particiones de tu máquina virtual ejecutando el comando de comprobación global:
    df -i

Preguntas de reflexión:

  1. ¿Por qué un sistema de archivos Linux puede reportar un error de "Dispositivo lleno" al intentar crear un archivo nuevo a pesar de disponer de espacio libre en gigabytes?
  2. ¿Qué diferencia crítica existe en el número de inodo cuando creamos un enlace duro frente a un enlace simbólico?
  3. ¿Qué ocurre con el contenido de un archivo si eliminamos el fichero original pero este tiene un enlace duro asociado?
  4. ¿Por qué el nombre de un archivo no se encuentra almacenado dentro del propio inodo?
  5. ¿Qué comando permite auditar de forma rápida el porcentaje de uso de inodos en las particiones montadas del sistema?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Por qué un sistema de archivos Linux puede reportar un error de "Dispositivo lleno" al intentar crear un archivo nuevo a pesar de disponer de espacio libre en gigabytes?

Porque se ha producido un agotamiento total de los inodos disponibles en el sistema de archivos, a pesar de que aún queden bloques de datos libres en gigabytes. Cada archivo, directorio o enlace requiere obligatoriamente un inodo para almacenar sus metadatos. Si se crean muchísimos archivos de pequeño tamaño, la tabla de inodos se llena antes de que se agote el espacio físico del disco.


2. ¿Qué diferencia crítica existe en el número de inodo cuando creamos un enlace duro frente a un enlace simbólico?

Cuando creamos un enlace duro, este comparte exactamente el mismo número de inodo que el archivo original, ya que apunta directamente a los mismos bloques de datos en disco. En cambio, cuando creamos un enlace simbólico, se genera un archivo completamente nuevo que posee un número de inodo único y diferente, cuyo contenido interno es simplemente la ruta de texto hacia el archivo de destino.


3. ¿Qué ocurre con el contenido de un archivo si eliminamos el fichero original pero este tiene un enlace duro asociado?

El contenido del archivo permanece intacto y totalmente accesible a través del enlace duro restante. Al eliminar el fichero original, el sistema de archivos únicamente decrementa el contador de enlaces (*link count*) asociado a ese inodo. Los datos físicos en el disco no se borran ni dejan de estar disponibles hasta que se eliminan todas las referencias o enlaces duros que apuntan a dicho inodo.


4. ¿Por qué el nombre de un archivo no se encuentra almacenado dentro del propio inodo?

Porque el inodo está diseñado para almacenar exclusivamente los metadatos de control y los punteros a los bloques de datos, siendo completamente independiente del nombre o la ruta. Los nombres de los archivos se almacenan en las tablas de los directorios, las cuales actúan como mapas o tablas de asociación que vinculan un nombre legible para las personas con su correspondiente número de inodo. Esto permite que un mismo inodo tenga múltiples nombres (gracias a los enlaces duros) y que renombrar un archivo sea una operación extremadamente rápida y eficiente.


5. ¿Qué comando permite auditar de forma rápida el porcentaje de uso de inodos en las particiones montadas del sistema?

El comando df -i (o su forma extendida df --inodes). Este comando muestra en un formato tabular el número total de inodos, los inodos utilizados, los libres y el porcentaje de ocupación correspondiente a cada una de las particiones montadas en el sistema operativo.