Análisis de metadatos

En esta práctica del módulo de Sistemas Operativos Monopuesto, profundizaremos en el funcionamiento interno del sistema de archivos en entornos GNU/Linux mediante el análisis de los inodos (index nodes). Aprenderemos qué son los metadatos de un archivo y comprobaremos experimentalmente si las modificaciones en el contenido de un fichero alteran o mantienen su estructura de identificación a nivel de sistema.

Objetivo:

Comprender el concepto de inodo como estructura de control de metadatos en sistemas de archivos tipo Unix (como ext4), mediante la creación, consulta, modificación y comprobación de un fichero de texto desde la línea de comandos.

Escenario:

  • Un equipo de prácticas con un sistema operativo GNU/Linux (o una máquina virtual).
  • Acceso a la terminal de comandos con permisos de usuario estándar.

Instrucciones:

  1. Creación de un fichero de texto y consulta inicial del inodo:
    • Abre una terminal en tu sistema Linux.
    • Crea un directorio de trabajo para la práctica y accede a él:
      mkdir practica_inodos && cd practica_inodos
    • Crea un fichero de texto plano con algo de contenido inicial utilizando un editor o un comando rápido:
      echo "Contenido inicial de prueba" > fichero.txt
    • Consulta el número de inodo asignado al archivo creado utilizando el comando con el indicador de inodos:
      ls -i fichero.txt
    • Anota el número que aparece a la izquierda del nombre del archivo (ese es el número de inodo). También puedes ver detalles adicionales y metadatos completos ejecutando:
      stat fichero.txt
  2. Modificación del contenido del fichero:
    • Modifica el contenido del archivo escribiendo un texto completamente nuevo o añadiendo información adicional:
      echo "Este es un contenido completamente modificado y ampliado en el fichero." > fichero.txt
    • Verifica que el contenido del archivo ha cambiado correctamente leyendo su contenido:
      cat fichero.txt
  3. Comprobación posterior del número de inodo:
    • Vuelve a comprobar el número de inodo asociado al archivo ejecutando de nuevo el comando:
      ls -i fichero.txt
    • Compara el número obtenido en este paso con el que anotaste en el Paso 1. ¿Ha cambiado o se mantiene exactamente igual?
    • Vuelve a ejecutar stat fichero.txt para observar los campos de marcas de tiempo de acceso y modificación (Access, Modify, Change).
  4. Experimentación avanzada con borrado y recreación (Opcional):
    • Elimina el archivo: rm fichero.txt
    • Vuelve a crearlo exactamente con el mismo nombre y contenido usando el comando echo del Paso 1.
    • Consulta su nuevo número de inodo con ls -i fichero.txt y comprueba si coincide con el original o si el sistema le ha asignado uno nuevo libre.

Verificación

  1. Comprueba que has podido crear el archivo y extraer su número de inodo mediante el comando ls -i.
  2. Verifica que tras modificar el contenido del fichero de texto, el número de inodo permanece invariable.
  3. Confirma que entiendes qué tipo de información almacena el inodo (metadatos, permisos, tamaño, punteros a bloques de disco) frente a los datos propiamente dichos que contiene el archivo.

Preguntas de reflexión:

  1. Si el contenido de un fichero de texto cambia radicalmente pero su número de inodo sigue siendo el mismo, ¿dónde almacena el sistema operativo la nueva información en el disco duro y qué indica realmente el inodo?
  2. ¿Por qué en la prueba avanzada (borrar el archivo y volver a crearlo con el mismo nombre) el número de inodo resultante suele ser diferente al primero?
  3. ¿Qué implicaciones tiene el agotamiento de los inodos en una partición Linux (error "No space left on device") aunque el comando df indique que todavía hay gigabytes de espacio libre en disco?
Haz clic aquí para ver la solución orientativa

1. Si el contenido de un fichero de texto cambia radicalmente pero su número de inodo sigue siendo el mismo, ¿dónde almacena el sistema operativo la nueva información en el disco duro y qué indica realmente el inodo?

El inodo (index node) es una estructura de datos que almacena exclusivamente los metadatos del archivo: los permisos de acceso, el propietario, el grupo, el tamaño, las marcas de tiempo y, lo más importante, los punteros lógicos que indican en qué bloques físicos del disco se encuentran guardados los datos reales.

Cuando modificas el contenido del archivo, el inodo en sí no cambia de número de identificación; lo que hace el sistema operativo es actualizar los punteros internos del inodo para apuntar a los nuevos bloques de datos (o reescribir los sectores correspondientes) donde ahora reside la nueva información. Por tanto, el nombre del archivo es solo una etiqueta humana vinculada a ese número de inodo en el directorio, mientras que los datos cambian de ubicación física en el almacenamiento.


2. ¿Por qué en la prueba avanzada (borrar el archivo y volver a crearlo con el mismo nombre) el número de inodo resultante suele ser diferente al primero?

Cuando ejecutas el comando rm fichero.txt, el sistema operativo no solo borra los datos, sino que desvincula el nombre del archivo de su inodo y libera ese inodo (junto con sus bloques asociados) marcándolo como disponible en la tabla de inodos del sistema de archivos.

Al volver a crear el archivo inmediatamente después con el comando echo, el sistema operativo asigna un nuevo nombre en el directorio y le adjudica el siguiente inodo libre disponible en su lista de gestión interna. Como los inodos liberados pueden ser reutilizados en función de las políticas de asignación del sistema, o bien se asigna uno nuevo de la pila de libres, el número resultante rara vez coincide con el anterior, demostrando que el archivo nuevo es una entidad completamente distinta a nivel estructural, aunque conserve el mismo nombre.


3. ¿Qué implicaciones tiene el agotamiento de los inodos en una partición Linux (error "No space left on device") aunque el comando df indique que todavía hay gigabytes de espacio libre en disco?

En los sistemas de archivos tradicionales de Linux (como ext4), el espacio total de la partición se divide en dos recursos independientes: por un lado, los bloques de datos destinados a almacenar el contenido de los archivos; por otro, una cantidad fija y predeterminada de inodos generada en el momento de formatear el disco (creada en proporción al tamaño del volumen).

Si un directorio o aplicación genera masivamente millones de archivos de tamaño diminuto (por ejemplo, cachés web, correos electrónicos individuales o ficheros temporales), cada uno de ellos consumirá obligatoriamente un inodo completo, aunque apenas ocupe unos pocos bytes de datos. Si se llega al límite máximo de inodos disponibles en la tabla, el sistema impedirá la creación de cualquier archivo nuevo y arrojará un error de falta de espacio, a pesar de que los bloques de datos físicos sigan teniendo gigabytes libres.