天天看點

linux存儲--inode與block詳解(七)基本概念檔案的查找、建立、删除原理

基本概念

首先講下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的總數在格式化檔案系統的時候就已經确定。

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

  • node Bitmap:即inode位圖,用二進制的方式記錄了inode的使用情況, 比如inode是否空閑等。
  • Block Bitmap:即塊位圖,同Inode Bitmap,用二進制方式記錄了塊的使用情況。當查找或建立檔案時,會掃描此位圖來尋找空閑的inode号對應的塊。
  • super block:超級塊包含了該硬碟或分區上的檔案系統的整體資訊,如檔案系統的大小等。
  • dentry:在核心中起到了連接配接不同的檔案對象inode的作用,進而起到了維護檔案系統目錄樹的作用。dentry是一個純粹的記憶體結構,由檔案系統在提供檔案通路的過程中在記憶體中直接建立。dentry中包含了檔案名,檔案的inode号等資訊。

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

linux存儲--inode與block詳解(七)基本概念檔案的查找、建立、删除原理

檔案的查找、建立、删除原理

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

  • 檔案的查找:比如要查找/var/log/message
  • 檔案的建立:比如要建立/backup/test.txt(前提backup目錄存在)
  • 檔案的删除:删除/backup/test.txt

查找

linux存儲--inode與block詳解(七)基本概念檔案的查找、建立、删除原理
  1. 首先根目錄(目錄也是個檔案,不是容器!也可以了解為路徑的映射表)會自引用。找到inode表中對應的條目。(暫且把inode表中inode号和其對應的塊資訊成為條目)
  2. inode表中對應的資訊指向根目錄對應的塊,其中有var目錄對應的資訊和inode号。
  3. 系統根據var目錄inode号回頭找到inode表中var目錄其對應的條目。
  4. 根據var目錄對應的塊資訊找到對應的塊,其中有log目錄對應的資訊和inode号。
  5. 系統又根據log目錄inode号在inode表中找到其對應的條目。
  6. 根據log目錄對應的塊資訊找到對應的塊,其中有messages檔案。
  7. 根據messages檔案的inode号在inode表中找到其對應的條目。
  8. 最後系統根據messages對應的條目資訊告訴我們messages檔案對應了多少的塊,最後給我們呈現的就是所看到的資料。

建立

linux存儲--inode與block詳解(七)基本概念檔案的查找、建立、删除原理
  1. 首先掃描inode位圖,找空閑的inode号,找到之後占用。
  2. 根目錄自引用找到inode表中對應的條目,并根據條目找到對應的塊。
  3. 依據根目錄對應的塊中backup目錄對應的inode号,回頭找到inode表中條目。
  4. inode表中條目又找到對應的塊,在這個塊的dentry中建立了一個檔案test.txt。
  5. 然後在最開始掃描占用的inode号給到此test.txt檔案。

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

系統掃描塊位圖(加速查找磁盤空閑塊,記錄是否空閑等),找到空閑塊,配置設定大于資料大小的塊,最後再回收(避免磁盤碎片)。比如要建立10k大小的test.txt檔案,一個塊4k,隻需要3個塊,系統配置設定4個或者多于,最後再去把這多餘的塊配置設定到空閑塊中等待使用。

删除

當要删除一個檔案時,其實就是把其使用的block位圖示記為空閑,inode位圖的相關位置成空,相當于不被占用,系統就認為此檔案删除。但是資料還在,在下次建立檔案時,就可覆寫原已清空block位圖和inode位圖的檔案的資料。

檔案粉粹也隻是使用一些随機資料填充進原來檔案的資料塊中,導緻檔案難以恢複。

原文連結:https://www.cnblogs.com/whych/p/9315723.html