免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
好文翻譯丨Linux 文件系統(tǒng) EXT4 的前世今生


在先前關(guān)于Linux文件系統(tǒng)的文章中,我寫(xiě)了一份說(shuō)明書(shū)去介紹Linux文件系統(tǒng),里面有一些高級(jí)的概念,比如說(shuō),一切都是文件。我很想去深入地討論更多EXT文件系統(tǒng)的特性的信息。所以,首先讓我們來(lái)回答這個(gè)問(wèn)題:什么是文件系統(tǒng)?一個(gè)文件系統(tǒng)應(yīng)該遵循以下特點(diǎn):

1.數(shù)據(jù)存儲(chǔ):文件系統(tǒng)主要的功能是結(jié)構(gòu)化存儲(chǔ)和取回?cái)?shù)據(jù)。

2.命名空間:提供一套命名和組織的方法,就是命名和結(jié)構(gòu)化數(shù)據(jù)的規(guī)則。

3.安全模型:一種訪問(wèn)控制的策略。

4.API:系統(tǒng)操控文件系統(tǒng)對(duì)象的函數(shù),就像操作文件夾和文件一樣。

5.實(shí)現(xiàn):一個(gè)實(shí)現(xiàn)以上功能的軟件。

這篇文章集中與上面清單的第一項(xiàng),還有探究元數(shù)據(jù)結(jié)構(gòu)---在EXT文件系統(tǒng)中提供數(shù)據(jù)存儲(chǔ)的邏輯框架。

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

雖然是為L(zhǎng)inux編寫(xiě)的,但EXT文件系統(tǒng)起源于Minix操作系統(tǒng),而Minix文件系統(tǒng)早在1987年首次發(fā)布,比Linux還早五年就已經(jīng)發(fā)布了。如果我們查看EXT文件系統(tǒng)家族從其Minix根開(kāi)始的歷史和技術(shù)演變,就會(huì)更容易理解EXT4文件系統(tǒng)。

Minix

當(dāng)編寫(xiě)原始Linux內(nèi)核,Linus Torvalds需要一個(gè)文件系統(tǒng),但是不想開(kāi)發(fā)它。因此他簡(jiǎn)單的使用了Minix文件系統(tǒng),這是 Andrew S. Tanenbaum開(kāi)發(fā)的,而且是Tanenbaum 的Minix操作系統(tǒng)的一部分。Minix是類(lèi)Unix操作系統(tǒng),為教育使用而開(kāi)發(fā)。它的代碼開(kāi)放使用,而且合理的授權(quán)給Torvalds,允許他將它用于Linux的初代版本。

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

  • 引導(dǎo)扇區(qū)(boot sector)

    安裝于硬盤(pán)的第一個(gè)扇區(qū)。引導(dǎo)塊(boot block)包含一個(gè)非常小的引導(dǎo)記錄和一個(gè)分區(qū)表。
  • 每一個(gè)分區(qū)中的第一個(gè)塊是

    超級(jí)塊(superblock)

    ,它包含了定義其他文件系統(tǒng)結(jié)構(gòu)的元數(shù)據(jù),并將它們定位在分配給分區(qū)的物理磁盤(pán)上。
  • 節(jié)點(diǎn)位圖塊(inode bitmap block)

    ,它確定了哪個(gè)節(jié)點(diǎn)在使用以及哪個(gè)節(jié)點(diǎn)是空閑的。
  • 節(jié)點(diǎn)(inodes)

    ,它們?cè)诖疟P(pán)上有它們自己的空間。每個(gè)節(jié)點(diǎn)包含了一個(gè)文件的信息,包括數(shù)據(jù)塊的位置,即文件所屬的區(qū)域。
  • 區(qū)域位圖(zone bitmap)

    跟蹤記錄數(shù)據(jù)區(qū)域的使用和釋放。
  • 數(shù)據(jù)區(qū)域(data zone)

    ,數(shù)據(jù)實(shí)際上存儲(chǔ)的位置。

對(duì)于位圖的兩個(gè)類(lèi)型來(lái)說(shuō),一個(gè)bit代表了一個(gè)特有的數(shù)據(jù)區(qū)域或者一個(gè)特有的節(jié)點(diǎn)。如果這個(gè)bit是0,這個(gè)區(qū)域或者節(jié)點(diǎn)是空閑的而且可供使用,但是如果這個(gè)bit是1,這個(gè)數(shù)據(jù)區(qū)域或者節(jié)點(diǎn)是在使用中的。

節(jié)點(diǎn)是什么?它是索引節(jié)點(diǎn)(index-node)的縮寫(xiě),一個(gè)節(jié)點(diǎn)是在磁盤(pán)上的一個(gè)256字節(jié)的塊,而且它存儲(chǔ)文件相關(guān)的數(shù)據(jù)。這些數(shù)據(jù)包括文件的大?。晃募挠脩?hù)和所屬組的用戶(hù)ID;文件模式(即訪問(wèn)權(quán)限);以及三個(gè)時(shí)間戳具體說(shuō)明了時(shí)間,包括:文件最后訪問(wèn)時(shí)間,最后修改時(shí)間,以及節(jié)點(diǎn)中的數(shù)據(jù)最后修改時(shí)間。

節(jié)點(diǎn)也包含了:指向硬盤(pán)上文件數(shù)據(jù)所在的位置。在Minix和EXT1-3文件系統(tǒng)中,它是一個(gè)數(shù)據(jù)區(qū)域和塊的列表。Minix文件系統(tǒng)節(jié)點(diǎn)支持9個(gè)數(shù)據(jù)塊,7個(gè)直接指針和2個(gè)間接指針。如果你想了解的更多,這有一個(gè)很好的PDF詳細(xì)描述了Minix文件系統(tǒng)結(jié)構(gòu),以及在Wikipedia上對(duì)節(jié)點(diǎn)指針結(jié)構(gòu)的快速概述。

EXT

最初的EXT文件系統(tǒng)(Extended)由Rémy Card編寫(xiě),并于1992年與Linux一起發(fā)布,以規(guī)避Minix文件系統(tǒng)的一些大小限制。其中主要的結(jié)構(gòu)變化是基于Unix文件系統(tǒng)(UFS)的文件系統(tǒng)元數(shù)據(jù),該結(jié)構(gòu)也被稱(chēng)為伯克利快速文件系統(tǒng)(FFS)。我發(fā)現(xiàn)很少有關(guān)于此EXT文件系統(tǒng)的可考究的發(fā)布信息,顯然是因?yàn)樗嬖谥卮髥?wèn)題,并很快被EXT2文件系統(tǒng)所取代。

EXT2

EXT2文件系統(tǒng)非常成功。它在Linux發(fā)行版中被使用了很多年,并且它是我在1997年左右開(kāi)始使用Red Hat Linux 5.0時(shí)遇到的第一個(gè)文件系統(tǒng)。EXT2文件系統(tǒng)與EXT文件系統(tǒng)具有基本相同的元數(shù)據(jù)結(jié)構(gòu),但EXT2更具前瞻性,因?yàn)樵谠獢?shù)據(jù)結(jié)構(gòu)之間保留大量磁盤(pán)空間以供未來(lái)使用。

像Minix一樣,EXT2在其安裝的硬盤(pán)的第一個(gè)扇區(qū)中有一個(gè)引導(dǎo)扇區(qū),其中包括一個(gè)非常小的引導(dǎo)記錄和一個(gè)分區(qū)表。在引導(dǎo)扇區(qū)后面有一些預(yù)留空間,它跨越引導(dǎo)記錄和硬盤(pán)上通常位于下一個(gè)柱面邊界上的第一個(gè)分區(qū)之間的空間。 GRUB2(可能還有GRUB1)使用這個(gè)空間作為其啟動(dòng)代碼的一部分。

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

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

柱面組中的第一個(gè)塊是一個(gè)超級(jí)塊,它包含定義其他文件系統(tǒng)結(jié)構(gòu)并將其定位在物理磁盤(pán)上的元數(shù)據(jù)。 分區(qū)中的一些附加組將具有備份超級(jí)塊,但不是全部。 損壞的超級(jí)塊可以使用dd等磁盤(pán)實(shí)用程序?qū)浞莩?jí)塊的內(nèi)容復(fù)制到主超級(jí)塊。 它并不經(jīng)常發(fā)生,但是多年前曾經(jīng)有一個(gè)受損的超級(jí)塊,我可以使用其中一個(gè)備份超級(jí)塊來(lái)恢復(fù)其內(nèi)容。 幸運(yùn)的是,我已經(jīng)預(yù)見(jiàn)到并使用dumpe2fs命令轉(zhuǎn)儲(chǔ)我系統(tǒng)上分區(qū)的描述符信息。

下面是dumpe2fs命令的部分輸出。它顯示了超級(jí)塊中包含的元數(shù)據(jù),以及關(guān)于文件系統(tǒng)中前兩個(gè)柱面組的數(shù)據(jù)。

# dumpe2fs /dev/sda1Filesystem volume name: boot Last mounted on: /boot Filesystem UUID: 79fc5ed8-5bbc-4dfe-8359-b7b36be6eed3 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) 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 Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 122160 Block count: 488192 Reserved block count: 24409 Free blocks: 376512 Free inodes: 121690 First block: 0 Block size: 4096 Fragment size: 4096 Group descriptor size: 64 Reserved GDT blocks: 238 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8144 Inode blocks per group: 509 Flex block group size: 16 Filesystem created: Tue Feb 7 09:33:34 2017 Last mount time: Sat Apr 29 21:42:01 2017 Last write time: Sat Apr 29 21:42:01 2017 Mount count: 25 Maximum mount count: -1 Last checked: Tue Feb 7 09:33:34 2017 Check interval: 0 (<none>) Lifetime writes: 594 MB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 32 Desired extra isize: 32 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: c780bac9-d4bf-4f35-b695-0fe35e8d2d60 Journal backup: inode blocks Journal features: journal_64bit Journal size: 32M Journal length: 8192 Journal sequence: 0x00000213 Journal start: 0 Group 0: (Blocks 0-32767) Primary superblock at 0, Group descriptors at 1-1 Reserved GDT blocks at 2-239 Block bitmap at 240 ( 240) Inode bitmap at 255 ( 255) Inode table at 270-778 ( 270) 24839 free blocks, 7676 free inodes, 16 directories Free blocks: 7929-32767 Free inodes: 440, 470-8144 Group 1: (Blocks 32768-65535) Backup superblock at 32768, Group descriptors at 32769-32769 Reserved GDT blocks at 32770-33007 Block bitmap at 241 (bg #0 241) Inode bitmap at 256 (bg #0 256) Inode table at 779-1287 (bg #0 779) 8668 free blocks, 8142 free inodes, 2 directories 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 Free inodes: 8147-16288 Group 2: (Blocks 65536-98303) Block bitmap at 242 (bg #0 242) Inode bitmap at 257 (bg #0 257) Inode table at 1288-1796 (bg #0 1288) 6326 free blocks, 8144 free inodes, 0 directories Free blocks: 67042-67583, 72201-72994, 80185-80349, 81191-81919, 90112-94207 Free inodes: 16289-24432 Group 3: (Blocks 98304-131071)<snip>

每個(gè)柱面組都有自己的inode位圖,該位圖用于確定使用哪些inode,以及該組中哪些是空閑的。inode在每個(gè)組中都有自己的空間。每個(gè)inode都包含有關(guān)一個(gè)文件的信息,包括屬于該文件的數(shù)據(jù)塊的位置。塊位圖跟蹤文件系統(tǒng)中使用和釋放的數(shù)據(jù)塊。注意,上面顯示的輸出中有大量關(guān)于文件系統(tǒng)的數(shù)據(jù)。在很大的文件系統(tǒng)中,組數(shù)據(jù)可以長(zhǎng)達(dá)數(shù)百頁(yè)。組元數(shù)據(jù)包括組中所有空閑數(shù)據(jù)塊的列表。

EXT文件系統(tǒng)實(shí)現(xiàn)了保證文件碎片最小化的數(shù)據(jù)分配策略。減少磁盤(pán)碎片化可改善文件系統(tǒng)的性能。這些策略將在下文的EXT4部分中進(jìn)行介紹。

在某些情況下,我曾遇到的EXT2文件系統(tǒng)的最大問(wèn)題是在崩潰后可能需要幾個(gè)小時(shí)才能恢復(fù),因?yàn)?strong>fsck(file system check)程序需要很長(zhǎng)時(shí)間才能找到并糾正文件系統(tǒng)中的任何不一致。它曾在我的一臺(tái)計(jì)算機(jī)上花費(fèi)了28個(gè)小時(shí)的時(shí)間,以實(shí)現(xiàn)在發(fā)生崩潰到重新啟動(dòng)時(shí)完全恢復(fù)磁盤(pán) -并且這是在磁盤(pán)大小為數(shù)百兆字節(jié)下測(cè)試的結(jié)果。

EXT3

EXT3文件系統(tǒng)的唯一目標(biāo)是克服fsck程序需要大量時(shí)間來(lái)完全恢復(fù)因文件更新操作期間發(fā)生的不正確關(guān)閉而損壞的磁盤(pán)結(jié)構(gòu)的問(wèn)題。EXT文件系統(tǒng)的唯一增加是journal,它預(yù)先記錄了將對(duì)文件系統(tǒng)執(zhí)行的改動(dòng)。磁盤(pán)結(jié)構(gòu)的其余部分和EXT2中是相同的。

EXT3中的journal并不是直接將數(shù)據(jù)寫(xiě)入磁盤(pán)的數(shù)據(jù)區(qū)域,而是將文件數(shù)據(jù)及其元數(shù)據(jù)寫(xiě)入到磁盤(pán)上的指定區(qū)域。一旦數(shù)據(jù)安全地存儲(chǔ)在硬盤(pán)上,它就可以合并到目標(biāo)文件或附加到目標(biāo)文件中,而這幾乎不會(huì)丟失數(shù)據(jù)。由于該數(shù)據(jù)被提交到磁盤(pán)的數(shù)據(jù)區(qū)域,因此需更新journal以便在發(fā)生系統(tǒng)故障時(shí)文件系統(tǒng)保持一致?tīng)顟B(tài),然后該journal中的所有數(shù)據(jù)都被提交。在下次啟動(dòng)時(shí),將檢查文件系統(tǒng)是否存在不一致性,然后將journal中剩余的數(shù)據(jù)提交到磁盤(pán)的數(shù)據(jù)區(qū)域以完成對(duì)目標(biāo)文件的更新。

日志化確實(shí)會(huì)降低數(shù)據(jù)寫(xiě)入性能,但journal提供了三種選項(xiàng)可供用戶(hù)在性能,數(shù)據(jù)完整性和安全性之間進(jìn)行選擇。我的個(gè)人偏好是安全性,因?yàn)槲业沫h(huán)境不需要繁重的磁盤(pán)寫(xiě)入操作。

日志函數(shù)最多可以減少在檢查硬盤(pán)驅(qū)動(dòng)發(fā)現(xiàn)不一致性所需的時(shí)間:從幾小時(shí)(甚至幾天)到幾分鐘不等。多年來(lái),我遇到了很多導(dǎo)致系統(tǒng)崩潰的問(wèn)題。個(gè)中細(xì)節(jié)可以填滿(mǎn)另一篇文章,但足以證實(shí)大多數(shù)是自我原因造成的,就像踢掉電源插頭一樣。幸運(yùn)的是,EXT日志化文件系統(tǒng)已將啟動(dòng)恢復(fù)時(shí)間縮短到兩三分鐘。另外,自從我開(kāi)始使用帶日志功能的EXT3以來(lái),我從來(lái)沒(méi)有遇到丟失數(shù)據(jù)的問(wèn)題了。

EXT3的日志功能可以關(guān)閉,然后作為EXT2文件系統(tǒng)運(yùn)行。日志功能本身仍然存在,它是空的并且是未使用的。只需使用mount命令重新掛載分區(qū),使用type參數(shù)指定EXT2。您可以在命令行中執(zhí)行此操作,這取決于您使用的是哪個(gè)文件系統(tǒng),但是您可以更改/etc/fstab文件中的類(lèi)型說(shuō)明符,然后重新啟動(dòng)。我強(qiáng)烈建議不要將EXT3文件系統(tǒng)作為EXT2使用,因?yàn)榭赡軙?huì)丟失數(shù)據(jù)并延長(zhǎng)恢復(fù)時(shí)間。

現(xiàn)有的EXT2文件系統(tǒng)可以通過(guò)使用以下命令添加日志來(lái)升級(jí)到EXT3。

tune2fs -j /dev/sda1

其中/dev/sda1是驅(qū)動(dòng)器和分區(qū)標(biāo)識(shí)符。確保在/etc/fstab中更改文件類(lèi)型說(shuō)明符,并重新啟動(dòng)分區(qū)或重新啟動(dòng)系統(tǒng)以使更改生效。

EXT4

EXT4文件系統(tǒng)主要改善了性能,可靠性和容量。為了提升可靠性,添加了元數(shù)據(jù)和日志校驗(yàn)和。為了完成各種各樣的關(guān)鍵任務(wù)的需求,文件系統(tǒng)時(shí)間戳將時(shí)間間隔精確到了納秒。時(shí)間戳字段的兩個(gè)高位bit將2038年問(wèn)題延續(xù)到了2446年——至少為EXT4文件系統(tǒng)延續(xù)了。

在EXT4中,數(shù)據(jù)分配從固定塊變成了擴(kuò)展塊。一個(gè)擴(kuò)展塊通過(guò)它在硬盤(pán)上的起始和結(jié)束位置來(lái)描述。這使得在一個(gè)單一節(jié)點(diǎn)指針條目中描述非常長(zhǎng)的物理連續(xù)文件成為可能,它可以顯著減少大文件中的描述所有數(shù)據(jù)的位置的所需指針的數(shù)量。為了進(jìn)一步減少碎片化,其他分配策略已經(jīng)在EXT4中實(shí)現(xiàn)。

EXT4通過(guò)在磁盤(pán)上分散新創(chuàng)建的文件來(lái)減少碎片化,因此他們不會(huì)像早期的PC文件系統(tǒng),聚集在磁盤(pán)的起始位置。文件分配算法嘗試盡量將文件均勻的覆蓋到柱面組,而且當(dāng)不得不產(chǎn)生碎片時(shí),盡可能地將間斷文件范圍靠近同一個(gè)文件的其他碎片,來(lái)盡可能壓縮磁頭尋找和旋轉(zhuǎn)等待時(shí)間。當(dāng)一個(gè)新文件創(chuàng)建的時(shí)候或者當(dāng)一個(gè)已有文件擴(kuò)大的時(shí)候,附加策略用于預(yù)分配額外磁盤(pán)空間。它有助于保證擴(kuò)大文件不會(huì)導(dǎo)致它直接變?yōu)樗槠?。新文件不?huì)直接分配在已存在文件的后面,這也阻止了已存在文件的碎片化。

除了數(shù)據(jù)在磁盤(pán)的具體位置,EXT4使用一些功能策略,例如延遲分配,允許文件系統(tǒng)在分配空間之前先收集到要寫(xiě)到磁盤(pán)的所有數(shù)據(jù)。這可以提高數(shù)據(jù)空間連續(xù)的概率。

之前的EXT文件系統(tǒng),例如EXT2和EXT3,可以掛載EXT4,來(lái)提升一些次要性能。不幸的是,它要求關(guān)掉一些EXT4的重要的新特性,因此我不建議這種做法。

從Fedora 14開(kāi)始,EXT4已經(jīng)是Fedora的默認(rèn)文件系統(tǒng)。使用在Fedroa文檔描述的過(guò)程,一個(gè)EXT3文件系統(tǒng)可以升級(jí)到EXT4,然而由于剩余的EXT3元數(shù)據(jù)結(jié)構(gòu),它的性能仍然會(huì)受到影響。從EXT3升級(jí)到EXT4最好的方法是備份所有的目標(biāo)文件系統(tǒng)分區(qū)的數(shù)據(jù),使用mkfs命令將一個(gè)空的EXT4文件系統(tǒng)寫(xiě)到分區(qū),然后從備份恢復(fù)所有數(shù)據(jù)。

節(jié)點(diǎn)(Inode)

在之前描述過(guò),節(jié)點(diǎn)是一個(gè)EXT文件系統(tǒng)的元數(shù)據(jù)的關(guān)鍵要素。圖2展示了節(jié)點(diǎn)和存儲(chǔ)在硬盤(pán)上的數(shù)據(jù)之間的關(guān)系。這個(gè)示意圖是目錄和單一文件的節(jié)點(diǎn),在這種情況下,可能是高度碎片化文件的節(jié)點(diǎn)。EXT文件系統(tǒng)為減少碎片化而積極努力,因此你不會(huì)看到有很多間接數(shù)據(jù)塊或者數(shù)據(jù)區(qū)的文件。事實(shí)上,就像你將在下面看到的,碎片化在EXT文件系統(tǒng)中非常少見(jiàn),因此大多節(jié)點(diǎn)會(huì)只用一個(gè)或者兩個(gè)直接數(shù)據(jù)指針而且不使用間接指針。

圖2:節(jié)點(diǎn)存儲(chǔ)了關(guān)于每個(gè)文件的信息和EXT文件系統(tǒng)對(duì)所有屬于它的數(shù)據(jù)的定位。

節(jié)點(diǎn)不包含文件的名稱(chēng)。通過(guò)目錄項(xiàng)(directory entry)來(lái)訪問(wèn)文件,它自己就是文件的名稱(chēng)而且包含指向此節(jié)點(diǎn)的指針。指針的值是節(jié)點(diǎn)號(hào)。每個(gè)文件系統(tǒng)中的節(jié)點(diǎn)都有一個(gè)唯一的ID號(hào),但是在同一個(gè)電腦(甚至同一個(gè)硬盤(pán))的其他文件系統(tǒng)中的節(jié)點(diǎn)可以有相同的節(jié)點(diǎn)號(hào)。這會(huì)對(duì)硬連接產(chǎn)生一些后果,這方面內(nèi)容超出了本文的范圍。

節(jié)點(diǎn)包含了文件的元數(shù)據(jù),包括它的類(lèi)型和權(quán)限以及它的大小。節(jié)點(diǎn)也包含了15個(gè)指針的空間,來(lái)描述柱面組中數(shù)據(jù)部分中的數(shù)據(jù)塊或數(shù)據(jù)區(qū)的位置和長(zhǎng)度。12個(gè)指針提供了數(shù)據(jù)區(qū)的直接訪問(wèn),而且對(duì)處理大部分文件都是足夠的。然而,對(duì)于有大量碎片的文件,它可能必須需要一些額外的空間,以間接節(jié)點(diǎn)的形式描述。從技術(shù)上來(lái)講,它們不是真正的節(jié)點(diǎn),因此為了方便我使用短語(yǔ)“間接節(jié)點(diǎn)(node)”。

間接節(jié)點(diǎn)是文件系統(tǒng)中一個(gè)常規(guī)的數(shù)據(jù)塊,只用于描述數(shù)據(jù)而且不用存儲(chǔ)元數(shù)據(jù),因此可以支持超過(guò)15個(gè)指針。例如,一個(gè)大小為4K的塊可以支持512個(gè)4字節(jié)間接節(jié)點(diǎn),允許一個(gè)單一文件包含12(直接) 512(間接)=524個(gè)區(qū)。同樣也支持雙重或三重間接節(jié)點(diǎn),但是我們一般不太可能遇到需要這么多區(qū)的文件。

對(duì)于許多陳舊的PC文件系統(tǒng)(諸如FAT(及其所有變體)和NTFS),碎片化一直是導(dǎo)致磁盤(pán)性能下降的主要問(wèn)題。碎片整理本身就成為一個(gè)行業(yè),囊括不同品牌的碎片整理軟件,其作用從非常有效到表現(xiàn)平平。

Linux擴(kuò)展文件系統(tǒng)使用的數(shù)據(jù)分配策略,有助于最大限度地減少硬盤(pán)驅(qū)動(dòng)器上文件的碎片,并在碎片發(fā)生時(shí)減少碎片效應(yīng)。你可以在EXT文件系統(tǒng)上使用fsck命令來(lái)檢查整個(gè)文件系統(tǒng)的碎片。以下示例檢查我的主工作站的主目錄,該目錄僅有1.5%碎片化。請(qǐng)務(wù)必使用-n參數(shù),因?yàn)樗梢苑乐?strong>fsck對(duì)所掃描的文件系統(tǒng)執(zhí)行任何操作。

fsck -fn /dev/mapper/vg_01-home

我曾經(jīng)進(jìn)行過(guò)一些理論上的計(jì)算,以確定磁盤(pán)碎片整理是否會(huì)導(dǎo)致性能顯著提高。雖然我確實(shí)做了一些假定,但我使用的磁盤(pán)性能數(shù)據(jù)來(lái)自新的300GB,Western Digital硬盤(pán),具有2.0ms的磁軌間尋址時(shí)間。本例中的文件數(shù)量是我在計(jì)算當(dāng)天存在于該文件系統(tǒng)中的實(shí)際數(shù)量。我確實(shí)假定每天都會(huì)觸發(fā)相當(dāng)多的碎片文件(20%)。

表1: 碎片化對(duì)磁盤(pán)性能的理論上的影響

我已經(jīng)做了兩次測(cè)算,每天總的附加尋址時(shí)間,一次是基于磁軌間尋址時(shí)間,這是由于EXT文件分配策略而導(dǎo)致大多數(shù)文件更可能出現(xiàn)的情況,另一種是平均尋址時(shí)間,我假定這會(huì)觸發(fā)相當(dāng)于最壞的情形。

從表1可以看出,對(duì)于具有相當(dāng)性能的硬盤(pán)驅(qū)動(dòng)器的現(xiàn)代EXT文件系統(tǒng)來(lái)說(shuō),碎片化影響最??;對(duì)絕大多數(shù)應(yīng)用程序來(lái)說(shuō)可以忽略不計(jì)。你可以將實(shí)際環(huán)境中的數(shù)據(jù)插入到你自己的類(lèi)似電子表格中,以得到你對(duì)性能影響的預(yù)期。這種計(jì)算方式很可能不會(huì)代表實(shí)際性能,但它可以提供對(duì)碎片話及其對(duì)系統(tǒng)的理論上的影響的一些洞察力。

我的大部分分區(qū)大約1.5%或1.6%碎片化;我確實(shí)有一個(gè)3.3%碎片化的分區(qū),但這是一個(gè)大的,128GB的文件系統(tǒng),擁有少于100個(gè)非常大的ISO映像文件;多年來(lái),我不得不多次擴(kuò)展此分區(qū),因?yàn)樗珴M(mǎn)了。

這并不是說(shuō)某些應(yīng)用程序環(huán)境不需要更少的碎片文件的保證。EXT文件系統(tǒng)可以由知識(shí)淵博的管理員進(jìn)行調(diào)整,他們可以調(diào)整參數(shù)以補(bǔ)償特定的工作負(fù)載類(lèi)型。這可以在文件系統(tǒng)被創(chuàng)建時(shí)或之后使用tune2fs命令來(lái)完成。應(yīng)對(duì)每次調(diào)優(yōu)改動(dòng)的結(jié)果進(jìn)行測(cè)試,細(xì)致地記錄并進(jìn)行分析,以確保對(duì)目標(biāo)環(huán)境達(dá)到最佳性能。在最差的情況下,如果性能無(wú)法提升到所需的水平,則可能有更適合特定工作負(fù)載的其他文件系統(tǒng)類(lèi)型。請(qǐng)記住,在單個(gè)主機(jī)系統(tǒng)上混用文件系統(tǒng)類(lèi)型以匹配每個(gè)文件系統(tǒng)上的負(fù)載是很常見(jiàn)的。

由于在大多數(shù)EXT文件系統(tǒng)中碎片數(shù)量很少,因此不需要進(jìn)行碎片整理。無(wú)論如何,EXT文件系統(tǒng)都沒(méi)有安全的碎片整理工具。目前有幾個(gè)工具可以讓你檢查單個(gè)文件的碎片狀況或文件系統(tǒng)中剩余空閑空間的碎片化狀態(tài)。有一個(gè)工具,e4defrag,它將在可用空間允許的前提下對(duì)文件、目錄或文件系統(tǒng)進(jìn)行盡可能地碎片化整理。顧名思義,它只適用于EXT4文件系統(tǒng)中的文件,并且存在一些局限性。

如果有必要對(duì)EXT文件系統(tǒng)執(zhí)行完全的碎片整理,則僅有一種方法可以可靠地工作。你必須移動(dòng)文件系統(tǒng)中的所有文件以進(jìn)行碎片整理,以確保在將文件安全復(fù)制到其他位置后將其刪除。如果可能的話,你可以增加文件系統(tǒng)的大小來(lái)輔助減少將來(lái)的碎片產(chǎn)生。然后將文件復(fù)制回目標(biāo)文件系統(tǒng)。即使這樣做并不能保證所有的文件都會(huì)被完全去碎片化。

結(jié)論

20多年來(lái),EXT文件系統(tǒng)一直是許多Linux發(fā)行版的默認(rèn)文件系統(tǒng)。它們需要少量的維護(hù)就能提供穩(wěn)定性、高容量、可靠性和性能。我嘗試過(guò)其他文件系統(tǒng),但總是回到EXT。毫無(wú)疑問(wèn),EXT4文件系統(tǒng)應(yīng)該用于大多數(shù)Linux系統(tǒng),除非有令人信服的理由去使用另一個(gè)文件系統(tǒng)。

關(guān)于作者

David Both。David Both居住在北卡羅來(lái)納州的Raleigh,是Linux和開(kāi)源的支持者。他在IT行業(yè)工作了四十多年,并在IBM教授OS/2了二十多年。在IBM工作期間,他在1981年為最初的IBM PC編寫(xiě)了第一期培訓(xùn)課程。他曾為紅帽教授RHCE課程,并曾在MCI Worldcom,思科和北卡羅萊納州工作。他在Linux和開(kāi)源軟件方面工作了近20年。David為OS/2雜志,Linux雜志,Linux周刊和OpenSource.com撰寫(xiě)了文章。他與思科同事合作撰寫(xiě)的文章“Complete Kickstart”在2008年Linux雜志十大最佳系統(tǒng)管理文章排行榜中名列第九。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Linux下ext4和ext3的比較
Linux 的 EXT4 文件系統(tǒng)的歷史、特性以及最佳實(shí)踐
linux文件系統(tǒng)基礎(chǔ)知識(shí)
Minix、linux及Solaris文件系統(tǒng)分析和對(duì)比 【轉(zhuǎn)】
新一代 你牛叉 文件系統(tǒng) btrfs 簡(jiǎn)介
硬連接和軟連接的原理-《別怕Linux編程》之七
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服