Introducción al inodo
En el sistema operativo Linux, el sistema de archivos se divide en dos partes, una es el área de datos y la otra es el área de metadatos. Los metadatos aquí son el inodo, que accede al creador del archivo, la fecha de creación del archivo y la fecha de modificación del archivo Fecha de acceso, tamaño del archivo y otra información.
Obtención del contenido del nodo de inodo
Simplemente cree un archivo en un determinado sistema de archivos y use el comando stat para obtener el contenido del nodo de inodo.
[mysql@mysql test]$ stat test.log
文件:"test.log"
大小:9 块:8 IO 块:4096 普通文件
设备:fd02h/64770d Inode:8393435 硬链接:1
权限:(0664/-rw-rw-r--) Uid:( 2001/ mysql) Gid:( 4001/ mysql)
最近访问:2020-09-28 15:34:05.452763004 +0800
最近更改:2020-09-28 15:34:05.452763004 +0800
最近改动:2020-09-28 15:34:05.517763243 +0800
¿Cómo lee Linux el contenido del archivo cuando ejecuta el comando cat test.log?
De hecho, en el sistema Linux, el nombre del archivo no se usa. Lo que realmente se usa es el número de nodo de inodo. Primero, el sistema encontrará el número de nodo de inodo correspondiente por el nombre de archivo, y luego obtendrá la información del nodo de inodo a través del número de nodo de inodo y, finalmente, al obtener la información del nodo de inodo, leer el contenido de datos requerido.
El método de cálculo de inodo del sistema de archivos
utiliza el sistema de archivos de tipo xfs como ejemplo aquí.
[mysql@mysql test]$ df -Th|grep -i home
文件系统 类型 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-home xfs 10G 324M 9.7G 4% /home
Puede ver que el tipo de sistema de archivos de / home es xfs, entonces, ¿cómo sabe el número de nodos de inodo del sistema de archivos / home?
[mysql@mysql test]$ df -i|grep -i home
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-home 5242880 354 5242526 1% /home
De los resultados anteriores, puede ver que el número total de nodos de inodo en el sistema de archivos / home es 5242880. ¿Quiere saber cómo se calcula 5242880? Aquí puede usar el comando xfs_info para obtener información más detallada.
[mysql@mysql test]$ xfs_info /home
meta-data=/dev/mapper/centos-home isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Aquí puede obtener isize = 512, lo que significa que un inodo ocupa 0.5k bytes, y maxpct = 25 significa que ocupa el 25% del tamaño total de todo el sistema de archivos.
Entonces, el número total de inodos se puede calcular así: 2621440 4 0.25 / 0.5 = 5242880
En un sistema de archivos, los recursos del nodo de inodo son limitados. Si hay demasiados archivos pequeños, la cantidad de nodos de inodo se agotará. Incluso si hay espacio libre en el disco en el sistema de archivos en este momento, no se pueden crear nuevos archivos. No los elimine en este momento. Archivos inútiles o expanda el número total de nodos de inodo.
xfs_growfs -m 30 /home
El uso de inodo para eliminar archivos
está aquí para expandir un punto de conocimiento. Cuando crea un archivo con símbolos especiales en el sistema de archivos, no puede eliminarlo directamente con el nombre del archivo. Probemos aquí.
[mysql@mysql test]$ ls -l
总用量 0
-rw-rw-r-- 1 mysql mysql 0 9月 28 16:13 -test.jldfa
[mysql@mysql test]$ rm -test.jldfa
rm:无效选项 -- t
Try 'rm ./-test.jldfa' to remove the file "-test.jldfa".
Try 'rm --help' for more information.
[mysql@mysql test]$
[mysql@mysql test]$ rm "-test.jldfa"
rm:无效选项 -- t
Try 'rm ./-test.jldfa' to remove the file "-test.jldfa".
Try 'rm --help' for more information.
Qué hacer, aquí puede eliminar el
primero de dos maneras , use rm ./-test.jldfa de acuerdo con el indicador del sistema para eliminar el
segundo, use el número de inodo para eliminar
[mysql@mysql test]$ ls -li
总用量 0
8393433 -rw-rw-r-- 1 mysql mysql 0 9月 28 16:13 -test.jldfa
[mysql@mysql test]$ pwd
/home/mysql/test
[mysql@mysql test]$ find /home/mysql/test -inum 8393433
/home/mysql/test/-test.jldfa
[mysql@mysql test]$ find /home/mysql/test -inum 8393433 -delete
[mysql@mysql test]$ ll
总用量 0
Puede ver que el archivo se ha eliminado.