Comprensión detallada de los Inodos de Linux con Ejemplo
Linux y otros sistemas operativos tipo Unix mantienen la consistencia al tratar todo como un archivo (incluso los dispositivos de hardware). El teclado, el ratón, las impresoras, el monitor, el disco duro, los procesos, incluso los directorios, se tratan como archivos en Linux. Los archivos regulares contienen datos como texto (archivos de texto), música, videos (archivos multimedia), etc.
Aparte de los datos regulares, hay algunos otros datos sobre estos archivos, como su tamaño, propiedad, permisos, marca de tiempo, etc. Estos metadatos sobre un archivo se administran 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 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 inodos 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.
¿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 de estilo Unix tradicional 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 llamada 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 (único para ese sistema de archivos) llamado número de inodo.
La siguiente información se almacena en inode:
- Tipo de archivo: archivo normal, directorio, tubería, etc.
- Permisos para ese archivo: leer, escribir, ejecutar
- Recuento de enlaces: El número de enlaces duros relativos a un inodo
- ID de usuario: propietario del archivo
- ID de grupo: propietario del grupo
- Tamaño del archivo: o número mayor/menor en el caso de algunos archivos especiales
- Marca de tiempo: hora de acceso, hora de modificación y hora de cambio (inodo)
- Atributos: inmutables’ por ejemplo
- Lista de control de acceso: permisos para usuarios/grupos especiales
- /li>
- Enlace a la ubicación del archivo
- Otros metadatos sobre el archivo
Tenga en cuenta que el inodo no almacena el nombre del archivo, sino solo su contenido.
Cómo comprobar el inodo en Linux
Si desea echar un vistazo a los inodos, en cualquier sistema de archivos ext que puede usar los siguientes comandos para comprobar las propiedades del sistema de archivos y los archivos que se utilizan en él.
a. Mostrar información de datos de archivo
Puede mostrar los datos de inodo en un archivo o directorio mediante el comando stat.
Debe indicar el nombre del archivo de la siguiente manera:
La salida de estadísticas le indica las diversas 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 opción --format
de la siguiente manera:
# stat --format=%i hello530461
b. Imprimir número de índice de archivos
El comando ls se utiliza para enumerar información de archivos y directorios. La opción -i
con ls muestra el número de inodo de cada archivo. Podemos combinarlo con la opción -l
para enumerar información en detalle
# ls -iltotal 140984520170 dr-xrw-rw- 2 linoadmin linoadmin 4096 Mar 9 2013 asciiquarium_1.1263206 -rwxr-xr-x 1 linoadmin linoadmin 15436 Mar 9 2013 asciiquarium.tar.gz519187 drwxr----- 2 root root 4096 Apr 13 01:35-rwSr--r-- 1 root root 5747 Apr 25 01:45 bootstrap655799 drwxr-xr-x 2 root root 4096 May 16 17:46 course528927 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 de la siguiente manera:
# 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 los inodos disponibles y usados pasando la opción -i
o --inodes
.
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 de disco disponible.
d. Enumere el contenido del superbloque del sistema de archivos
Puede usar el comando tune2fs -l
para mostrar toda la información relacionada con el inodo.
# tune2fs -l /dev/sda6 | grep inodeFilesystem 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_isizeFree inodes: 2224350First inode: 11Journal inode: 8First orphan inode: 1575905Journal backup: inode blocks
e. Manipular los metadatos del sistema de archivos
Puede ver el contenido de un inodo tal y como existe en un sistema de archivos Ext4 con el comando debugfs. Debe usar 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 debugfs.
Asegúrese de que no se pueda acceder a los archivos del sistema de archivos mientras trabaja en debugfs. Debe considerar volver a montar el sistema de archivos usando mount -o remount /yourfilesystem
Puede usar debugfs para recuperar un archivo usando su inodo e indicando un archivo
Estructura de inodo para el directorio
Como se indicó anteriormente, los directorios en Linux también se tratan como archivos. Directory es un archivo especial que asigna un nombre de archivo a su número de inodo (esta asignación se denomina entrada de directorio o dentry). Así que 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 mapear 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/
Como un archivo está asignado a su inodo por su directorio padre, entonces, ¿cómo se asigna el directorio superior, (es decir, / directory
) a su inodo? El número de inodo del directorio /
es fijo, y siempre es 2.
Enlaces 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 duros a un archivo. Para entender los enlaces duros, comenzamos con enlaces. Un enlace es un puntero a otro archivo.
En el mundo Linux, existen dos tipos de enlaces:
a. 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, utilice el comando ln con la opción -s
. Al usar el comando ln, asegúrese de que primero se refiere 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 Piensa en ello como un atajo. Editar ‘filesync’ 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.
El comandols -l
muestra que el archivo resultante es un enlace simbólico. Esto se indica con la letra l en la primera posición de la salida ls -l
y también con la flecha al final del listado, 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.
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 el número 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 duro, es importante entender que la identidad de un archivo es su número de inodo, no su nombre. Un enlace duro es un nombre que hace referencia a un inodo. Significa que si ‘file1’ tiene un enlace duro llamado ‘file2’, entonces ambos archivos se refieren al mismo inodo. Por lo tanto, cuando crea un enlace duro 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
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 suaves, los enlaces duros no son archivos especiales. Ahora, el recuento de enlaces es el número que un archivo ha sido enlazado de forma rígida. Por lo tanto, el recuento de enlaces aumenta después de crear un enlace duro, como puede ver en la figura anterior. Estos enlaces duros tienen dos limitaciones:
- Los directorios no se pueden vincular de forma rígida. Linux no permite que esto mantenga la estructura de árbol acíclico de directorios.
- No se puede crear un enlace duro a través de sistemas de archivos. Ambos archivos deben estar en el mismo sistema de archivos, porque diferentes sistemas de archivos tienen diferentes tablas de inodos independientes (dos archivos en sistemas de archivos diferentes, pero con el mismo número de inodos serán diferentes).
Cómo encontrar un enlace duro en Linux
Puede recuperar todos los nombres de archivo que apuntan a un número de inodo. Significa que puede recuperar enlaces duros porque es el único tipo de enlace donde podemos tener algunos nombres de archivo que apuntan al mismo contenido (inodo). Puede hacerlo con la opción -inum
del comando find 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 que, recupere todos los enlaces duros relativos a un número de inodo específico
Operaciones de Linux con archivos y su relación con inodos
La mayoría de las operaciones) realizado en enlaces suaves afectará al archivo enlazado real (con la excepción de los comandos rm o mv, que eliminan (o mueven) el enlace suave en sí)
Aquí hay algunas operaciones de archivos en las que los inodos desempeñan su papel vital:
a. copiar archivos
Cuando copiamos un archivo, se crea un nuevo archivo con un nuevo inodo.
# cp myfile ..
# ls -li myfile ../myfile2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile3746 -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 directorios del inodo, los datos reales en el disco duro (contenido del archivo) no se mueven.
# ls -li samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt
Ahora vamos a mover el archivo y comprobar el resultado
# mv samplefile.txt ..
# ls -li ../samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt
c. eliminar archivos
Cuando el comando rm es emitido, en primer lugar se comprueba el enlace recuento de los archivos. Si el recuento de enlaces es mayor que 1
, elimina esa entrada de directorio y disminuye el recuento de enlaces. Sin embargo, 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 inodos, el número de inodo se convierte en libre y los bloques de datos que ocupaba este archivo se agregan a la lista de bloques de datos libres.
# ls -li myfile myfile.hardlink2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile.hardlink
Vamos a eliminar el archivo y comprobar el resultado
# rm myfile.hardlink
# ls -li myfile2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile
Usted puede ver que el número de inodo es disminuido.