Linux中的檔案i節點

2021-08-13 19:43:54 字數 2418 閱讀 2814

linux檔案系統是linux系統的心臟部分,提供了層次結構的目錄和檔案。檔案系統將磁碟空間劃分為每1024個位元組一組,稱為塊(也有用512位元組為一塊的,如:scoxenix)。編號從0到整個磁碟的最大塊數。

全部塊可劃分為四個部分,塊0稱為引導塊,檔案系統不用該塊;塊1稱為專用塊,專用塊含有許多資訊,其中有磁碟大小和全部塊的其他兩部分的大小。從塊2開始是i節點表,i節點表中含有i節點,表的塊數是可變的,後面將做討論。i節點表之後是空閒儲存塊(資料儲存塊),可用於存放檔案內容。

檔案的邏輯結構和物理結構是十分不同的,邏輯結構是使用者敲入cat命令後所看到的檔案,使用者可得到表示檔案內容的字元流。物理結構是檔案實際上如何存放在磁碟上的儲存格式。使用者認為自己的檔案是邊疆的字元流,但實際上檔案可能並不是以邊疆的方式存放在磁碟上的,長於一塊的檔案通常將分散地存放在盤上。然而當使用者訪問檔案時,linux檔案系統將以正確的順序取出各塊,給使用者提供檔案的邏輯結構。

當然,在linux系統的某處一定會有乙個表,告訴檔案系統如何將物理結構轉換為邏輯結構。這就涉及到i節點了。i節點是乙個64位元組長的表,含有有關乙個檔案的資訊,其中有檔案大小、檔案所有者、檔案訪問許可方式,以及檔案為普通檔案、目錄檔案還是特別檔案等。在i節點中最重要的一項是磁碟位址表。

該表中有13個塊號。前10個塊號是檔案前10塊的存放位址。這10個塊號能給出乙個至多10塊長的檔案的邏輯結構,檔案將以塊號在磁碟位址表中出現的順序依次取得相應的塊。當檔案長於10塊時又怎樣呢?磁碟位址表中的第11項給出乙個塊號,這個塊號指出的塊中含有256個塊號,至此,這種方法滿足了至多長於266塊的檔案(272384位元組)。如果檔案大於266塊,磁碟位址表的第12項給出乙個塊號,這個塊號指出的塊中含有256個塊號,這256個塊號的每乙個塊號又指出一塊,塊中含256個塊號,這些塊號才用於取檔案的內容。磁碟位址中和第13項索引定址方式與第12項類似,只是多一級間接索引。

這樣,在linux系統中,檔案的最大長度是16842762塊,即17246988288位元組,有幸是linux系統對檔案的最大長度(一般為1到2m位元組)加了更實際的限制,使使用者不會無意中建立乙個用完整個磁碟區所有塊的檔案。

inode

提到inode,我們不得不先介紹硬碟的整體結構。硬碟中包含多個硬碟碟片,硬碟碟片為圓形,每個硬碟碟片都有乙個可以讀寫的磁頭(head),將這個磁頭固定,使硬碟碟片旋轉一周,所走軌跡就是磁軌(track)。硬碟內所有碟片的相同磁軌號的集合成為磁柱(cylinder)。每一磁軌被劃分成許多區域,每個區域叫乙個扇區(sector)。扇區是硬碟的最小儲存物理量,乙個扇區的儲存容量大約是512位元組(約0.5k)。

知道了硬碟的大體結構之後,再來談談怎麼進行硬碟分割槽。進行硬碟分割的最小單位是磁柱,分割完之後自然就是格式化(format)。在linux中進行格式化必須考慮block與inode,block還好理解,它是磁碟可以記錄的最小單位,是由數個扇區組成,所以大小通常為n*512bytes,例如4k。

那麼inode是什麼呢block是記錄檔案內容的區域,inode則是記錄該檔案的屬性及其放置在哪個block之內的資訊。所以,每個檔案都會占用乙個inode。當linux系統要查詢某個檔案時,它會先搜尋inode table找到這個檔案的屬性及資料存放地點,然後再查詢資料存放的block進而將資料取出。inode數量在一開始已被設定好,其設定方式通常是"硬碟大小/乙個容量",這個容量比block大一些較佳,例如剛才將block設為4k,那麼這個容量可以設為8k左右。所以,一塊1gb的硬碟如果以8k 大小劃分它的inode數,則會有131072個inode。乙個inode的大小為128byte,這樣,我們就可以清楚地知道,乙個分割槽被格式化為乙個檔案系統之後,基本上它一定會有inode table與資料區域兩大塊,乙個用來記錄檔案的屬性資訊與該檔案存放的block塊,乙個用來記錄檔案的內容。

建立乙個檔案後,會同時建立乙個inode和乙個block,inode存放的是檔案的屬性資訊,但是不包括檔名,並存放所對應資料所在的block塊的位址的指標;block存放檔案的資料,每個block最多存放乙個檔案,而當乙個block存放不下的情況下,會占用下乙個block。

linux裡檔案的檔名、檔案屬性、檔案內容是分別儲存的:檔名存放在目錄項(即dentry)中,檔案屬性存放在inode中,一般情況下,每個inode占用128bity磁碟空間,檔案內容存放在資料塊中。

block塊可以用mkfs.ext3 -b來制定快的大小,每個block塊最多可存放乙個檔案,所以一般block塊的大小設定要根據我們伺服器的應用了設定,如果這個伺服器較多用來存放一些多的小檔案,那就可以把block塊的大小設定的小一些,不至於浪費空間,而當存放的都是大資料時就需要把block設定的大些,這樣可以減少對磁碟block的讀取次數,也可以減少inode的記錄負擔。

block越大,inode越少,適合儲存大檔案的檔案系統;block越小,inode越多,適合儲存檔案多而小的檔案系統。

系統執行時,inode和block會在修改後記憶體與磁碟做乙個同步,我們用ls -li列出來的內容這是記憶體中的暫存,所以有時候系統非正常的關機會導致block和inode的不同步問題。

Linux利用i節點刪除亂碼檔案

linux刪除亂碼檔案 當檔名為亂碼的時候,無法通過鍵盤輸入檔名,所以在終端下就不能直接利用rm,mv等命令管理檔案了。但是我們知道每個檔案都有乙個i節點號,我們可以考慮通過i節點號來管理檔案。首先,我們要取得檔案的i節點號。這個可以通過ls i選項獲得得,也可以通過ll i 來獲得。root lo...

Linux 檔案系統基礎 塊 i節點

linux檔案系統是linux系統的心臟部分,提供了層次結構的目錄和檔案。檔案系統將磁碟空間劃分為每1024個位元組一組,稱為塊 也有用512位元組為一塊的,如 scoxenix 編號從0到整個磁碟的最大塊數。全部塊可劃分為四個部分,塊0稱為引導塊,檔案系統不用該塊 塊1稱為專用塊,專用塊含有許多資...

Linux 檔案系統基礎 塊 i節點

linux檔案系統是linux系統的心臟部分,提供了層次結構的目錄和檔案。檔案系統將磁碟空間劃分為每1024個位元組一組,稱為塊 也有用512位元組為一塊的,如 scoxenix 編號從0到整個磁碟的最大塊數。全部塊可劃分為四個部分,塊0稱為引導塊,檔案系統不用該塊 塊1稱為專用塊,專用塊含有許多資...