Cuando administramos un servidor, es importante ir paso a paso conociendo detalles del sistema operativo en el que nos encontramos, que eventualmente nos ayudarán a encontrar problemas de manera más rápida.
En este artículo, te explicaré el concepto de Inodes, presente en sistemas operativos basados en UNIX como MacOS o las distribuciones de Linux.
Inodes - Estructura de datos para archivos
En términos generales, un Inode contiene los metadatos de un archivo, estos metadatos incluyen información como el tamaño, los permisos, la fecha de creación, el propietario y más.
Existe una llamada al sistema (system call) de Unix a través de la cual podemos obtener los atributos de la estructura de datos de los Inodes, de manera que es a través de dicha llamada que obtenemos los atributos de un archivo en programación.
Cada lenguaje es responsable de cómo expondrá las llamadas al sistema para sus usuarios, en Ruby lo hacemos así:
File::stat(‘demo.txt’)
Esta llamada retorna los atributos del archivo almacenados en el Inode, de nuevo, los metadatos del archivo. Por ejemplo
inode = File::stat(‘demo.txt’)
puts inode.ino # Imprime el número inode del archivo
puts inode.size # Imprime el tamaño del archivo en bytes
Cada sistema operativo retornará distintos atributos del archivo al hacer esta llamada.
Inode number
Resulta ser que la forma en que el sistema operativo sabe dónde está un archivo y qué archivo es, no es a través de su nombre, es a través de Inode Number. Para eso, el sistema operativo almacena tablas a las que llama las Inode Tables, en las que se almacenan los Inode Numbers y el archivo al que corresponde ese número. De esta manera, cuando tu como usuario haces referencia a un archivo por su nombre, el sistema lo buscará en las Inode Tables para encontrar su Inode Number, y ahora sí, con este último dato identificará al archivo que necesitas.
Cada que creas un nuevo archivo a este se le asigna un nombre, y además, un InodeNumber, para que como mencionamos, el sistema operativo pueda identificar tu archivo.
Si quisieras saber el Inode Number de tus archivos, puedes ejecutar el siguiente comando en tu terminal:
ls --inode
La ejecución de este comando enlistará los archivos contenidos dentro de el directorio, junto con el Inode Number de cada uno de ellos.
Un aspecto muy importante de conocer acerca de este concepto, es que sepas que un sistema operativo tiene un número limitado de identificadores (Inode numbers), mismos que fueron asignados al momento de la instalación del sistema operativo.
Esto significa que nuestra computadora tiene un límite de archivos que puede crear, además, que este límite no depende sólo del espacio en disco duro, también depende de si aún hay identificadores disponibles.
Para que puedas conocer la cantidad de números disponibles, cuántos has usado y el porcentaje que se ha ocupado, puedes usar el siguiente comando:
df -i
El comando df
entrega información acerca del espacio en disco usado por el sistema de archivos, o en palabras más mortales, el espacio en el disco duro. La opción -i
le indica que en lugar de mostrar la información del espacio usado, muestre información relacionada con los inodes.
Esto quiere decir que nuestra computadora se puede quedar sin espacio de dos formas:
- Ocupamos toda la capacidad del disco duro
- Nos acabamos los inodes disponibles para nuestro sistema operativo.
Si en algún punto llegarás a acabar la cantidad de Inodes disponibles para tu computadora, tu solución sería eliminar archivos. Recuerda que como cada archivo ocupa un Inode Number distinto, liberar tu capacidad en este caso significa borrar muchos archivos no borrar archivos grandes, de hecho el peso de cada archivo no importa cuando quieres liberar los inodes disponibles para tu computadora.
En el caso de Linux, se crean por defecto, un inode por cada 2k bytes que contenga el sistema de archivos, esta regla puede ser configurada por el usuario, para reducir la cantidad de inodes disponibles o eventualmente incrementarla.
Despedida
¿Interesante, no? Si quieres iniciar con Linux, recuerda que en CódigoFacilito tenemos un curso gratuito que puedes tomar aquí: https://codigofacilito.com/cursos/linux
Deja tus comentarios para saber qué te pareció el artículo, aportes adicionales al tema o algún tema del que quieras que escribamos.