Inodo

Inode
Información sobre la plantilla
Inodode.jpeg
Concepto:Es una estructura de datos propia de los sistemas de archivos tradicionales de Unix

Inodo. Refiere generalmente a inodos en discos dispositivos en modo bloque que almacenan archivos regulares, directorios, y enlaces simbólicos. El concepto es particularmente importante para la recuperación de los sistemas de archivos dañados.

Inode

En informática, un inode, i-node, inodo, i-nodo, nodo-i o nodo índice es una estructura de datos propia de los sistemas de archivos tradicionales de Unix, como UFS. Un inodo almacena toda la información sobre un archivo regular, directorio u otro objeto del sistema de archivos, excepto su nombre y su contenido.

Descripción

Un sistema de archivos depende de estructuras de datos que contienen información //acerca// de los archivos, además del contenido de dichos archivos. A esto se le denomina //metadata// (metadatos), es decir, datos que describen datos. En los sistemas de archivos, esta información se almacena en una ubicación conocida de los discos (es decir, de los dispositivos en modo bloque) como un arreglo de datos, donde el número i es un entero que representa un índice en dicho arreglo, por lo cual el inodo es el elemento seleccionado de dicho arreglo asociado a un objeto de dicho sistema de archivos, como puede ser un archivo, un directorio o un enlace simbólico.

En otras palabras, un inodo representa un índice en una tabla de metadatos almacenada en una ubicación conocida de un dispositivo. A partir del número de inodo, la porción del kernel (núcleo) que contiene el controlador para los sistemas de archivos puede acceder al contenido del inodo, que incluye la ubicación del archivo en el dispositivo y por tanto permite el acceso a dicho archivo.

Los inodos almacenan información acerca de archivos y directorios, tales como quiénes son sus propietarios, cuáles son sus modos de acceso (permisos de lectura, escritura y ejecución), y cuál es el tipo del archivo. En muchos tipos de implementaciones de sistemas de archivos, el número máximo de inodos se fija durante la creación del sistema de archivos, limitando la cantidad máxima de archivos que el sistema puede contener. Un método heurístico típico para reservar inodos en un sistema de archivos consiste en utilizar el uno porciento de la capacidad total del dispositivo.

El número de inodo de un archivo puede obtenerse mediante el comando ls -i. El comando ls -l muestra parte de la información que contiene el inodo de cada archivo.

Para un sistema de archivos, el uso de inodos tiene implicaciones para los nombres de archivos y directorios:

  • Los inodos no contienen nombres de archivos, solo metadatos.
  • Los directorios son listas de estructuras de asociación, cada una de las cuales contiene un nombre de archivo y su número de inodo.
  • Para acceder a un archivo en particular, el controlador del sistema de archivos debe buscar en un directorio el nombre del archivo y luego obtener el número de inodo correspondiente.

La representación en memoria del kernel del sistema operativo sobre estos datos se llama en Linux struct inode. Los sistemas derivados de BSD utilizan el término vnode, donde la **v** de **vnode** se refiere a la capa del sistema virtual de archivos del kernel.

Estructura interna

El estándar POSIX impone un comportamiento de los sistemas de archivos que tiene fuertes influencias de los sistemas de archivos tradicionales de UNIX. Los archivos regulares deben contener los siguientes atributos:

  • Tamaño del archivo en bytes.
  • Identificador del dispositivo que contiene al archivo.
  • Identificador del usuario propietario del archivo.
  • Identificador del grupo de usuarios al que pertenece el archivo.
  • El modo del archivo, que determina el tipo de archivo y cómo su propietario, grupo y otros usuarios pueden acceder a éste.
  • Banderas adicionales del sistema y del usuario para proteger el archivo (limitan su uso y modificación).
  • Marcas de tiempo que indican la fecha de creación del inodo (ctime), la última modificación del contenido del archivo (mtime), y el último acceso a dicho archivo (atime).
  • Contador de enlaces que indica cuántos enlaces duros apuntan al inodo. ((Si el archivo no está en uso, cuando se borran todos los enlaces y el contador queda en cero, el sistema operativo elimina tanto el inodo como el contenido del archivo))
  • Punteros a los bloques del disco que almacenan el contenido del archivo. ((Ver estructura de punteros de inodos))

La llamada de sistema stat permite obtener el número de inodo de un archivo y alguna de la información en el inodo.

Implicaciones

  • Los archivos pueden tener múltiples nombres. Si múltiples nombres tienen enlaces duros al mismo inodo, entonces los nombres son equivalentes, es decir, el primero que se cree no tiene un estatus especial. No ocurre lo mismo con los enlaces simbólicos, que dependen del nombre original, no del número de inodo.
  • Un inodo puede no tener enlaces. Los archivos desenlazados son eliminados del disco y sus recursos liberados para una posterior asignación, pero la eliminación debe esperar hasta que todos los procesos que tienen el archivo abierto terminen de acceder al mismo. Esto incluye los archivos ejecutables, que se mantienen implícitamente abiertos por el proceso que los ejecuta.
  • Típicamente no es posible mapear un archivo abierto al nombre de archivo que se utilizó para abrirlo. El sistema operativo obtiene el número de inodo a partir del nombre del archivo e inmediatamente desecha dicho nombre. Esto significa que las funciones getcwd() y getwd() buscan el directorio padre para encontrar un archivo con un inodo que coincida con el directorio de trabajo, entonces buscan el padre de este y así sucesivamente hasta que alcancen el directorio raíz. Los sistemas SVR4 y Linux mantienen información extra para hacer esto posible.
  • Históricamente, era posible hacer enlaces duros a directorios. Esto permitía que en una estructura de directorios, un directorio fuese su propio padre. Los sistemas modernos generalmente prohiben este estado confuso, a excepción del directorio raíz, que aun se define como su propio padre.
  • El número de inodo de un archivo permanece igual aunque se mueva a otro directorio en el mismo dispositivo o cuando el disco se defragmente, lo cual puede cambiar su ubicación física. Esto también implica que es imposible implementar el comportamiento de un inodo en muchos sistemas de archivo diferentes a Unix, como FAT y sus derivados, que no tienen una manera de almacenar una "identidad perdurable" cuando tanto la entrada del directorio como los datos se mueven en el disco.
  • La instalación de nuevas librerías es simple con los sistemas de archivo que utilizan inodos. Un proceso en ejecución puede acceder a una librería mientras otro reemplaza dicho archivo, creando un nuevo inodo, y un nuevo mapeo existirá para el nuevo archivo, de modo que cualquier intento posterior de acceder a la librería obtenga la nueva versión. Esta facilidad elimina la necesidad de reiniciar el sistema para reemplazar las librerías mapeadas actualmente. Por este motivo, al actualizar los programas, la mejor práctica es primeramente eliminar los viejos ejecutables y crear un nuevo inodo para la versión actualizada, de modo que cualquier proceso que ejecute la versión anterior proceda sin ser perturbado.

Utilidad

Los administradores de sistemas utilizan muchos programas que a menudo designan archivos con números de inodos. Algunos ejemplos incluyen utilidades populares de verificación de integridad de los discos, como fsck o pfiles. Así, surge naturalmente la necesidad de traducir números de inodo a nombres de archivo y viceversa. Esto puede lograrse con el comando find con la opción -inum, o el comando ls con la opción correspondiente (-i en las plataformas compatibles con el estándar POSIX).

Es posible agotar el grupo de inodos de un dispositivo. Cuanod esto ocurre, no pueden crearse nuevos archivos en el dispositivo aunque haya espacio disponible. Por ejemplo, un servidor de correo puede tener muchos archivos pequeños que no llenan el disco, pero utilizan muchos inodos para apuntar a muchos archivos.

Algunos sistemas de archivos (como JFS, XFS o ext4) escapan a esta limitante con //extents// ((Áreas contíguas de almacenamiento reservadas para los archivos)) y/o una asignación dinámica de inodos, que pueden hacer crecer el sistema de archivos y/o incrementar el número de inodos.

Fuentes