自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux的EXT4 文件系統(tǒng)的歷史、特性以及更優(yōu)實(shí)踐

系統(tǒng) Linux
讓我們大概地從 EXT4 的歷史、特性以及最佳實(shí)踐這幾個(gè)方面來學(xué)習(xí)它和之前的幾代 EXT 文件系統(tǒng)有何不同。

[[196620]]

讓我們大概地從 EXT4 的歷史、特性以及***實(shí)踐這幾個(gè)方面來學(xué)習(xí)它和之前的幾代 EXT 文件系統(tǒng)有何不同。

在之前關(guān)于 Linux 文件系統(tǒng)的文章里,我寫過一篇 Linux 文件系統(tǒng)介紹 和一些更高級(jí)的概念例如 一切都是文件?,F(xiàn)在我想要更深入地了解 EXT 文件系統(tǒng)的特性的詳細(xì)內(nèi)容,但是首先讓我們來回答一個(gè)問題,“什么樣才算是一個(gè)文件系統(tǒng) ?” 一個(gè)文件系統(tǒng)應(yīng)該涵蓋以下所有特點(diǎn):

  1. 數(shù)據(jù)存儲(chǔ): 對(duì)于任何一個(gè)文件系統(tǒng)來說,一個(gè)最主要的功能就是能夠被當(dāng)作一個(gè)結(jié)構(gòu)化的容器來存儲(chǔ)和獲取數(shù)據(jù)。
  2. 命名空間: 命名空間是一個(gè)提供了用于命名與組織數(shù)據(jù)的命名規(guī)則和數(shù)據(jù)結(jié)構(gòu)的方法學(xué)。
  3. 安全模型: 一個(gè)用于定義訪問權(quán)限的策略。
  4. API: 操作這個(gè)系統(tǒng)的對(duì)象的系統(tǒng)功能調(diào)用,這些對(duì)象諸如目錄和文件。
  5. 實(shí)現(xiàn): 能夠?qū)崿F(xiàn)以上幾點(diǎn)的軟件。

本文內(nèi)容的討論主要集中于上述幾點(diǎn)中的***項(xiàng),并探索為一個(gè) EXT 文件系統(tǒng)的數(shù)據(jù)存儲(chǔ)提供邏輯框架的元數(shù)據(jù)結(jié)構(gòu)。

EXT 文件系統(tǒng)歷史

雖然 EXT 文件系統(tǒng)是為 Linux 編寫的,但其真正起源于 Minix 操作系統(tǒng)和 Minix 文件系統(tǒng),而 Minix 最早發(fā)布于 1987,早于 Linux 5 年。如果我們從 EXT 文件系統(tǒng)大家族的 Minix 起源來觀察其歷史與技術(shù)發(fā)展那么理解 EXT4 文件系統(tǒng)就會(huì)簡(jiǎn)單得多。

Minix

當(dāng) Linux Torvalds 在寫最初的 Linux 內(nèi)核的時(shí)候,他需要一個(gè)文件系統(tǒng)但是他又不想自己寫一個(gè)。于是他簡(jiǎn)單地把 Minix 文件系統(tǒng) 加了進(jìn)去,這個(gè) Minix 文件系統(tǒng)是由 Andrew S. Tanenbaum 寫的,同時(shí)它也是 Tanenbaum 的 Minix 操作系統(tǒng)的一部分。Minix 是一個(gè)類 Unix 風(fēng)格的操作系統(tǒng),最初編寫它的原因是用于教育用途。Minix 的代碼是自由可用的并有適當(dāng)?shù)脑S可協(xié)議,所以 Torvalds 可以把它用 Linux 的最初版本里。

Minix 有以下這些結(jié)構(gòu),其中的大部分位于生成文件系統(tǒng)的分區(qū)中:

  • 引導(dǎo)扇區(qū) 是硬盤安裝后的***個(gè)扇區(qū)。這個(gè)引導(dǎo)塊包含了一個(gè)非常小的引導(dǎo)記錄和一個(gè)分區(qū)表。
  • 每一個(gè)分區(qū)的***個(gè)塊都是一個(gè)包含了元數(shù)據(jù)的超級(jí)塊(superblock) ,這些元數(shù)據(jù)定義了其他的文件系統(tǒng)結(jié)構(gòu)并將其定位于物理硬盤的具體分區(qū)上。
  • 一個(gè) inode 位圖塊 決定了哪些 inode 是在使用中的,哪一些是未使用的。
  • inode 在硬盤上有它們自己的空間。每一個(gè) inode 都包含了一個(gè)文件的信息,包括其所處的數(shù)據(jù)塊的位置,也就是該文件所處的區(qū)域。
  • 一個(gè) 區(qū)位圖 用于保持追蹤數(shù)據(jù)區(qū)域的使用和未使用情況。
  • 一個(gè) 數(shù)據(jù)區(qū), 這里是數(shù)據(jù)存儲(chǔ)的地方。

對(duì)上述了兩種位圖類型來說,一個(gè)位(bit)表示一個(gè)指定的數(shù)據(jù)區(qū)或者一個(gè)指定的 inode。 如果這個(gè)位是 0 則表示這個(gè)數(shù)據(jù)區(qū)或者這個(gè) inode 是未使用的,如果是 1 則表示正在使用中。

那么,inode 又是什么呢 ? 就是 index-node(索引節(jié)點(diǎn))的簡(jiǎn)寫。 inode 是位于磁盤上的一個(gè) 256 字節(jié)的塊,用于存儲(chǔ)和該 inode 對(duì)應(yīng)的文件的相關(guān)數(shù)據(jù)。這些數(shù)據(jù)包含了文件的大小、文件的所有者和所屬組的用戶 ID、文件模式(即訪問權(quán)限)以及三個(gè)時(shí)間戳用于指定:該文件***的訪問時(shí)間、該文件的***修改時(shí)間和該 inode 中的數(shù)據(jù)的***修改時(shí)間。

同時(shí),這個(gè) inode 還包含了位置數(shù)據(jù),指向了其所對(duì)應(yīng)的文件數(shù)據(jù)在硬盤中的位置。在 Minix 和 EXT 1-3 文件系統(tǒng)中,這是一個(gè)數(shù)據(jù)區(qū)和塊的列表。Minix 文件系統(tǒng)的 inode 支持 9 個(gè)數(shù)據(jù)塊,包括 7 個(gè)直接數(shù)據(jù)塊和 2 個(gè)間接數(shù)據(jù)塊。如果你想要更深入的了解,這里有一個(gè)優(yōu)秀的 PDF 詳細(xì)地描述了 Minix 文件系統(tǒng)結(jié)構(gòu) 。同時(shí)你也可以在維基百科上對(duì) inode 指針結(jié)構(gòu) 做一個(gè)快速了解。

EXT

原生的 EXT 文件系統(tǒng) (意即擴(kuò)展的(extended)) 是由 Rémy Card 編寫并于 1992 年與 Linux 一同發(fā)行。主要是為了克服 Minix 文件系統(tǒng)中的一些文件大小限制的問題。其中,最主要的結(jié)構(gòu)變化就是文件系統(tǒng)中的元數(shù)據(jù)。它基于 Unix 文件系統(tǒng) (UFS),其也被稱為伯克利快速文件系統(tǒng)(FFS)。我發(fā)現(xiàn)只有很少一部分關(guān)于 EXT 文件系統(tǒng)的發(fā)行信息是可以被確證的,顯然這是因?yàn)槠浯嬖谥鴩?yán)重的問題,并且它很快地被 EXT2 文件系統(tǒng)取代了。

EXT2

EXT2 文件系統(tǒng) 就相當(dāng)?shù)爻晒Γ?Linux 發(fā)行版中存活了多年。它是我在 1997 年開始使用 Red Hat Linux 5.0 時(shí)接觸的***個(gè)文件系統(tǒng)。實(shí)際上,EXT2 文件系統(tǒng)有著和 EXT 文件系統(tǒng)基本相同的元數(shù)據(jù)結(jié)構(gòu)。然而 EXT2 更高瞻遠(yuǎn)矚,因?yàn)槠湓獢?shù)據(jù)結(jié)構(gòu)之間留有很多供將來使用的磁盤空間。

和 Minix 類似,EXT2 也有一個(gè)引導(dǎo)扇區(qū) ,它是硬盤安裝后的***個(gè)扇區(qū)。它包含了非常小的引導(dǎo)記錄和一個(gè)分區(qū)表。接著引導(dǎo)扇區(qū)之后是一些保留的空間,它填充了引導(dǎo)記錄和硬盤驅(qū)動(dòng)器上的***個(gè)分區(qū)(通常位于下一個(gè)柱面)之間的空間。GRUB2 - 也可能是 GRUB1 - 將此空間用于其部分引導(dǎo)代碼。

每個(gè) EXT2 分區(qū)中的空間被分為柱面組(cylinder group),它允許更精細(xì)地管理數(shù)據(jù)空間。 根據(jù)我的經(jīng)驗(yàn),每一組大小通常約為 8MB。 下面的圖 1 顯示了一個(gè)柱面組的基本結(jié)構(gòu)。 柱面中的數(shù)據(jù)分配單元是塊,通常大小為 4K。

 

圖 1: EXT 文件系統(tǒng)中的柱面組的結(jié)構(gòu)

柱面組中的***個(gè)塊是一個(gè)超級(jí)塊(superblock),它包含了元數(shù)據(jù),定義了其它文件系統(tǒng)的結(jié)構(gòu)并將其定位于物理硬盤的具體分區(qū)上。分區(qū)中有一些柱面組還會(huì)有備用超級(jí)塊,但并不是所有的柱面組都有。我們可以使用例如 dd 等磁盤工具來拷貝備用超級(jí)塊的內(nèi)容到主超級(jí)塊上,以達(dá)到修復(fù)損壞的超級(jí)塊的目的。雖然這種情況不會(huì)經(jīng)常發(fā)生,但是在幾年前我的一個(gè)超級(jí)塊損壞了,我就是用這種方法來修復(fù)的。幸好,我很有先見之明地使用了 dumpe2fs 命令來備份了我的系統(tǒng)上的分區(qū)描述符信息。

以下是 dumpe2fs 命令的一部分輸出。這部分輸出主要是超級(jí)塊上包含的一些元數(shù)據(jù),同時(shí)也是文件系統(tǒng)上的前兩個(gè)柱面組的數(shù)據(jù)。

  1. # dumpe2fs /dev/sda1 
  2. Filesystem volume name:   boot  
  3. Last mounted on:          /boot  
  4. Filesystem UUID:          79fc5ed8-5bbc-4dfe-8359-b7b36be6eed3  
  5. Filesystem magic number:  0xEF53  
  6. Filesystem revision #:    1 (dynamic)  
  7. Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir nlink extra_isize  
  8. Filesystem flags:         signed_directory_hash  
  9. Default mount options:    user_xattr acl  
  10. Filesystem state:         clean  
  11. Errors behavior:          Continue  
  12. Filesystem OS type:       Linux  
  13. Inode count:              122160  
  14. Block count:              488192  
  15. Reserved block count:     24409  
  16. Free blocks:              376512  
  17. Free inodes:              121690  
  18. First block:              0  
  19. Block size:               4096  
  20. Fragment size:            4096  
  21. Group descriptor size:    64  
  22. Reserved GDT blocks:      238  
  23. Blocks per group:         32768  
  24. Fragments per group:      32768  
  25. Inodes per group:         8144  
  26. Inode blocks per group:   509  
  27. Flex block group size:    16  
  28. Filesystem created:       Tue Feb  7 09:33:34 2017  
  29. Last mount time:          Sat Apr 29 21:42:01 2017  
  30. Last write time:          Sat Apr 29 21:42:01 2017  
  31. Mount count:              25  
  32. Maximum mount count:      -1  
  33. Last checked:             Tue Feb  7 09:33:34 2017  
  34. Check interval:           0 (<none>)  
  35. Lifetime writes:          594 MB  
  36. Reserved blocks uid:      0 (user root)  
  37. Reserved blocks gid:      0 (group root)  
  38. First inode:              11  
  39. Inode size:               256  
  40. Required extra isize:     32  
  41. Desired extra isize:      32  
  42. Journal inode:            8  
  43. Default directory hash:   half_md4  
  44. Directory Hash Seed:      c780bac9-d4bf-4f35-b695-0fe35e8d2d60  
  45. Journal backup:           inode blocks  
  46. Journal features:         journal_64bit  
  47. Journal size:             32M  
  48. Journal length:           8192  
  49. Journal sequence:         0x00000213  
  50. Journal start:            0  
  51. Group 0: (Blocks 0-32767)  
  52.  Primary superblock at 0, Group descriptors at 1-1  
  53.  Reserved GDT blocks at 2-239  
  54.  Block bitmap at 240 (+240)  
  55.  Inode bitmap at 255 (+255)  
  56.  Inode table at 270-778 (+270)  
  57.  24839 free blocks, 7676 free inodes, 16 directories  
  58.  Free blocks: 7929-32767  
  59.  Free inodes: 440, 470-8144  
  60. Group 1: (Blocks 32768-65535)  
  61.  Backup superblock at 32768, Group descriptors at 32769-32769  
  62.  Reserved GDT blocks at 32770-33007  
  63.  Block bitmap at 241 (bg #0 + 241)  
  64.  Inode bitmap at 256 (bg #0 + 256) 
  65.  Inode table at 779-1287 (bg #0 + 779)  
  66.  8668 free blocks, 8142 free inodes, 2 directories  
  67.  Free blocks: 33008-33283, 33332-33791, 33974-33975, 34023-34092, 34094-34104, 34526-34687, 34706-34723, 34817-35374, 35421-35844, 35935-36355, 36357-36863, 38912-39935, 39940-40570, 42620-42623, 42655, 42674-42687, 42721-42751, 42798-42815, 42847, 42875-42879, 42918-42943, 42975, 43000-43007, 43519, 43559-44031, 44042-44543, 44545-45055, 45116-45567, 45601-45631, 45658-45663, 45689-45695, 45736-45759, 45802-45823, 45857-45887, 45919, 45950-45951, 45972-45983, 46014-46015, 46057-46079, 46112-46591, 46921-47103, 49152-49395, 50027-50355, 52237-52255, 52285-52287, 52323-52351, 52383, 52450-52479, 52518-52543, 52584-52607, 52652-52671, 52734-52735, 52743-53247  
  68.  Free inodes: 8147-16288  
  69. Group 2: (Blocks 65536-98303)  
  70.  Block bitmap at 242 (bg #0 + 242)  
  71.  Inode bitmap at 257 (bg #0 + 257)  
  72.  Inode table at 1288-1796 (bg #0 + 1288)  
  73.  6326 free blocks, 8144 free inodes, 0 directories  
  74.  Free blocks: 67042-67583, 72201-72994, 80185-80349, 81191-81919, 90112-94207  
  75.  Free inodes: 16289-24432  
  76. Group 3: (Blocks 98304-131071) 
  77. <截?cái)?gt; 

每一個(gè)柱面組都有自己的 inode 位圖,用于判定該柱面組中的哪些 inode 是使用中的而哪些又是未被使用的。每一個(gè)柱面組的 inode 都有它們自己的空間。每一個(gè) inode 都包含了一個(gè)文件的相關(guān)信息,包括屬于該文件的數(shù)據(jù)塊的位置。而塊位圖紀(jì)錄了文件系統(tǒng)中的使用中和非使用中的數(shù)據(jù)塊。請(qǐng)注意,在上面的輸出中有大量關(guān)于文件系統(tǒng)的數(shù)據(jù)。在非常大的文件系統(tǒng)上,柱面組的數(shù)據(jù)可以多達(dá)數(shù)百頁(yè)的長(zhǎng)度。柱面組的元數(shù)據(jù)包括組中所有空閑數(shù)據(jù)塊的列表。

EXT 文件系統(tǒng)實(shí)現(xiàn)了數(shù)據(jù)分配策略以確保產(chǎn)生最少的文件碎片。減少文件碎片可以提高文件系統(tǒng)的性能。這些策略會(huì)在下面的 EXT4 中描述到。

我所遇見的關(guān)于 EXT2 文件系統(tǒng)***的問題是 fsck (文件系統(tǒng)檢查) 程序這一環(huán)節(jié)占用了很長(zhǎng)一段時(shí)間來定位和校準(zhǔn)文件系統(tǒng)中的所有的不一致性,從而導(dǎo)致在系統(tǒng)崩潰(crash)后其會(huì)花費(fèi)了數(shù)個(gè)小時(shí)來修復(fù)。有一次我的其中一臺(tái)電腦在崩潰后重新啟動(dòng)時(shí)共花費(fèi)了 28 個(gè)小時(shí)恢復(fù)磁盤,而且并且是在磁盤被檢測(cè)量只有幾百兆字節(jié)大小的情況下。

EXT3

EXT3 文件系統(tǒng)是應(yīng)一個(gè)目標(biāo)而生的,就是克服 fsck 程序需要完全恢復(fù)在文件更新操作期間發(fā)生的不正確關(guān)機(jī)而損壞的磁盤結(jié)構(gòu)所需的大量時(shí)間。它對(duì) EXT 文件系統(tǒng)的唯一新增功能就是 日志,它將提前記錄將對(duì)文件系統(tǒng)執(zhí)行的更改。 EXT3 的磁盤結(jié)構(gòu)的其余部分與 EXT2 中的相同。

除了同先前的版本一樣直接寫入數(shù)據(jù)到磁盤的數(shù)據(jù)區(qū)域外,EXT3 上的日志會(huì)將文件數(shù)據(jù)隨同元數(shù)據(jù)寫入到磁盤上的一個(gè)指定數(shù)據(jù)區(qū)域。一旦這些(日志)數(shù)據(jù)安全地到達(dá)硬盤,它就可以幾乎零丟失率地被合并或被追加到目標(biāo)文件上。當(dāng)這些數(shù)據(jù)被提交到磁盤上的數(shù)據(jù)區(qū)域上,這些日志就會(huì)隨即更新,這樣在日志中的所有數(shù)據(jù)提交之前,系統(tǒng)發(fā)生故障時(shí)文件系統(tǒng)將保持一致狀態(tài)。在下次啟動(dòng)時(shí),將檢查文件系統(tǒng)的不一致性,然后將仍保留在日志中的數(shù)據(jù)提交到磁盤的數(shù)據(jù)區(qū),以完成對(duì)目標(biāo)文件的更新。

日志功能確實(shí)降低了數(shù)據(jù)寫入性能,但是有三個(gè)可用于日志的選項(xiàng),允許用戶在性能和數(shù)據(jù)完整性、安全性之間進(jìn)行選擇。 我的個(gè)人更偏向于選擇安全性,因?yàn)槲业沫h(huán)境不需要大量的磁盤寫入活動(dòng)。

日志功能將失敗后檢查硬盤驅(qū)動(dòng)器所需的時(shí)間從幾小時(shí)(甚至幾天)減少到了幾分鐘。 多年來,我遇到了很多導(dǎo)致我的系統(tǒng)崩潰的問題。要詳細(xì)說的話恐怕還得再寫一篇文章,但這里需要說明的是大多數(shù)是我自己造成的,就比如不小心踢掉電源插頭。 幸運(yùn)的是,EXT 日志文件系統(tǒng)將啟動(dòng)恢復(fù)時(shí)間縮短到兩三分鐘。此外,自從我開始使用帶日志記錄的 EXT3,我從來沒有遇到丟失數(shù)據(jù)的問題。

EXT3 的日志功能可以關(guān)閉,然后其功能就等同于 EXT2 文件系統(tǒng)了。 該日志本身仍然是存在的,只是狀態(tài)為空且未使用。 只需在 mount 命令中使用文件系統(tǒng)類型參數(shù)來重新掛載即可指定為 EXT2。 你可以從命令行執(zhí)行此操作,但是具體還是取決于你正在使用的文件系統(tǒng),不過你也可以更改 /etc/fstab 文件中的類型說明符,然后重新啟動(dòng)。 我強(qiáng)烈建議不要將 EXT3 文件系統(tǒng)掛載為 EXT2 ,因?yàn)檫@會(huì)有丟失數(shù)據(jù)和增加恢復(fù)時(shí)間的潛在可能性。

EXT2 文件系統(tǒng)可以使用如下命令來通過日志升級(jí)到 EXT3 。

  1. tune2fs -j /dev/sda1 

/dev/sda1 表示驅(qū)動(dòng)器和分區(qū)的標(biāo)識(shí)符。同時(shí)要注意修改 /etc/fstab 中的文件系統(tǒng)類型標(biāo)識(shí)符并重新掛載分區(qū),或者重啟系統(tǒng)以確保修改生效。

EXT4

EXT4 文件系統(tǒng)主要提高了性能、可靠性和容量。為了提高可靠性,它新增了元數(shù)據(jù)和日志校驗(yàn)和。同時(shí)為了滿足各種關(guān)鍵任務(wù)要求,文件系統(tǒng)新增了納秒級(jí)別的時(shí)間戳,并在時(shí)間戳字段中添加了兩個(gè)高位來延緩時(shí)間戳的 2038 年問題 ,這樣 EXT4 文件系統(tǒng)至少可用到 2446 年。

在 EXT4 中,數(shù)據(jù)分配從固定塊改為擴(kuò)展盤區(qū)(extent)方式,擴(kuò)展盤區(qū)由硬盤驅(qū)動(dòng)器上的開始和結(jié)束位置來描述。這使得可以在單個(gè) inode 指針條目中描述非常長(zhǎng)的物理上連續(xù)的文件,這可以顯著減少描述大文件中所有數(shù)據(jù)的位置所需的指針數(shù)。其它在 EXT4 中已經(jīng)實(shí)施的分配策略可以進(jìn)一步減少碎片化。

EXT4 通過將新創(chuàng)建的文件散布在磁盤上,使其不會(huì)像早期的 PC 文件系統(tǒng)一樣全部聚集在磁盤起始位置,從而減少了碎片。文件分配算法嘗試在柱面組中盡可能均勻地散布文件,并且當(dāng)文件(由于太大)需要分段存儲(chǔ)時(shí),使不連續(xù)的文件擴(kuò)展盤區(qū)盡可能靠近同一文件中的其他部分,以盡可能減少磁頭尋道和電機(jī)旋轉(zhuǎn)等待時(shí)間。當(dāng)創(chuàng)建新文件或擴(kuò)展現(xiàn)有文件時(shí),使用其它策略來預(yù)先分配額外的磁盤空間。這有助于確保擴(kuò)展文件時(shí)不會(huì)自動(dòng)導(dǎo)致其分段。新文件不會(huì)緊挨這現(xiàn)有文件立即分配空間,這也可以防止現(xiàn)有文件的碎片化。

除了磁盤上數(shù)據(jù)的實(shí)際位置外,EXT4 使用諸如延遲分配的功能策略,以允許文件系統(tǒng)在分配空間之前收集到所有正在寫入磁盤的數(shù)據(jù),這可以提高數(shù)據(jù)空間連續(xù)的可能性。

較舊的 EXT 文件系統(tǒng)(如 EXT2 和 EXT3)可以作為 EXT4 進(jìn)行 mount ,以使其性能獲得較小的提升。但不幸的是,這需要關(guān)閉 EXT4 的一些重要的新功能,所以我建議不要這樣做。

自 Fedora 14 以來,EXT4 一直是 Fedora 的默認(rèn)文件系統(tǒng)。我們可以使用 Fedora 文檔中描述的 流程 將 EXT3 文件系統(tǒng)升級(jí)到 EXT4,但是由于仍然存留的之前的 EXT3 元數(shù)據(jù)結(jié)構(gòu),它的性能仍將受到影響。從 EXT3 升級(jí)到 EXT4 的***方法是備份目標(biāo)文件系統(tǒng)分區(qū)上的所有數(shù)據(jù),使用 mkfs 命令將空 EXT4 文件系統(tǒng)寫入分區(qū),然后從備份中恢復(fù)所有數(shù)據(jù)。

Inode

之前介紹過的 inode 是 EXT 文件系統(tǒng)中的元數(shù)據(jù)的關(guān)鍵組件。 圖 2 顯示了 inode 和存儲(chǔ)在硬盤驅(qū)動(dòng)器上的數(shù)據(jù)之間的關(guān)系。 該圖是單個(gè)文件的目錄和 inode,在這種情況下,可能會(huì)產(chǎn)生高度碎片化。 EXT 文件系統(tǒng)可以主動(dòng)地減少碎片,所以不太可能會(huì)看到有這么多間接數(shù)據(jù)塊或擴(kuò)展盤區(qū)的文件。 實(shí)際上,你在下面將會(huì)看到,EXT 文件系統(tǒng)中的碎片非常低,所以大多數(shù) inode 只使用一個(gè)或兩個(gè)直接數(shù)據(jù)指針,而不使用間接指針。

 

圖 2 :inode 存儲(chǔ)有關(guān)每個(gè)文件的信息,并使 EXT 文件系統(tǒng)能夠查找屬于它的所有數(shù)據(jù)。

inode 不包含文件的名稱。通過目錄項(xiàng)訪問文件,目錄項(xiàng)本身就是文件的名稱,并包含指向 inode 的指針。該指針的值是 inode 號(hào)。文件系統(tǒng)中的每個(gè) inode 都具有唯一的 ID 號(hào),但同一臺(tái)計(jì)算機(jī)上的其它文件系統(tǒng)(甚至是相同的硬盤驅(qū)動(dòng)器)中的 inode 可以具有相同的 inode 號(hào)。這對(duì) 硬鏈接 存在影響,但是這個(gè)討論超出了本文的范圍。

inode 包含有關(guān)該文件的元數(shù)據(jù),包括其類型和權(quán)限以及其大小。 inode 還包含 15 個(gè)指針的空位,用于描述柱面組數(shù)據(jù)部分中數(shù)據(jù)塊或擴(kuò)展盤區(qū)的位置和長(zhǎng)度。12 個(gè)指針提供對(duì)數(shù)據(jù)擴(kuò)展盤區(qū)的直接訪問,應(yīng)該足以滿足大多數(shù)文件的需求。然而,對(duì)于具有明顯分段的文件,需要以間接節(jié)點(diǎn)(node)的形式提供一些額外的容量——從技術(shù)上講,這些不是真正的“inode”,所以為了方便起見我在這里使用這個(gè)術(shù)語(yǔ)“節(jié)點(diǎn)(node)”。

間接節(jié)點(diǎn)是文件系統(tǒng)中的正常數(shù)據(jù)塊,它僅用于描述數(shù)據(jù)而不用于存儲(chǔ)元數(shù)據(jù),因此可以支持超過 15 個(gè)條目。例如,4K 的塊大小可以支持 512 個(gè) 4 字節(jié)的間接節(jié)點(diǎn),允許單個(gè)文件有 12(直接)+ 512(間接)= 524 個(gè)擴(kuò)展盤區(qū)。還支持雙重和三重間接節(jié)點(diǎn),但我們大多數(shù)人不太可能遇到需要那么多擴(kuò)展盤區(qū)的文件。

數(shù)據(jù)碎片

對(duì)于許多較舊的 PC 文件系統(tǒng),如 FAT(及其所有變體)和 NTFS,碎片一直是導(dǎo)致磁盤性能下降的重大問題。 碎片整理本身就成為一個(gè)行業(yè),有各種品牌的整理軟件,其效果范圍從非常有效到僅僅是微乎其微。

Linux 的擴(kuò)展文件系統(tǒng)使用數(shù)據(jù)分配策略,有助于最小化硬盤驅(qū)動(dòng)器上的文件碎片,并在發(fā)生碎片時(shí)減少碎片的影響。 你可以使用 EXT 文件系統(tǒng)上的 fsck 命令檢查整個(gè)文件系統(tǒng)的碎片。 以下示例檢查我的主工作站的家目錄,只有 1.5% 的碎片。 確保使用 -n 參數(shù),因?yàn)樗鼤?huì)防止 fsck 對(duì)掃描的文件系統(tǒng)采取任何操作。

  1. fsck -fn /dev/mapper/vg_01-home 

我曾經(jīng)進(jìn)行過一些理論計(jì)算,以確定磁盤碎片整理是否會(huì)產(chǎn)生任何明顯的性能提升。 我做了一些假設(shè)條件,我使用的磁盤性能數(shù)據(jù)來自一個(gè)新的 300GB 的西部數(shù)字硬盤驅(qū)動(dòng)器,具有 2.0ms 的軌到軌尋道時(shí)間。 此示例中的文件數(shù)是我在計(jì)算的當(dāng)天的文件系統(tǒng)中存在的實(shí)際數(shù)。 我假設(shè)每天有相當(dāng)大量的碎片化文件(約 20%)會(huì)被用到。

全部文件 271,794
碎片率 % 5.00%
不連續(xù)數(shù) 13,590
   
% 每天用到的碎片化文件 20% (假設(shè))
額外尋道次數(shù) 2,718
平均尋道時(shí)間 10.90 ms
每天全部的額外尋道時(shí)間 29.63 sec
  0.49 min
   
軌到軌尋道時(shí)間 2.00 ms
每天全部的額外尋道時(shí)間 5.44 sec
  0.091 min

表 1: 碎片對(duì)磁盤性能的理論影響

我對(duì)每天的全部的額外尋道時(shí)間進(jìn)行了兩次計(jì)算,一次是軌到軌尋道時(shí)間,這是由于 EXT 文件分配策略而導(dǎo)致大多數(shù)文件最可能的情況,一個(gè)是平均尋道時(shí)間,我假設(shè)這是一個(gè)合理的最壞情況。

從表 1 可以看出,對(duì)絕大多數(shù)應(yīng)用程序而言,碎片化甚至對(duì)性能適中的硬盤驅(qū)動(dòng)器上的現(xiàn)代 EXT 文件系統(tǒng)的影響是微乎其微的。您可以將您的環(huán)境中的數(shù)字插入到您自己的類似電子表格中,以了解你對(duì)性能影響的期望。這種類型的計(jì)算不一定能夠代表實(shí)際的性能,但它可以提供一些對(duì)碎片化及其對(duì)系統(tǒng)的理論影響的洞察。

我的大部分分區(qū)的碎片率都在 1.5% 左右或 1.6%,我有一個(gè)分區(qū)有 3.3% 的碎片,但是這是一個(gè)大約 128GB 文件系統(tǒng),具有不到 100 個(gè)非常大的 ISO 映像文件;多年來,我擴(kuò)展過該分區(qū)幾次,因?yàn)樗呀?jīng)太滿了。

這并不是說一些應(yīng)用的環(huán)境并不需要更少的碎片的環(huán)境。 EXT 文件系統(tǒng)可以由有經(jīng)驗(yàn)和知識(shí)的管理員小心調(diào)整,管理員可以針對(duì)特定的工作負(fù)載類型調(diào)整參數(shù)。這個(gè)工作可以在文件系統(tǒng)創(chuàng)建的時(shí)候或稍后使用 tune2fs 命令時(shí)完成。每一次調(diào)整變化的結(jié)果應(yīng)進(jìn)行測(cè)試,精心的記錄和分析,以確保目標(biāo)環(huán)境的***性能。在最壞的情況下,如果性能不能提高到期望的水平,則其他文件系統(tǒng)類型可能更適合特定的工作負(fù)載。并記住,在單個(gè)主機(jī)系統(tǒng)上混用文件系統(tǒng)類型以匹配每個(gè)文件系統(tǒng)上的不同負(fù)載是常見的。

由于大多數(shù) EXT 文件系統(tǒng)的碎片數(shù)量較少,因此無需進(jìn)行碎片整理。目前,EXT 文件系統(tǒng)沒有安全的碎片整理工具。有幾個(gè)工具允許你檢查單個(gè)文件的碎片程度或文件系統(tǒng)中剩余可用空間的碎片程度。有一個(gè)工具,e4defrag,它可以對(duì)允許使用的剩余可用空間、目錄或文件系統(tǒng)進(jìn)行碎片整理。顧名思義,它只適用于 EXT4 文件系統(tǒng)中的文件,并且它還有一其它的些限制。

如果有必要在 EXT 文件系統(tǒng)上執(zhí)行完整的碎片整理,則只有一種方法能夠可靠地工作。你必須將文件系統(tǒng)中的所有要進(jìn)行碎片整理的文件移動(dòng)從而進(jìn)行碎片整理,并在確保安全復(fù)制到其他位置后將其刪除。如果可能,你可以增加文件系統(tǒng)的大小,以幫助減少將來的碎片。然后將文件復(fù)制回目標(biāo)文件系統(tǒng)。但是其實(shí)即使這樣也不能保證所有文件都被完全去碎片化。

總結(jié)

EXT 文件系統(tǒng)在一些 Linux 發(fā)行版本上作為默認(rèn)文件系統(tǒng)已經(jīng)超過二十多年了。它們用最少的維護(hù)代價(jià)提供了穩(wěn)定性、高可用性、可靠性和性能。我嘗試過一些其它的文件系統(tǒng)但最終都還是回歸到 EXT。每一個(gè)我在工作中使用到 Linux 的地方都使用到了 EXT 文件系統(tǒng),同時(shí)我發(fā)現(xiàn)了它們適用于任何主流負(fù)載。毫無疑問,EXT4 文件系統(tǒng)應(yīng)該被用于大部分的 Linux 文件系統(tǒng)上,除非我們有明顯需要使用其它文件系統(tǒng)的理由。 

責(zé)任編輯:龐桂玉 來源: Linux中國(guó)
相關(guān)推薦

2012-05-21 09:48:58

Ext4

2018-09-12 15:48:35

ext4Linux文件系統(tǒng)

2012-05-08 10:56:15

Linux

2011-06-27 10:17:15

EXT4 Btrfs

2025-03-28 09:44:17

2010-12-17 09:37:13

ext4文件系統(tǒng)

2018-11-21 10:35:44

DropboxLinux同步支持

2022-09-15 08:06:02

FTL閃存存儲(chǔ)

2010-12-28 09:51:06

ext4文件系統(tǒng)

2017-11-23 09:30:01

Linux文件系統(tǒng)sudo命令

2009-08-12 17:42:24

Linux文件系統(tǒng)BTRFSext4

2010-06-01 09:55:24

ext4文件系統(tǒng)

2012-05-21 10:42:02

Ext4

2020-01-15 09:10:13

LinuxWindowsmacOS

2011-03-07 09:11:23

2018-11-05 09:45:01

Linux文件系統(tǒng)命令

2017-02-28 20:00:17

Linux文件系統(tǒng)對(duì)比

2011-01-06 09:57:31

Linux Kerne

2009-11-30 09:46:45

Ubuntu文件系統(tǒng)選擇

2012-09-20 09:32:23

Ubuntu 12.1文件系統(tǒng)Ubuntu
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)