Te lleva a volver a entender el inodo del sistema Linux.

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.

Te lleva a volver a entender el inodo del sistema Linux.

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.

Supongo que te gusta

Origin blog.51cto.com/15061930/2642096
Recomendado
Clasificación