LINUX

Comprensión detallada de los inodos de Linux con ejemplo

Linux y otros sistemas operativos similares a Unix mantienen la coherencia al tratar todo como un archivo (incluso los dispositivos de hardware). El teclado, el mouse, las impresoras, el monitor, el disco duro, los procesos e incluso los directorios se tratan como archivos en Linux. Los archivos normales contienen datos como texto (archivos de texto), música, videos (archivos multimedia), etc.

Además de los datos normales, hay algunos otros datos sobre estos archivos, como su tamaño, propiedad, permisos, marca de tiempo, etc. Estos metadatos sobre un archivo se gestionan con una estructura de datos conocida como inodo (nodo de índice).

¿Qué es un inodo en Linux?

Cada archivo o directorio de Linux (desde un punto de vista técnico, no hay una diferencia real entre ellos) tiene un inodo, y este inodo contiene todos los metadatos del archivo (es decir, todos los datos administrativos necesarios para leer un archivo se almacenan en su inodo) .

Por ejemplo, el inodo contiene una lista de todos los bloques en los que se almacena un archivo, la información del propietario de ese archivo, los permisos y todos los demás atributos que se establecen para el archivo.

Los límites de inodo son por sistema de archivos y se deciden en el momento de la creación del sistema de archivos. El tamaño máximo del directorio depende del sistema de archivos y, por lo tanto, el límite exacto difiere.

Para un mejor rendimiento, haga que sus directorios sean más pequeños ordenando los archivos en subdirectorios en lugar de tener un directorio grande.

1. ¿Qué es un número de inodo?

El número de inodo también se conoce como número de índice. Un inodo es un número único asignado a archivos y directorios mientras se crea. El número de inodo será único para todo el sistema de archivos.

Un inodo es una estructura de datos en un sistema de archivos tradicional de estilo Unix, como ext3 o ext4. almacenar las propiedades de un archivo y directorios.

Los sistemas de archivos extendidos de Linux como ext3 o ext4 mantienen una matriz de estos inodos denominada tabla de inodos. Esta tabla contiene una lista de todos los archivos de ese sistema de archivos. Los inodos individuales en la tabla de inodos tienen un número único (exclusivo para ese sistema de archivos) llamado número de inodo.

La siguiente información se almacena en inodo:

  • Tipo de archivo: archivo regular, directorio, tubería, etc.
  • Permisos para ese archivo: leer, escribir, ejecutar
  • Recuento de enlaces: El número de enlace físico relativo a un inodo
  • ID de usuario: propietario del archivo
  • Identificación del grupo: propietario del grupo
  • Tamaño del archivo: o número mayor / menor en caso de algunos archivos especiales
  • Sello de tiempo: tiempo de acceso, tiempo de modificación y tiempo de cambio (inodo)
  • Atributos: inmutable ‘por ejemplo
  • Lista de control de acceso: permisos para usuarios / grupos especiales
  • Enlace a la ubicación del archivo
  • Otros metadatos sobre el archivo

Tenga en cuenta que el inodo no almacena el nombre del archivo, solo su contenido.

estructura de datos de inodo
Diagrama de estructura de datos de inodo

2. Cómo verificar el inodo en Linux

Si desea echar un vistazo a los inodos, en cualquier sistema de archivos ext puede usar los siguientes comandos para verificar las propiedades del sistema de archivos y los archivos que se usan en él.

una. Mostrar información de datos de archivo

Puede mostrar los datos de inodo en un archivo o directorio usando el comando stat.

Debe indicar el nombre del archivo de la siguiente manera:

# stat hello
 File: ‘hello’
 Size: 66 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 530461 Links: 2
Access: (0774/-rwxrwxr--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-05-15 20:12:32.540352591 +0000
Modify: 2017-05-15 20:12:16.901527357 +0000
Change: 2017-05-19 17:41:37.394470321 +0000
 Birth: -

La salida de estadísticas le dice las distintas marcas de tiempo del archivo, su propiedad y permisos, y dónde está almacenado. Los datos del archivo se guardan en el bloque de disco, que se muestra en la salida del comando stat del inodo.

Puede elegir enumerar solo el número de inodo de un archivo con la --format opción de la siguiente manera:

# stat --format=%i hello
530461

B. Imprimir número de índice de archivos

El comando ls se usa para listar información de archivos y directorios. los -i La opción con ls muestra el número de inodo de cada archivo. Podemos combinarlo con -l opción para listar información en detalle

# ls -il
total 140984
520170 dr-xrw-rw- 2 linoadmin linoadmin   4096 Mar  9  2013 asciiquarium_1.1
263206 -rwxr-xr-x 1 linoadmin linoadmin   15436 Mar  9  2013 asciiquarium.tar.gz
519187 drwxr----- 2 root      root        4096 Apr 13 01:35 baba
258717 -rwSr--r-- 1 root      root        5747 Apr 25 01:45 bootstrap
655799 drwxr-xr-x 2 root      root        4096 May 16 17:46 course
528927 drwxr-xr-x 3 root      root        4096 Apr 29 00:29 environments

La primera columna da el número de inodo. Puede mostrar el inodo de un archivo en particular como se muestra a continuación:

# ls -i continue.sh 
519450 continue.sh

C. Mostrar información de espacio de inodo del sistema de archivos

De forma predeterminada, el comando df resume el espacio en disco disponible y utilizado. En su lugar, puede recibir un informe sobre inodos disponibles y usados ​​pasando el -i o --inodes opción.

# df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vda1      1292800 126091 1166709   10% /
devtmpfs         60205    319   59886    1% /dev
tmpfs            62556      1   62555    1% /dev/shm
tmpfs            62556    367   62189    1% /run
/dev/vda2          128     13     115   11% /mnt/vda2
tmpfs            62556      1   62555    1% /run/user/0

Esta información puede ser útil si una partición tiene muchos archivos pequeños, que pueden agotar los inodos disponibles antes de que agoten el espacio disponible en el disco.

D. Enumere el contenido del superbloque del sistema de archivos

Puedes usar tune2fs -l comando para mostrar toda la información relacionada con el inodo.

# tune2fs -l /dev/sda6 | grep inode
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Free inodes:              2224350
First inode:              11
Journal inode:            8
First orphan inode:       1575905
Journal backup:           inode blocks

mi. Manipular los metadatos del sistema de archivos

Puede ver el contenido de un inodo tal como existe en un sistema de archivos Ext4 con el comando debugfs. Debe utilizar el comando stat que está disponible en el depurador del sistema de archivos para mostrar el contenido del inodo. Cuando termine, use exit para cerrar el entorno de depuración.

Asegúrese de que no se pueda acceder a los archivos del sistema de archivos mientras trabaja en debugfs. Debería considerar volver a montar el sistema de archivos usando mount -o remount /yourfilesystem

# debugfs /dev/sda1
debugfs 1.42.13 (17-May-2015)
debugfs: stat <19>
Inode: 19 Type: regular
Mode: 0644 Flags: 0x0
Generation: 2632480000
User: 0 Group: 0 Size: 8211957
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 16106
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x48176267 -- Tue Apr 29 14:01:11 2008
atime: 0x485ea3e9 -- Sun Jun 22 15:11:37 2008
mtime: 0x48176267 -- Tue Apr 29 14:01:11 2008
BLOCKS:
(0-11):22749-22760, (IND):22761, (12-267):22762-23017, (DIND):23018, (IND):23019,
(268-523):23020-23275, (IND):23276, (524-779):23277-23532, (IND):23533, (780-1035
):23534-23789, (IND):23790, (1036-1291):23791-24046, (IND):24047, (1292-1547):
24048-24303,(IND):24304, (1548-1803):24305-24560, (IND):24561, (1804-1818):24562

Puede usar debugfs para recuperar un archivo usando su inodo e indicando un archivo

2. Estructura de inodo para directorio

Como se indicó anteriormente, los directorios en Linux también se tratan como archivos. El directorio es un archivo especial que asigna un nombre de archivo a su número de inodo (esta asignación se llama entrada de directorio o dentry). Entonces, cuando decimos que un directorio contiene archivos y otros directorios, queremos decir que este directorio está mapeando esos archivos y directorios (los directorios son archivos especiales, por lo que también necesitan mapeo a sus números de inodo) a sus números de inodo.

Esta es la razón por la que un directorio no puede contener dos archivos con el mismo nombre, porque no puede asignar un nombre con dos números de inodo diferentes.

# ls -ld test/
drwxr-xr-x 3 root root 4096 Apr 13 01:43 test/

A medida que un archivo se asigna a su inodo por su directorio padre, entonces, ¿cómo es el directorio más alto (es decir, / directory) mapeado a su inodo? El número de inodo de / El directorio es fijo y siempre es 2.

# stat /
 File: '/'
 Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 806h/2054d Inode: 2 Links: 27
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-05-20 01:40:01.565097799 +0100
Modify: 2017-05-20 01:27:33.651924301 +0100
Change: 2017-05-20 01:27:33.651924301 +0100
 Birth: -

3. Vínculos y número de índice en Linux

En la salida de ls -l, la columna que sigue a los permisos y antes del propietario es el recuento de enlaces. El recuento de enlaces es el número de enlaces físicos a un archivo. Para comprender los vínculos físicos, comenzamos con los vínculos. Un enlace es un puntero a otro archivo.

En el mundo de Linux, existen dos tipos de enlaces:

una. Enlaces simbólicos (o enlaces suaves)

El enlace simbólico es un archivo separado cuyo contenido apunta al archivo vinculado. Para crear un enlace simbólico, use el comando ln con la opción -s. Cuando use el comando ln, asegúrese de referirse primero al nombre del archivo original y luego al nombre del enlace que desea crear.

# ln -s /home/bobbin/sync.sh filesync

Aquí ‘filesync’ es un enlace simbólico a ‘sync.sh’. Piense en ello como un atajo. Editar ‘sincronización de archivos’ es como editar directamente el archivo original, pero es realmente lo que sucede. Si eliminamos o movemos el archivo original, el enlace se romperá y nuestro archivo ‘filesync’ ya no estará disponible.

los ls -l El comando muestra que el archivo resultante es un enlace simbólico. Esto se indica con la letra l en la primera posición de la ls -l salida y también por la flecha al final de la lista, que indica el archivo al que se refiere el nombre.

# ls -l filesync 
lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh

El contenido de un enlace simbólico es solo el nombre del archivo de destino. Puede ver que los permisos en el enlace simbólico están completamente abiertos. Esto se debe a que los permisos no se administran

Al comparar el enlace simbólico y el archivo original, notará una clara diferencia entre ellos.

# ls -il /home/bobbin/sync.sh filesync 
258674 lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh
517333 -rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh

El archivo original es solo un nombre que está conectado directamente al inodo, y el enlace simbólico se refiere al nombre. El tamaño del enlace simbólico es la cantidad de bytes en el nombre del archivo al que se refiere, porque no hay otra información disponible en el enlace simbólico.

B. Enlaces duros

Para tener una idea de lo que es un enlace físico, es importante comprender que la identidad de un archivo es su número de inodo, no su nombre. Un enlace físico es un nombre que hace referencia a un inodo. Significa que si ‘archivo1’ tiene un enlace físico llamado ‘archivo2’, entonces ambos archivos se refieren al mismo inodo. Entonces, cuando crea un enlace físico para un archivo, todo lo que realmente hace es agregar un nuevo nombre a un inodo.

Para hacer esto, use el comando ln sin opción.

# ls -l /home/bobbin/sync.sh  
-rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/bobbin/sync.sh synchro

Ahora comparemos los dos archivos

# ls -il /home/bobbin/sync.sh synchro 
517333 -rw-r----- 2 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
517333 -rw-r----- 2 root root 5 Apr 7 06:09 synchro

Lo interesante de los enlaces duros es que no hay diferencia entre el archivo original y el enlace: son solo dos nombres conectados al mismo inodo.

Como debe haber notado, a diferencia de los enlaces blandos, los enlaces duros no son archivos especiales. Ahora, el recuento de enlaces es el número al que se ha vinculado un archivo. Entonces, el recuento de enlaces aumenta después de crear un enlace físico, como puede ver en la figura anterior. Estos enlaces físicos tienen dos limitaciones:

  • Los directorios no pueden tener vínculos fijos. Linux no permite esto para mantener la estructura de árbol acíclica de los directorios.
  • No se puede crear un vínculo físico entre sistemas de archivos. Ambos archivos deben estar en el mismo sistema de archivos, porque diferentes sistemas de archivos tienen diferentes tablas de inodo independientes (dos archivos en diferentes sistemas de archivos, pero con el mismo número de inodo serán diferentes).

3. Cómo encontrar un enlace físico en Linux

Puede recuperar todos los nombres de archivo que apuntan a un número de inodo. Significa que puede recuperar enlaces físicos porque es el único tipo de enlace donde podemos tener algunos nombres de archivo que apuntan al mismo contenido (inodo). Puedes hacerlo con el -inum opción de comando de búsqueda como se muestra a continuación

# find / -inum 517333
/home/bobbin/sync.sh
/root/synchro

Con esto, puede saber qué nombres de archivo apuntan a la información de datos, por lo tanto, recupere todos los enlaces físicos relacionados con un número de inodo específico

4. Operaciones de Linux con archivos y su relación con inodos

La mayoría de las operaciones (como copiar) realizadas en enlaces suaves afectarán al archivo vinculado real (con la excepción de los comandos rm o mv, que eliminan (o mueven) el enlace suave en sí)

A continuación, se muestran algunas operaciones de archivo en las que los inodos desempeñan un papel fundamental:

una. copiar archivos

Cuando copiamos un archivo, se crea un nuevo archivo con un nuevo inodo.

# cp myfile ..
# ls -li myfile ../myfile
2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile
3746 -rw------- 1 raghu raghu 36 Jan 11 12:05 ../myfile

B. mover archivos

Cuando se mueve a través de sistemas de archivos, el comando mv procede como el comando cp anterior, con la excepción de que el archivo original se elimina de su ubicación. Pero cuando se mueve dentro de un sistema de archivos, el inodo no cambia, solo se cambia la asignación de directorio del inodo, los datos reales en el disco duro (contenido del archivo) no se mueven.

# ls -li samplefile.txt
2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt

Ahora movamos el archivo y verifiquemos el resultado.

# mv samplefile.txt ..
# ls -li ../samplefile.txt
2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt

C. eliminar archivos

Cuando se emite el comando rm, primero verifica el recuento de enlaces del archivo. Si el recuento de enlaces es mayor que 1, luego elimina esa entrada de directorio y disminuye el número de enlaces. Aún así, los datos están presentes, ni el inodo se ve afectado. Y cuando el recuento de enlaces es 1, el inodo se elimina de la tabla de inodo, el número de inodo queda libre y los bloques de datos que ocupaba este archivo se agregan a la lista de bloques de datos libres.

# ls -li myfile myfile.hardlink
2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile
2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile.hardlink

Eliminemos el archivo y verifiquemos el resultado.

# rm myfile.hardlink
# ls -li myfile
2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile

Puede ver que el número de inodos se reduce.

Conclusión

En este tutorial, aprendemos qué es un inodo y cómo verificar el número de inodo en Linux. Espero que haya disfrutado de la lectura y deje sus comentarios en la sección de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar