Linux下對inode和塊的理解

2022-07-17 03:51:07 字數 2399 閱讀 2185

基本概念

首先講下inode和塊的基本概念。在linux系統中,檔案由元資料和資料塊組成。資料塊就是多個連續性的扇區(sector),扇區是檔案儲存的最小單位(每個512位元組)。塊(block)的大小,最常見的是4kb,也就是連續8個sector組成,儲存檔案資料和目錄資料。而元資料用來記錄檔案的建立者、建立日期、大小等,這種儲存檔案元資料資訊的區域叫做inode,即索引節點。

由於inode也是用來儲存檔案相關屬性資訊的,所以也會消耗硬碟空間。具體包含的資訊有inode號,檔案的位元組數、user id、group id、讀、寫、執行許可權、時間戳(共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間)、鏈結數(軟硬鏈結)、資料block的位置,注意沒有檔名。

在硬碟格式化的時候,作業系統就會將硬碟分為兩個區,即資料區和inode區。每個inode節點的大小一般為128b或者256b,inode的總數在格式化檔案系統的時候就已經確定。

另外還有幾個概念了解一下:

inode bitmap:即inode點陣圖,用二進位制的方式記錄了inode的使用情況, 比如inode是否空閒等。

block bitmap:即塊點陣圖,同inode bitmap,用二進位制方式記錄了塊的使用情況。當查詢或建立檔案時,會掃瞄此位圖來尋找空閒的inode號對應的塊。

super block:超級塊包含了該硬碟或分割槽上的檔案系統的整體資訊,如檔案系統的大小等。

dentry:在核心中起到了連線不同的檔案物件inode的作用,進而起到了維護檔案系統目錄樹的作用。dentry是乙個純粹的記憶體結構,由檔案系統在提供檔案訪問的過程中在記憶體中直接建立。dentry中包含了檔名,檔案的inode號等資訊。

下圖為檔案系統inode區block區圖:

檔案的查詢、建立、刪除原理

接下來對檔案的查詢、建立、刪除原理三個方面來對inode和塊的理解。

檔案的查詢:比如要查詢/var/log/message

檔案的建立:比如要建立/backup/test.txt(前提backup目錄存在)

檔案的刪除:刪除/backup/test.txt

查詢

首先根目錄(目錄也是個檔案,不是容器!也可以理解為路徑的對映表)會自引用。找到inode表中對應的條目。(暫且把inode表中inode號和其對應的塊資訊成為條目)

inode表中對應的資訊指向根目錄對應的塊,其中有var目錄對應的資訊和inode號。

系統根據var目錄inode號回頭找到inode表中var目錄其對應的條目。

根據var目錄對應的塊資訊找到對應的塊,其中有log目錄對應的資訊和inode號。

系統又根據log目錄inode號在inode表中找到其對應的條目。

根據log目錄對應的塊資訊找到對應的塊,其中有messages檔案。

根據messages檔案的inode號在inode表中找到其對應的條目。

最後系統根據messages對應的條目資訊告訴我們messages檔案對應了多少的塊,最後給我們呈現的就是所看到的資料。

建立

首先掃瞄inode點陣圖,找空閒的inode號,找到之後占用。

根目錄自引用找到inode表中對應的條目,並根據條目找到對應的塊。

依據根目錄對應的塊中backup目錄對應的inode號,回頭找到inode表中條目。

inode表中條目又找到對應的塊,在這個塊的dentry中新建了乙個檔案test.txt。

然後在最開始掃瞄占用的inode號給到此test.txt檔案。

當要存資料給test.txt檔案時,會進行如下:

系統掃瞄塊點陣圖(加速查詢磁碟空閒塊,記錄是否空閒等),找到空閒塊,分配大於資料大小的塊,最後再**(避免磁碟碎片)。比如要建立10k大小的test.txt檔案,乙個塊4k,只需要3個塊,系統分配4個或者多於,最後再去把這多餘的塊分配到空閒塊中等待使用。

刪除

當要刪除乙個檔案時,其實就是把其使用的block點陣圖標記為空閒,inode點陣圖的相關位置成空,相當於不被占用,系統就認為此檔案刪除。但是資料還在,在下次建立檔案時,就可覆蓋原已清空block點陣圖和inode點陣圖的檔案的資料。

檔案粉粹也只是使用一些隨機資料填充進原來檔案的資料塊中,導致檔案難以恢復。

以上

Linux下的inode記錄

檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組成的 塊 是檔案訪問的最小單位。塊 的大小,最常見的是4...

Linux下的inode記錄

檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組成的 塊 是檔案訪問的最小單位。塊 的大小,最常見的是4...

Linux下的inode記錄

inode的內容 inode包含檔案的元資訊,具體來說有以下內容 檔案的位元組數 檔案擁有者的user id 檔案的group id 檔案的讀 寫 執行許可權 檔案的時間戳,共有三個 ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。鏈結...