詳解Inode

月黑風高人不善發表於2019-05-19

詳解inode

索引節點(inode)

什麼是inode:檔案儲存在硬碟上,硬碟最小單位為扇區,每個扇區大小為512位元組

系統提高硬碟讀取效率是一次連續讀取多個扇區,而多個扇區整合一個塊(block)

塊就是檔案存取最小單位,一個塊大小4k,而檔案屬性、建立時間、許可權、所佔塊大小、數量等這些資訊即為inode資訊

所以硬碟分割槽都有一個對應inode

inode中資訊包括:

檔案型別、許可權、UID、GID

連結數

檔案大小和不同的時間戳

指向磁碟上檔案的資料塊指標

有關檔案的資料

Inode特點

  • 每個inode 大小均固定為128 bytes (新的ext4 與xfs 可設定到256 bytes);
  • 每個檔案都僅會佔用一個inode 而已;
  • 承上,因此檔案系統能夠建立的檔案數量與inode 的數量有關;
  • 系統讀取檔案時需要先找到inode,並分析inode 所記錄的許可權與使用者是否符合,若符合才能夠開始實際讀取 block 的內容

 

使用命令:ls -i/ll -i

 

 

Inode表結構如下圖:

 

 

 

從上圖inode 結構表可以算出一下表結構圖

 

 

inode和三個檔案管理命令關係 

cp和inode

分配一個空閒的inode號,在inode表中生成新條目

在目錄中建立一個目錄項,將名稱與inode編號關聯

拷貝資料生成新的檔案

rm 和inode:

連結數遞減,從而釋放的inode號可以被重用

把資料塊放在空閒列表中

刪除目錄項

資料實際上不會馬上被刪除,但當另一個檔案使用資料塊時將被覆蓋

mv和inode

1、如果mv命令的目標和源在相同的檔案系統,作為mv 命令

用新的檔名建立對應新的目錄項

刪除舊目錄條目對應的舊的檔名

不影響inode表(除時間戳)或磁碟上的資料位置:沒有資料被移動!

、如果目標和源在一個不同的檔案系統, mv相當於cp和rm

 檢視磁碟inode和使用量

 

結論:影響磁碟空間可能是檔案大小和節點編號

  • 一個檔案系統物件可以有多個名字,具有硬連結關係的檔案系統物件名字具有相同的inode號碼,彼此是平等的。即首個被建立的檔案並沒有特殊的地位。這與符號連結不同。一個符號連結檔案有自己的inode,符號連結檔案的內容是它所指向的檔案的名字。因此刪除符號連結所指向的檔案,將導致這個符號連結檔案在訪問時報錯。
  • 刪除一個檔案或目錄,實際上是把它的inode的連結數減1。這並不影響指向此inode的別的硬連結。
  • 一個inode如果沒有硬連結,此時inode的連結數為0,檔案系統將回收該inode所指向的儲存塊,並回收該inode自身。
  • 從一個inode,通常是無法確定是用哪個檔名查到此inode號碼的。開啟一個檔案後,作業系統實際上就拋掉了檔名,只保留了inode號碼來訪問檔案的內容。庫函式getcwd()用來查詢當前工作目錄的絕對路徑名。其實現是從當前工作目錄的inode逐級查詢其上級目錄的inode,最後拼出整個絕對路徑的名字。
  • 歷史上,對目錄的硬連結是可能的。這可以使目錄結構成為一個有向圖,而不是通常的目錄樹的有向無環圖。一個目錄甚至可以是自身的父目錄。現代檔案系統一般禁止這些混淆狀態,只有根目錄保持了特例:根目錄是自身的父目錄。ls /..就是根目錄的內容。
  • 一個檔案或目錄在檔案系統內部移動時,其inode號碼不變。檔案系統碎片整理可能會改變一個檔案的物理儲存位置,但其inode號碼不變。非UNIX的FAT及其派生的檔案系統是無法實現inode不變這一特點。
  • inode檔案系統中安裝新庫十分容易。當一些程式正在使用一個庫時,其它程式可以替換該庫檔名字的inode號碼指向新建立的inode,隨後對該庫的訪問都被自動引導到新inode所指向的新的庫檔案的內容。這減少了替換庫時重啟系統的需要。而舊的inode的連結數已經為0,在使用舊庫的程式結束後,舊的inode與舊庫檔案會被系統自動回收。

 

參考-馬哥教育《linux-檔案管理》