inode介紹
在Linux操做系統中,將文件系統分爲2部分,一部分爲數據區,一部分爲元數據區,這裏的元數據就是inode,它存取文件的建立者,文件的建立日期,修改日期,訪問日期,文件大小等信息。node
獲取inode節點內容
只要在某個文件系統下,建立一個文件,用stat命令就能夠獲取到inode節點內容。mysql
[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
讀取文件原理
當你執行cat test.log命令時,Linux是如何讀取到文件內容的呢。sql
其實在Linux系統內部,是不使用文件名的,真正使用的是inode節點號,首先系統會經過文件名找到對應的inode節點號,而後經過inode節點號,獲取到inode節點信息,最後,經過獲取的inode節點信息,讀取須要數據內容。centos
文件系統inode計算方式
在這裏用xfs類型的文件系統舉例。app
[mysql@mysql test]$ df -Th|grep -i home 文件系統 類型 1K-塊 已用 可用 已用% 掛載點 /dev/mapper/centos-home xfs 10G 324M 9.7G 4% /home
能夠看到/home的文件系統類型爲xfs,那如何知道/home文件系統的inode節點數呢。ide
[mysql@mysql test]$ df -i|grep -i home 文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點 /dev/mapper/centos-home 5242880 354 5242526 1% /home
從上面的結果能夠看到/home文件系統的inode節點總數爲5242880,你是否想知道5242880是怎麼計算出來的呢,在這裏能夠用xfs_info命令來獲取更詳細的信息了。測試
[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
在這裏能夠獲取到isize=512,這個就是一個inode佔用0.5k字節,maxpct=25表明佔用整個文件系統總大小的25%。操作系統
因此inode總數能夠這樣計算:2621440 4 0.25 / 0.5= 5242880code
在一個文件系統裏,inode節點資源是有限的,若是小文件過多,將inode節點數用光了,就算此時文件系統還有空餘磁盤空間,也沒法建立新文件的,這個時候要不刪除無用的文件,要不就擴容inode節點總數。orm
xfs_growfs -m 30 /home
利用inode刪除文件
在這裏在擴展一個知識點,當你有在文件系統裏建立了一個帶特殊符號的文件時,直接用文件名是沒法刪除的,在這裏就來測試一下。
[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.
怎麼辦,這裏能夠經過2種方式刪除
第一種,根據系統提示用rm ./-test.jldfa進行刪除
第二種,利用inode號進行刪除
[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
能夠看到文件已經刪除了。