天天看點

Linux檔案系統

一、檔案系統的概念

作業系統中負責管理和存儲檔案資訊的軟體機構稱為檔案管理系統,簡稱檔案系統。

檔案系統由三部分組成:與檔案管理有關的軟體、被管理的檔案以及實施檔案管理所需的資料結構。

從系統角度來看,檔案系統是對檔案存儲器空間進行組織和配置設定,負責檔案的存儲并對存入的檔案進行

保護和檢索的系統。具體地說,它負責為使用者建立檔案,存入、讀出、修改、轉儲檔案,控制檔案的存

取,當使用者不再使用時撤銷檔案等。 

檔案系統是作業系統用于明确磁盤或分區上的檔案的方法和資料結構;即在磁盤上組織檔案的方法。也

指用于存儲檔案的磁盤或分區,或檔案系統種類。

磁盤或分區和它所包括的檔案系統的不同是很重要的。少數程式(包括最有理由的産生檔案系統的程式)直

接對磁盤或分區的原始扇區進行操作;這可能破壞一個存在的檔案系統。大部分程式基于檔案系統進行操

作,在不同種檔案系統上不能工作。 

一個分區或磁盤能作為檔案系統使用前,需要初始化,并将記錄資料結構寫到磁盤上,這個過程就叫建立檔案系統。 

二、Linux中常見的ext、ext2、ext3、ext4檔案系統

ext是第一個專門為linux開發的檔案系統類型,叫做擴充檔案系統。由于其在穩定性、速度和相容性上存

在許多缺陷,現在已經很少使用。

ext2是為解決ext檔案系統的缺陷而設計的可擴充的、高性能的檔案系統,它又被稱為二級擴充檔案系統。

它是Linux檔案系統類型中使用最多的格式,并且在速度和CPU使用率上較為突出,是GNU/Linux系統中

标準的檔案系統。它存取檔案的性能極好,對于中、小型的檔案更顯示出優勢。

ext3是一種日志式檔案系統,是對ext2系統的擴充,它相容ext2。

日志式檔案系統的優越性在于:由于檔案系統都有快取層參與運作,如不使用時必須将檔案系統卸下,

以便将快取層的資料寫回磁盤中。是以每當系統要關機時,必須将其所有的檔案系統全部shutdown後

才能進行關機。如果在檔案系統尚未shutdown前就關機如(停電)時,下次重開機後會造成檔案系統

的資料不一緻,故這時必須做檔案系統的重整工作,将不一緻與錯誤的地方修複。然而,此一重整的工

作是相當耗時的,特别是容量大的檔案系統,而且也不能百分之百保證所有的資料都不會流失。

為了克服此問題,使用所謂“日志式檔案系統 (Journal File System)” 。此類檔案系統最大的特色是,

它會将整個磁盤的寫入動作完整記錄在磁盤的某個區域上,以便有需要時可以回溯追蹤。由于資料的寫入

動作包含許多的細節,像是改變檔案标頭資料、搜尋磁盤可寫入空間、一個個寫入資料區段等等,每一個

細節進行到一半若被中斷,就會造成檔案系統的不一緻,因而需要重整。

然而,在日志式檔案系統中,由于詳細紀錄了每個細節,故當在某個過程中被中斷時,系統可以根據

這些記錄直接回溯并重整被中斷的部分,而不必花時間去檢查其他的部分,故重整的工作速度相當快,

幾乎不需要花時間。

由于ext3檔案系統多了日志的記錄,對于系統的恢複比較快速,是以建議你務必要選擇新的ext3而不要用ext2。

ext3日志檔案系統的特點:

1、高可用性

系統使用了ext3檔案系統後,即使在非正常關機後,系統也不需要檢查檔案系統。

當機發生後,恢複ext3檔案系統的時間隻要數十秒鐘。

2、資料的完整性

ext3檔案系統能夠極大地提高檔案系統的完整性,避免了意外當機對檔案系統的破壞。在保證資料完整性方面,

ext3檔案系統有2種模式可供選擇。其中之一就是“同時保持檔案系統及資料的一緻性”模式。采用這種方式,

你永遠不再會看到由于非正常關機而存儲在磁盤上的垃圾檔案。

3、檔案系統的速度

盡管使用ext3檔案系統時,有時在存儲資料時可能要多次寫資料,但是,從總體上看來,ext3比ext2的性能

還要好一些。這是因為ext3的日志功能對磁盤的驅動器讀寫頭進行了優化。是以,檔案系統的讀寫性能較之

ext2檔案系統來說,性能并沒有降低。

4、資料轉換

由ext2檔案系統轉換成ext3檔案系統非常容易,隻要簡單地鍵入兩條指令即可完成整個轉換過程,使用者不用花時間

備份、恢複、格式化分區等。用一個ext3檔案系統提供的小工具tune2fs,它可以将ext2檔案系統輕松轉換為ext3

日志檔案系統。另外,ext3檔案系統可以不經任何更改,而直接加載成為ext2檔案系統。

5、多種日志模式

ext3有多種日志模式,一種工作模式是對所有的檔案資料及metadata(定義檔案系統中資料的資料,即資料的資料)

進行日志記錄(data=journal模式);另一種工作模式則是隻對metadata記錄日志,而不對資料進行日志記錄,

也即所謂data=ordered或者data=writeback模式。系統管理人員可以根據系統的實際工作要求,在系統的工作速

度與檔案資料的一緻性之間作出選擇。

反删除

和ext2不同,ext3會在删除檔案時把檔案的節點(inode)中的塊名額清除。這樣做可以在unclean載入檔案

系統後,重放日志時,可以減少對檔案系統的通路。但也同樣了檔案在反删除上面的困難。使用者唯一的補救是

在硬碟中撈取資料,并且要知道檔案的起始到結束的塊名額。盡管提供了比ext2在删除檔案上稍微高一些的安

全性,卻也無可避免的帶來了不便之處。

ext4是一種針對ext3系統的擴充日志式檔案系統,是專門為 Linux 開發的原始的擴充檔案系統(ext 或 extfs)的

第四版,修改了 ext3 中部分重要的資料結構,而不僅僅像 ext3 對 ext2 那樣,隻是增加了一個日志功能而已。

ext4 可以提供更佳的性能和可靠性,還有更為豐富的功能。

相對于ext3,特點如下:

1、與 ext3 相容。

執行若幹條指令,就能從 ext3 線上遷移到 ext4,而無須重新格式化磁盤或重新安裝系統。原有 ext3資料結構

照樣保留,ext4 作用于新資料,當然,整個檔案系統是以也就獲得了 ext4 所支援的更大容量。

2、更大的檔案系統和更大的檔案。 

較之 ext3 目前所支援的最大 16TB 檔案系統和最大 2TB 檔案,ext4 分别支援1EB(1,048,576TB , 1EB=1024PB  1PB=1024TB)的檔案系統,以及 16TB 的檔案。

3、無限數量的子目錄。 

ext3 目前隻支援 32,000 個子目錄,而 ext4 支援無限數量的子目錄。

4、extents。

ext3 采用間接塊映射,當操作大檔案時,效率極其低下。比如一個 100MB 大小的檔案,在 ext3 中要建立 

25,600 個資料塊(每個資料塊大小為 4KB)的映射表。而 ext4 引入了現代檔案系統中流行的 extents 概念,

每個 extent 為一組連續的資料塊,上述檔案則表示為“該檔案資料儲存在接下來的 25,600 個資料塊中”,

提高了不少效率。

5、多塊配置設定。 

當寫入資料到 ext3 檔案系統中時,ext3 的資料塊配置設定器每次隻能配置設定一個 4KB 的塊,寫一個 100MB 檔案

就要調用25,600 次資料塊配置設定器,而 ext4 的多塊配置設定器“multiblock allocator”(mballoc) 支援一次調用

配置設定多個資料塊。

6、延遲配置設定。 

ext3 的資料塊配置設定政策是盡快配置設定,而 ext4 和其它現代檔案作業系統的政策是盡可能地延遲配置設定,直到檔案在 cache 中寫完才開始配置設定資料塊并寫入磁盤,這樣就能優化整個檔案的資料塊配置設定,與前兩種特性搭配起來

可以顯著提升性能。

7、快速 fsck。 

以前執行 fsck 第一步就會很慢,因為它要檢查所有的 inode,而現在 ext4 給每個組的 inode 表中都添加了

一份未使用 inode 的清單,今後 fsck ext4 檔案系統就可以跳過它們而隻去檢查那些在用的 inode 了。

8、日志校驗。 

日志是最常用的部分,也極易導緻磁盤硬體故障,而從損壞的日志中恢複資料會導緻更多的資料損壞。ext4

的日志校驗功能可以很友善地判斷日志資料是否損壞,而且它将 Ext3 的兩階段日志機制合并成一個階段,在

增加安全性的同時提高了性能。

9、“無日志”(No Journaling)模式。 

日志總歸有一些開銷,ext4 允許關閉日志,以便某些有特殊需求的使用者可以借此提升性能。

10、線上碎片整理。 

盡管延遲配置設定、多塊配置設定和 extents 能有效減少檔案系統碎片,但碎片還是不可避免會産生。ext4 支援線上碎片

整理,并将提供 e4defrag 工具進行個别檔案或整個檔案系統的碎片整理。

11、inode 相關特性。 

ext4 支援更大的 inode,較之 ext3 預設的 inode 大小 128 位元組,ext4 為了在 inode 中容納更多的擴充屬性

(如納秒時間戳或 inode 版本),預設 inode 大小為 256 位元組。ext4 還支援快速擴充屬性(fast extended attributes)和 inode 保留(inodes reservation)。

12、持久預配置設定(Persistent preallocation)。 

P2P 軟體為了保證下載下傳檔案有足夠的空間存放,常常會預先建立一個與所下載下傳檔案大小相同的空檔案,以免未來

的數小時或數天之内磁盤空間不足導緻下載下傳失敗。 ext4 在檔案系統層面實作了持久預配置設定并提供相應的 API

(libc 中的 posix_fallocate()),比應用軟體自己實作更有效率。

13、預設啟用 barrier。 

磁盤上配有内部緩存,以便重新調整批量資料的寫操作順序,優化寫入性能,是以檔案系統必須在日志資料寫入

磁盤之後才能寫 commit 記錄,若 commit 記錄寫入在先,而日志有可能損壞,那麼就會影響資料完整性。

ext4 預設啟用 barrier,隻有當 barrier 之前的資料全部寫入磁盤,才能寫 barrier 之後的資料。

(可通過 "mount -o barrier=0" 指令禁用該特性。)

如何使用ext4

轉換到Ext4其實是件很容易的事情,如下方法均可:

1、建立ext4檔案系統。

這是最簡單的方法,你隻需要更新你的e2fsprogs到ext4,并且使用mkfs.ext4指令建立檔案系統即可。

2、從ext3遷移到ext4。

你需要使用tune2fs指令和fsck指令,并且目前檔案系統需要被解除安裝才可以。運作指令

tune2fs -O extents,uninit_bg,dir_index /dev/yourfilesystem

此後,你務必運作fsck指令,否則ext4将無法挂載你的新檔案系統。在fsck過程中,可能會有一些error需要你的确認。你可以考慮使用 -p選項,來告訴fsck你想要的是“automatic repair”,即fsck -pf /dev/yourfilesystem

3、用ext4挂載ext3檔案系統。

你可以使用mount -t ext4 /dev/yourpartition /mnt來将一個ext3檔案系統用ext4來挂載,但你将享受不到

那些需要改變磁盤格式才可以享受得到的特性,比如extents。你可以享受到的隻有 那些不需要改變磁盤格式

即可享受得到的特性,比如多塊配置設定、延遲配置設定等。