詳解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-檔案管理》