¿Qué son los inodos?
Un inodo es una estructura de datos que almacena información sobre un archivo de nuestro sistema de archivos. Un inodo no tiene nombre y se identifica mediante un número entero único. El nombre al cual apunta el inodo es guardado en una tabla que guarda el kernel. Cada inodo únicamente puede contener datos de un solo archivo del sistema de archivos. Por lo tanto, si tenemos 4 archivos y 4 directorios estaremos usando 8 inodos.
¿Qué tipo de información almacenan los inodos de los archivos y directorios?
Un inodo contiene la totalidad de metadatos de un archivo de nuestro sistema de archivos.
Los metadatos almacenados en un inodo son los siguientes:
Número de inodo: El número de inodo es un número entero único que sirve para identificar un inodo.
Tamaño del archivo y número de bloques que ocupa el archivo dentro de la tabla de datos del disco rigido.
El dispositivo de almacenamiento en que está almacenado el archivo. (Device ID)
Número de enlaces. Por lo tanto si hay 2 inodos que apuntan a un mismo bloque de datos tendremos 2 enlaces.
Si tenemos un directorio que contiene 15 subdirectorios en el mismo nivel tendremos 15 enlaces.
El identificador de usuario (UID o User ID): los inodos guardan información del usuario dueño.
El identificador de grupo (GID o Group ID): un inodo contiene el grupo a que pertenece un archivo o directorio.
Marcas de tiempo como por ejemplo la fecha en que se ha creado el archivo, la fecha del último acceso.
Usando el comando stat podemos consultar la información que un inodo guarda sobre un archivo o directorio determindao. Si ejecutamos el comando stat seguido del nombre de un archivo, directorio o enlace obtendremos el siguiente resultado:
~$ stat archivo.txt
Fichero: archivo.txt
Tamaño: 13 Bloques: 8 Bloque E/S: 4096 fichero regular
Dispositivo: fd00h/64768d Nodo-i: 5512085 Enlaces: 1
Acceso: (0664/-rw-rw-r--) Uid: ( 1000/ fabian) Gid: ( 1000/ fabian)
Acceso: 2020-05-15 12:17:00.229155640 -0300
Modificación: 2020-05-15 12:17:00.229155640 -0300
Cambio: 2020-05-15 12:17:00.229155640 -0300
Creación: -
Podemos ver la salida del comando stat sobre el archivo llamado archivo.txt.
¿Cuál es el espacio ocupado por un inodo dentro del sistema de archivos?
Si quieren consultar el espacio que ocupa un inodo de su sistema de archivos tan solo tienen que realizar lo siguiente.
~# tune2fs -l /dev/sda1 | grep Inode
Inode count: 2031616
Inodes per group: 8192
Inode blocks per group: 512
Inode size: 256
Como podemos ver, los inodos de la partición (/dev/sda1) tienen un tamaño de 256 bytes, el cual es el valor predeterminado en el sistema de archivos ext4.
Por lo tanto si los inodos de nuestra partición / tienen 256 bytes y los bloques de nuestro disco duro tienen de 4096 bytes, cada bloque puede guardar 16 inodos.
¿En qué posición se ubican los inodos en el disco duro?
Vamos a hablar de extendido ext4, la partición se subdivide en 4 zonas. En el inicio de cada una de las zonas se ubican las tablas de inodos. Los inodos de cada zona redireccionan a bloques del disco duro lo más cercanos la ubicación del inodo. De esta forma se minimiza el desplazamiento del cabezal en los discos duros tradicionales.
¿Qué funcion cumplen los indos en el disco?
La función de la tabla de direccionamiento de un inodo es indicar las posición del disco duro en que está almacenados los datos propios del archivo.Los inodos en un sistema de archivos no son infinitos y como vimos cada inodo apunta a una determinda cantidad de bloques, si la cantidad de bloques no es suficiente para guardar los datos del archivo necesitamos incluir lo qe llamamos usan tablas de direccionamiento indirecto simples, dobles y triples para albergar los datos del archivo. Esta imagen aclara un poco como accedemos a los bloques de datos que conforman un archivo.
Tablas de direccionamiento indirectas simples dobles y triples
Un inodo tiene una tabla de direccionamiento de 15 entradas. 12 de las 15 entradas permiten un direccionamiento directo a un bloque de datos del disco duro. Si un archivo se almacena en 7 bloques, un inodo nos puede direccionar de forma directa al contenido del archivo. Si finalizamos el espacio que tenemos para las 12 entradas directas tendremos que usar un direccionamiento indirecto. Si el archivo tiene que usar la posición 13 de la tabla de direccionamiento del inodo este nos dirigirá a un bloque de datos que contendrá una nueva tabla de direcciones hacia los bloques que almacenan el contenido de nuestro archivo.
¿Qué son los enlaces duros?
En Linux los archivos no se referencian por su nombre. Se referencian por su número de inodo. Gracias a esto en Linux podemos usar enlaces duros. Ya que la tabla de nombres la maneja el kernel. A continuación vemos un ejemplo de 2 nombres de la tabla del kernel que apuntan al mismo nodo.
Por lo tanto, ambos nombres tienen exactamente el mismo contenido. Podemos borrar tranquilamente uno de los nombres porque hasta que no borremos el último nombre que apunta a un inodo no se borra el contenido.