¿Qué es un Inode? Explicación de su funcionamiento y uso
Los Inodes son una estructura de gestión para los sistemas de archivos que tienen los sistemas operativos unixoides. Los Inodes representan cabeceras de datos o estructuras de datos similares que contienen los metadatos de los archivos almacenados. Los metadatos incluyen información como los derechos de acceso, la ubicación del archivo, el grupo, el número del usuario y la hora de modificación y acceso.
¿Qué es un Inode?
Inode significa “index node” y se trata de una forma de gestión de archivos que ha desempeñado un papel importante desde que se introdujo el sistema operativo Unix y otros sistemas basados en él, como Linux o macOS. La misión principal de Inode en los sistemas de archivos es referenciar, gestionar y localizar determinados archivos mediante números Inode únicos e inconfundibles. Los Inodes son estructuras de datos definidas, que describen y gestionan determinados archivos por medio de metadatos. En función del sistema de archivos en el que se encuentren, utilizan unos metadatos u otros.
Los Inodes no contienen información sobre el nombre de un archivo, pero sí suelen incluir la siguiente información de archivos o bloques de archivos:
- Tipo y permisos de acceso
- Número de enlaces duros (en inglés, hard link)
- Número de usuario (UID)
- Número de grupo (GID) o GUI (GroupID)
- Tamaño del archivo en bytes
- Fecha de la última modificación (mtime)
- Fecha del último cambio de estado (ctime)
- Fecha del último acceso (atime)
- Dirección de los bloques de datos
- Dirección de la entrada indirecta del bloque
- Número de enlaces
- Número de versión
¿Cómo funcionan los Inodes?
Los sistemas Unix no gestionan las particiones de un disco duro mediante clustering sino en forma de bloques de datos. A diferencia de los sistemas DOS y sus tablas FAT, aquí se crean Inodes para gestionar y hacer referencia a los datos del directorio. Si los datos se almacenan en bloques de datos fijos del disco duro, es posible que un archivo sobrepase la capacidad de almacenamiento del bloque. En este caso, el sistema busca otro bloque disponible para guardar el resto del archivo. Es precisamente aquí donde los Inodes entran en acción.
Los Inodes permiten encontrar archivos que hay almacenados en el sistema mediante sus datos de referencia, sus directorios y sus números de Inode únicos. La mayor ventaja de los números Inode es que no dependen del nombre del archivo. Si copias un archivo y le cambias el nombre, puedes volver a encontrarlo fácilmente, ya que tiene el mismo número Inode que el archivo original. Esto también se aplica en el caso de los hard links que los usuarios crean con el comando ln de Linux. Los hard links son un sistema de gestión interna que ofrecen la ventaja de que los Inodes hacen referencia tanto a los archivos originales como a sus copias de seguridad asociadas sin consumir memoria adicional.
En función del sistema, puede que los Inodes sean inalterables, por lo que puede suceder que un archivo exceda el tamaño de los Inodes que hay disponibles. En este caso, el Inode original hace referencia a otro Inode, también llamado bloque de redirección, que contiene el resto de los metadatos.
En función del sistema, puede que los Inodes que hay disponibles no sean suficientes para un elevado número de archivos, ya que tienen su tamaño predefinido. En este caso, el sistema de archivos debe reestructurarse con un mayor número de Inodes.
¿Dónde se utilizan los Inodes?
Los Inodes sirven para gestionar y estructurar sistemas de archivos y se utilizan tanto en sistemas Linux de particulares, como en las soluciones de servicios administrados. Es por ello por lo que los usuarios y las empresas que buscan soluciones en la nube para servidores con sistemas operativos unixoides pueden hacer uso de las estructuras de datos de Inodes. Al igual que ocurre con la mayoría de los servicios en la nube, se puede tratar tanto de una nube pública, como de una nube privada, según las necesidades que tenga cada uno.
¿Qué sistemas de archivos admiten Inodes?
Todos los sistemas operativos de Unix, como Linux o macOS, utilizan Inodes. Sin embargo, la estructura y composición de los Inodes puede variar en función del sistema de archivos que se utilice. Por ejemplo, los sistemas ext2/ext3/ext4 utilizan una estructura en forma de listas o tablas de Inodes como cabeceras de datos. La lista de Inodes se crea automáticamente al instalar el sistema y no puede modificarse a posteriori. Además, los Inodes de los sistemas ext4 de 256 bytes ocupan un espacio de almacenamiento fijo que no se puede utilizar para ningún otro fin. Un Inode describe un archivo o un directorio del sistema de datos conforme a sus metadatos.
xfs o btrfs son sistemas de archivos más complejos, contrastan con ext2/ext3/ext4, ya que los Inodes solo se crean cuando se necesitan para encontrar determinados archivos. En el caso de xfs o btrfs, no se utilizan listas o tablas de Inodes. También se pueden encontrar diferencias en la forma de funcionar de los Inodes de los discos duros (llamados Disk Inodes) y los Inodes que se utilizan para procesar la memoria en Linux (llamados In Core Inodes).
Un vistazo a los comandos Inode más importantes
En función del sistema de archivos que se utilice, existe un determinado límite de Inodes disponibles, por lo que conviene saber qué Inodes están en uso y qué espacio ocupan en el sistema. Sobre todo, si, por ejemplo, no hay suficientes Inodes para todos los archivos.
Comando para mostrar el espacio ocupado en el sistema de archivos
Utiliza el siguiente comando para ver qué espacio está ocupado por Inodes en el sistema de archivos:
~ find /home /tmp -xdev -printf ´%h \n´ | sort | uniq -c | sort -k 1 -nr | head -n 20
shellComando para obtener una visión general de la asignación actual de Inodes
Utiliza el siguiente comando para mostrar todos los Inodes que están en uso actualmente en el sistema:
df -ih
shellEl comando anterior proporciona una visión general sobre el uso de Inodes, incluyendo el sistema de archivos asociado, el número total de Inodes, la cantidad de Inodes en uso actualmente y los Inodes que se encuentran libres:
df -i
shellComando para mostrar un número Inode
Utiliza el siguiente comando para mostrar el número Inode de un determinado archivo:
ls -i
shellComando para mostrar todos los archivos asociados a un Inode
Utiliza el siguiente comando para ver todos los archivos (incluyendo los archivos originales, copias de archivos y copias de seguridad) que tienen como referencia un determinado Inode:
-inum
shellConsejos para aprovechar los Inodes al máximo
Un uso elevado de Inodes no siempre significa que tu capacidad de almacenamiento se esté agotando. A menudo, un mayor uso de Inodes también puede deberse a pequeños datos superfluos, como archivos TMP temporales, cachés o sesiones. El problema se suele solucionar borrando automáticamente todos los archivos con una antigüedad superior a 14 días. Para ello, ejecuta un cronjob con el siguiente comando:
03 *** /usr/bin/find /path/to/files/* -type f – mtime +14 -delete > /dev/null 2>&1
shell¿Qué ocurre si hay muy pocos Inodes?
Si no hay suficientes Inodes disponibles para todos los archivos, es posible que:
- Las aplicaciones se bloqueen
- Se pierdan datos
- Se produzca un reinicio no programado
- Los procesos se bloqueen y no se reinicien
- Los procesos programados no se inicien automáticamente
Si la capacidad de los Inodes se encuentra al 100 %, es aconsejable liberar la memoria ocupada. Otra posibilidad es reestructurar el sistema de archivos y ampliar así el número máximo de Inodes, aunque es un proceso relativamente complejo.