共計 2715 個字符,預計需要花費 7 分鐘才能閱讀完成。
今天丸趣 TV 小編給大家分享一下 linux 中 i 節點指的是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
在 linux 中,i 節點時一個 64 字節長的表;i 節點中含有有關一個文件的信息,其中有文件大小、文件所有者、文件存取許可方式,以及文件為普通文件、目錄文件還是特別文件等,在 i 節點中最重要的一項是磁盤地址表。
本教程操作環境:linux7.3 系統、Dell G3 電腦。
linux 中 i 節點
i 節點是一個 64 字節長的表,含有有關一個文件的信息,其中有文件大小、文件所有者、文件存取許可方式,以及文件為普通文件、目錄文件還是特別文件等。
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 節點指的是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。