標籤:linux 檔案系統 inode 辛星
要說inode,還得首先從硬碟的物理格式說起,硬碟的最小儲存單位是扇區,也就是sector,每個扇區儲存512個位元組。而一般檔案系統都會有自己的最小讀寫單位,它就是block,一般可以有1KB、2KB、4KB等幾種,現在比較常見的是4KB的,也就是連續的八個sector組成一個block。
檔案的具體資料是儲存在block中的,於是我們想找到這些block,就需要儲存它們的元資訊啦,於是就有了inode,也有人稱為索引節點,我們可以用stat filename 的方式來查看一個檔案的inode資訊,它主要包含檔案的位元組數、檔案的UID、檔案的GID、檔案的讀寫執行許可權、檔案的時間戳記、檔案的連結數和檔案的block的位置。值得注意的是每個檔案都必須有一個inode,因此有可能發生inode用光的情況,如果此時的磁碟還未存滿,那麼也無法在磁碟上重新建立檔案了。我們可以用ls 的-i參數來查看具體的inode值。
因為inode中儲存了一定的資料資訊,因此inode也需要佔據一定的磁碟空間,在格式化硬碟的時候,作業系統自動將硬碟分成兩個地區,一個是資料區,一個是inode區。每個inode節點的大小,一般是128位元組或256位元組。而inode節點的總數,它是在格式化的時候就已經給出了,一般沒1KB或者2KB就設定一個inode。
在*nix系統中,目錄也是一種檔案,目錄的結構也很簡單,它就是一系列目錄項的列表,它由兩部分組成:所包含的檔案名稱,以及該檔案名稱對應的inode號碼。而且每個目錄在被建立時,會預設產生兩個目錄項.和.. 前者的inode號碼就是目前的目錄的inode號碼,等同於目前的目錄的永久連結,而後者的inode號碼就是目前的目錄的父目錄的inode號碼,等同於父目錄的永久連結,因此,任何一個目錄的永久連結總數,總是等於2加上他的子目錄總數,這裡的子目錄是包含隱藏目錄的,這裡的2就是父目錄對其的永久連結和目前的目錄下的.永久連結。
如果源檔案與目標檔案都指向同一個inode,那麼他們就是互為永久連結,而inode資訊中有一項叫做連結數,它記錄指向該inode的檔案名稱總數,如果我們刪除一個檔案名稱,則inode節點中的連結數會減少1,當這個值減少為0的時候,系統會收回這個inode號碼,以及其所對應的block地區。
如果檔案名稱包含特殊字元而難以刪除時,我們可以直接刪除其inode值來刪除檔案。如果檔案被移動或者重新命名的時候,只是改變檔案名稱,不影響inode號碼。當我們開啟一個檔案之後,系統就會用inode來識別該檔案了,它不再考慮檔案名稱,因此系統無法從inode來得到檔案名稱,但是可以從檔案名稱來找到inode。
辛星淺析Linux中的inode