¿Cómo saber el uso de inodos en Linux?

Otro artículo teórico con una parte práctica, en este caso hablamos de los inodos en GNU/Linux, aunque la parte sesuda también sirve para otros sistemas UNIX y like-UNIX. Ya que estamos, recuerda este mantra, en UNIX (véase también en GNU/Linux) todo es un archivo.

Además, siguiendo con esta frase, cada uno de estos archivos tienen asociado un número de inodos.

Pero vayamos por partes.

¿Qué son los inodos?

El inodo se refiere a un nodo de índice o número de índice, esto es, una estructura de datos en un sistema de archivos en GNU/Linux, que almacena información, sobre un archivo o directorio.

Cada archivo se identifica por un número de inodo. Este número es único dentro de todo el sistema de archivos.

Dentro de cada inodo, se incluye información como número de inodos, tipo de archivo, propietario, permisos y fecha de creación.

Un archivo Unix se «almacena» en dos partes diferentes del disco: los bloques de datos y los inodos. Los bloques de datos contienen los «contenidos» del archivo. La información sobre el archivo se almacena en otro lugar, en el inodo.

Tanto los inodos como los bloques de datos se almacenan en un «sistema de archivos», que es como se organiza una partición de disco.

Cabe decir que depende el sistema de ficheros, se indica el máximo de inodos que se pueden utilizar. Una heurística de asignación típica para inodos en un sistema de archivos es el uno por ciento del tamaño total.

Comprobar el número de inodo de un archivo

Una de las formas habituales es utilizar el popular comando «ls«, que como sabéis sirve para listar el contenido de una carpeta. Para ver los números de inodo debemos añadir el parámetro «-i» El número de inodo del archivo se mostrará en el primer campo de salida.

  1. [davidochobits@servcentos]$ ls -li
  2. total 8148
  3. 5412 -rw-rw-r--  1 david david       0 Apr  8 10:34 file1.txt
  4. 5413 -rw-rw-r--  1 david david       0 Apr  8 10:34 file2.txt
  5. 5414 -rw-rw-r--  1 david david       0 Apr  8 10:34 file3.txt
  6.   18 drwxr-xr-x 19 root  root     4096 Mar 20 11:28 openssl-1.1.1
  7.   16 -rw-rw-r--  1 david david 8337920 Sep 11  2018 openssl-1.1.1.tar.gz

Buscar un archivo usando el número de inodo

Tenemos disponible la herramienta «find«, con ello podemos listar los archivos, esta vez utilizando el número de inodos en Linux.

  1. [davidochobits@servcentos /]$ find /home/david/ -inum 5414
  2. /home/david/file3.txt

Comprobar el uso de inodos

Si deseamos verificar la utilización de inodos en el sistema de archivos, utilizamos el comando «df«, más el parámetro «-i»

  1. [davidochobits@servcentos /]$ df -i
  2. Filesystem                  Inodes IUsed  IFree IUse% Mounted on
  3. /dev/mapper/vg_root-lv_root 327680 85831 241849   27% /
  4. devtmpfs                    482103   401 481702    1% /dev
  5. tmpfs                       485100     1 485099    1% /dev/shm
  6. tmpfs                       485100   670 484430    1% /run
  7. tmpfs                       485100    16 485084    1% /sys/fs/cgroup
  8. /dev/sda1                    65536   342  65194    1% /boot
  9. /dev/mapper/vg_root-lv_var  327680  3739 323941    2% /var
  10. /dev/mapper/vg_root-lv_tmp  131072    22 131050    1% /tmp
  11. /dev/mapper/vg_root-lv_home 327680  5623 322057    2% /home
  12. /dev/mapper/vg_root-lv_opt  327680  9988 317692    4% /opt

En esta parte, también podemos utilizar el comando «du«, que como sabéis sirve para mostrar el espacio ocupado por los archivos. Si utilizamos el parámetro «–inodes«, nos dirá el número de inodos utilizados.

  1. [root@servcentos davidochobits]# du -sh --inodes *
  2. 1       file1.txt
  3. 1       file2.txt
  4. 1       file3.txt
  5. 5,3K    openssl-1.1.1
  6. 1       openssl-1.1.1.tar.gz

Observamos que en la carpeta nos indicada que existen 5300 inodos, que como vemos a continuación, aproximadamente coincide con el número de archivos:

  1. [root@servcentos davidochobits]# find openssl-1.1.1/ -type f | wc -l
  2. 5230

Contar el uso de inodos

Si deseamos contar la utilización de inodos , podemos utilizar una combinación de comandos y parámetros:

  1. find . -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn

Por ejemplo dentro de la carpeta «/usr«, sería como sigue:

  1. [root@servcentos usr]# find  -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn
  2.   28524 ./share
  3.   13531 ./lib
  4.    7861 ./local
  5.    5295 ./lib64
  6.    1362 ./include
  7.    1017 ./bin
  8.     501 ./sbin
  9.     400 ./libexec
  10.     398 ./java
  11.      14 .
  12.       2 ./src

Y esto es todo por hoy. Espero que esta información os pueda ser de utilidad en algún momento.

Nos vamos leyendo.

Fuentes consultadas

Grymoire.com – Introduction to Inodes!