帶你從新認識Linux系統的inode

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

帶你從新認識Linux系統的inode

文件系統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

能夠看到文件已經刪除了。

相關文章
相關標籤/搜索