日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Linux文件系統EXT2,EXT3,ReiserFS詳解

 

1.簡介

文件系統是解決如何在存儲設備上存儲數據的一套方法,包括存儲布局、文件命名、空間管理、安全控制等。linux 操作系統支持很多現代的流行文件系統,其中 ext2 、 ext3 和 ReiserFS 最普遍。 ext2 文件系統是伴隨著 linux 一起發展起來的,在 ex2 的基礎上增加日志就是 ext3 ,這兩個文件系統可以很容易的轉換而不必重新格式化存儲介質,它們是 linux 特有的。 ReiserFS 可以說是后起之秀了,最初它不是用于 linux ,所以對 linux 來說它是一個泊來品。 ReiserFS 采用了一個非常先進的新穎算法,最新的 4 版本真正做到了文件系統操作的原子性(類似數據庫事務操作的原子性),據官方報道, ReiserFS" 原子性 " 算法優于現代數據庫的 " 原子性 " 算法,做到了空間和時間復雜度的雙優!一個文件系統能做到這個份上,我算是徹底服了 :-) 

現代 Linux 系統繼續采用了早期( 1992 年前)發展的虛擬文件系統( Virtual File System ,簡寫為 VFS )理念,VFS 是一個介于用戶和實際文件系統之間,為用戶提供了一個統一的編程接口,盡管處于其之下的各種文件系統類型千差萬別,但對最終用戶來說卻是一樣的。例如當用戶張三輸入命令 cd /data 后,他并沒有意識到自己剛從 ext3 文件系統進入 ReiserFS 文件系統,他仍然使用命令 ls –l 列出當前目錄下的所有文件,而且顯示格式也是一樣,但是幕后英雄 VFS 可忙壞了,它不得不啟動一個算法找到 ReiserFS 文件系統提供的接口函數并調用它們,要知道 ReiserFS提供的一套函數可不同于 ext3 的那一套。得益于 VFS ,其他文件系統可以采用 " 熱插拔 " 的非常簡便的方式加入或退出 Linux 操作系統,例如當第一次 mount 一個文件系統 A 時,相應地就把該文件系統對應的模塊裝載到內核(假設沒有被直接編譯進內核),當最后把文件系統 A 對應的設備 umount 時,對應的模塊被卸載出去。

 

2.原理

LINUX 的文件系統可以追溯到八十年代末的 Minix 文件系統,而 Minix 文件系統具有幾個明顯的缺點:文件系統不能超過 64M ,目錄只能存放固定數目的文件,文件名長度不能超過 14 個字符,文件尺寸小于 64M 。之后由于繼續沿襲傳統技術,盡管 linux 的標準文件系統依次經歷了 VFS(1992 年前 ) 、 ext(1992 年 ) 、 ext2(1993 年 ) 和最新的ext3 這一系列文件系統的傳種接代,但 " 基因 " 沒變,只不過新一代都是改進前一代的不足,或者加入一些新東東而已。但由于 Linux 幾乎在一開始就引入 VFS 的概念(我個人認為非常英明 ^O^ ), Linux 對其他第三方文件系統都是包容的,目前幾乎所有先進的文件系統都支持,其中著名的 ReiserFS 已經成了 Novell 的 SuSe Linux 發行版的缺省文件系統,但也由于 IT 界最臭名昭著的四字經 " 向后兼容 " 的要求,今日各種 linux 發行版中存在過多地包容早已經落伍的文件系統的現象,比如 Minix 、 FAT 等,但對于一個富有理論和經驗的系統管理員來說,所有的這些 " 累贅 " 都可以在彈指間一一化解。

下面我們先看看一塊物理硬盤是如何分區的。三個主要的參數是柱面數、磁頭數和每磁道扇區數,起始編號分別為 0 、 0 和 1 , 0 柱面 0 磁頭 1 扇區是主引導分區,上面存放引導代碼和四個主分區表(如果一個物理硬盤多于4 個,那么就放在擴展分區), 0 柱面 0 磁頭上的其他扇區保留,真正的分區是從 0 柱面 1 磁頭 1 扇區開始的。在linux 中,用 /dev/had 、 /dev/hdb 、 /dev/sda 、 /dev/sdc 等表示一個物理磁盤。實驗:

  • 查看硬盤物理參數: hdparm /dev/sda; hdparm –i /dev/had(IDE 硬盤 ) ;
  • 讀入分區表信息: dd if=/dev/sda of=/tmp/mbr bs=1 count=64 skip=446 ;
  • 查看主分區表信息: od –t x1 mar ;
  • 備份主引導區信息: dd of=/dev/sda if=/dev/sda bs=512 count=1 seek=1 ;

 

2.1VFS

自從鄧小平南巡講話那年之前 VFS 投胎于 linux 以來( Mr. Linus 不愧為一個有遠見的接生婆, @_@ ), VFS就一直與 Linux 形影不離,并且成了 Kernel 的一部分,在 Kernel 版本號如芝麻開花般節節攀升的同時自己也枝繁葉茂起來。

VFS 就像一個一個默默無聞的公仆,它介于各種文件系統和用戶進程之間(參見圖〖一〗),一方面屏蔽下層的各種異構文件系統的個性,另一方面為上層用戶提供一個統一的接口(如 open 、 read 等),同時 VFS 還提供一些文件系統沒有的操作,比如,沒有哪個文件系統提供了函數 lseek ,此函數由 VFS 實現。

Kernel 中存在一個全局指針變量 file_systems ,該變量指向一個元素類型為 file_system_type 的鏈表,當 mount一個文件系統時裝載對應的模塊,而裝載模塊時觸發的行為 register_filesystem() 會生成一個 file_system_type 結構并把它掛接到 file_systems 鏈表上,也就是說所有的已經 mount 的文件系統都掛在這個鏈表上, file_system_tpe 結構中有一個指向超級塊結構的指針,存儲介質上的超級塊在設備 mount 時被讀入內存,直到 umount 時從內存中刪除。

Linux文件系統EXT2,EXT3,ReiserFS詳解

 

圖〖一〗 VFS 在內核中的地位

 

2.2EXT2 和 EXT3

EXT2 是 linux 上標準的文件系統, EXT3 是在 EXT2 基礎上增加日志形成的,其思想還是可以追溯到早期UNIX 家族發展的基于超級塊和 inode 的經典概念。 /dev/sda#n 表示 /dev/sda 硬盤上的第 #n 個分區,如果一個分區備格式化為 ext2 或 ext3 文件系統,那么整個分區的布局如圖〖二〗所示:

Linux文件系統EXT2,EXT3,ReiserFS詳解

 

圖〖二〗: EXT2 文件系統分區結構

分區上的扇區是從 0 開始編號的,每個扇區 512bytes ,一個塊( block )大小一般是 1k 、 2k 、 3k 和 4k ,具體大小可在創建文件系統時指定,如果不指定塊大小那么會根據分區的大小自動相應選擇一個。分區開始的1024bytes 存放引導程序 boot ,接下來的 1024bytes 存放超級塊 super block ,組描述字 group descriptors 起始于一個新塊,并單獨占用一個塊空間,之后的所有塊被組織成塊組,塊組才是真正存放文件的場所。超級塊含有整個文件系統的一些全局參數,如:卷名、全局唯一標識符、狀態、塊大小、總塊數、每組 inode 數,總 i 節點數、每組塊數等等, super block 在文件 mount 時被讀入內存,直到 umount 時被釋放,由于超級塊對于文件系統來說至關重要,所以超級塊一般在第 1 、 3 、 5 、 7 和 9 組的首塊中存有副本。

實驗:

  1. 創建一個 ext2 文件系統: mke2fs –c –c –L "Test Filesystem" /dev/sda2 ;
  2. 查看 ext2 分區開始部分的信息: od –t x1 /dev/sda2 | more ;其中 "aa55" 之前的為 boot ,含有魔數 "ef53"的區域為 super block ;
  3. 查看超級塊中的內容: tune2fs –l /dev/sda2 ;例子見附件 1 。
  4. 查看詳細的塊組信息: dumpe2fs –x /dev/sda2 ;例子見附件 2 。

一個塊組描述字占用 32 個字節,其中三個主要指針分別指到 到這個塊組的 i 節點表、 i 節點位圖和塊位圖。塊組的設計是為了拉近 inode 和它的數據塊的距離,這樣就可以提高磁盤存取性能,一個塊組的具體結構示意圖見圖〖二〗右邊部分 。

inode 是 EXT2 文件系統的精華,一個 inode 對應一個文件, inode 編號是全局性的,從 1 開始,描述參考 圖〖三〗。

Linux文件系統EXT2,EXT3,ReiserFS詳解

 

inode 中存放文件的一些重要屬性,如權限、文件大小、訪問時間、修改時間、創建時間、文件屬主 ID 、組 ID、塊數等。 Inode 包含 15 個指針,前 12 個直接指向數據塊,后三個依次是一次間接、二次間接和三次間接指向數據塊。

文件系統的目錄不同于普通文件的結構,是一種固定格式的文件,里面的每一個條目代表目錄中的一個文件,示意圖見圖〖四〗。

Linux文件系統EXT2,EXT3,ReiserFS詳解

 

圖〖四〗:目錄條目示意圖

在 ext2 文件系統上增加一個特殊的 inode (日志文件),用于記錄文件系統元數據的變化,即日志 journal ,這就是 EXT3 文件系統。 Ext3 這種粗糙的實現日志的文法付出了很大的代價:寫兩次!

實驗: ext2 和 ext3 文件系統之間的轉換(不需要重新格式化)

1). ext2 轉換成 ext3 文件系統: tune2fs –j /dev/sda2 ;如果 sda 之前已經 mount ,那么該命令執行完后在頂層目錄創建了一個不能刪除和 dump 的日志文件 .journal ,機器重啟或 umount 且 e2fsck 后該文件將被改變成隱藏的特殊日志文件 inode 。如果 /dev/sda2 是啟動時自動 mount 的,那么還需手工修改 /etc/fstab 中/dev/sda2 所對應的文件系統類型,否則還是按 ext2 類型 mount 和使用。

2). ext3 轉換成 ext2 文件系統: umount /dev/sda2; tune2fs –O ^has_journal /dev/sda2; e2fsck –y /dev/sda2; mount –t ext2 /dev/sda2 /mnt; 對于自動 mount 的設備還需修改 /etc/fstab 。

 

2.3ReiserFS 3.6

在香港回歸那年, Hans Reiser 把他的基于平衡樹結構( ReiserFS 3.6 采用 B*tree , B*Tree 查詢速度比B+Tree 要快很多, 最近發布的 ReiserFS 4 采用獨特的舞蹈樹結構)的 ReiserFS 文件系統公布在網上,此后, ReiserFS 文件系統一直在 Hans Reiser 領導的開發小組下開發和發展。 ReiserFS 是一個完全不同于ext2/ext3 的文件系統,日志功能只針對于文件系統的元數據。由于其采用先進的日志機制,且空間復雜度和時間復雜度都優于諸如 ext2 等其他文件系統, 性能直逼高檔 unix (如 AIX )上的高級文件系統, 所以 迅速走紅(目前得到許多 linux 發行商的支持,而 SuSe linux 干脆直接把它作為缺省安裝的文件系統)。ReiserFS 那幫狂熱的維護者每一次升級都會為我們帶來驚喜,正是這種跨越式的發展使得 ReiserFS 幾乎拋棄了那個臭名昭著的 " 向后兼容 " 的理念,每一次的升級都必須重新格式化分區,這成了受他人攻擊的唯一理由(我冤枉啊 !_! )。

ReiserFS 是根據面向對象的思想設計的,由語義層( semantic layer) 和存儲層( storage layer) 組成。語義層主要是對對象命名空間的管理及對象接口的定義,以確定對象的功能。存儲層主要是對磁盤空間的管理。語義層與存儲層是通過鍵( key )聯系的。語義層通過對對象名進行解析生成鍵,存儲層通過鍵找到對象在磁盤上存儲空間,鍵值是全局唯一的。

目前正在使用的是 ReiserFS 3.6 版本,在 32 位機器上最大可支持 2^32-4 個對象,每個對象包含一個對象 ID 和一個鍵。 ReiserFS3.6 文件系統分區的物理布局是這樣的:首先余留 64k (全清 0 ),然后依次是super block (占用 1block )、位圖塊( 1block )、日志(如果日志和數據同在一個設備上,缺省大小為8193blocks )、根和其他節點區(參考圖〖五〗)。缺省塊大小是 4k ,開始時樹高為 2 , 3.6 版樹高不能超過 5 。

 

圖〖五〗: ReiserFS 文件系統分區物理布局

B+Tree 的內部節點(占一個磁盤塊)定義如下:

Linux文件系統EXT2,EXT3,ReiserFS詳解

 

一些小文件( <4KB )直接存放在內部節點中,而大文件存放在葉子節點。

B+Tree 的葉子節點(占若干磁盤塊)的結構如下:

Linux文件系統EXT2,EXT3,ReiserFS詳解

 

對于具體的定義清閱讀源代碼,這里不做深入分析。

如果日志放在其他設備上,那么數據設備上就沒有日志區,而根塊就緊接著位圖塊存放。假如一塊等于4k ,那么超級塊放在第 16 塊(塊編號從 0 開始),位圖從第 17 塊開始存放,緊接著是根。

ReiserFS 超級塊類似于 ext2 的超級塊,里面含有整個文件系統的重要參數,如文件系統總塊數、空閑塊數、根所在的塊號、日志起始塊和大小、塊大小、魔數(缺省日志設備 ReIsEr2Fs ,單獨日志設備 ReIsEr3Fs)、文件系統狀態、樹高、位圖所占塊數等等。

與 ext3 一樣, ReiserFS 也有三種日志模式,即 journal,ordered,writeback 。同時, ReiserFS 引入了兩種日志優化方法: copy-on-capture 和 steal-on-capture 。 copy-on-capture: 當一個事務要修改的塊在另一個未提交的事務中時,就把這個塊復制一份,這樣這兩個事務就可以并發進行了。 steal-on-capture :當一個塊被多個事務修改時,只有最晚提交的那個事務才把這個塊實際寫入文件系統,其他事務都不寫這個塊。

最近發布的 ReiserFS 4 更是給人帶來了許多令人炫目的創新,比如采用舞蹈樹算法進一步把性能推向極致,引入文件系統調用的原子性首次把文件系統操作帶入類似于數據庫的 ACID ( Atomiccity 、 Consistency、 Isolation 、 Durability )領域(將來可能想破壞文件系統也難 (-: ),在同一時刻既可以把一個對象當作一個文件訪問又可以視為一個目錄給苛刻的用戶帶來無限自由,小文件捆綁存儲導致近乎 0% 的磁盤碎塊,內置磁盤寫加密和壓縮功能的想法近乎瘋狂,漫游( wandering )日志法的運用從此不再 " 寫兩次 " ,支持無數個 CPU ,支持插件, 通過刷新分配 (allocate-on-flush) 實現磁盤布局動態優化, …… 。

實驗:

  • 生成一個 100M 文件: dd if=/dev/zero of=/tmp/hda bs=1024 count=100000;
  • 與回環設備建立鏈接: losetup /dev/loop0 /tmp/hda;
  • 創建文件系統: mkreiserfs –l TestingReiserFs /dev/loop0;
  • 查看超級塊內容: reiserfstune /dev/loop0;
  • 查看物理布局: od –t x2 /dev/loop0 | more;
  • 生成一個 10M 文件: dd if=/dev/zero of=/tmp/hdb bs=1024 count=10000;
  • 與回環設備建立聯系: losetup /dev/loop1 /tmp/hdb;
  • 創建文件系統: mkreiserfs –l TestingReiserFs –j /dev/loop1 /dev/loop0;
  • 查看超級塊內容: reiserfstune /dev/loop1 /dev/loop0;
  • 清除現場: losetup –d /dev/loop0;losetup –d /dev/loop1;rm –f /tmp/hd[a,b];

 

3.特征

3.1特性比較表 

注:Kernel 2.6 開始增加了 ACL 支持,當用 mount 設備時如果加參數 -o acl 則開啟相應文件系統的 ACL 支持,例如 mount –t reiserfs –o acl /dev/sda2 /mnt 。在 Linux 系統上能使用 ACLs 是許多 linux 管理員期盼已久的。

3.2 合評價

Ext2 在 linux 上使用已經有很長的歷史了,市面上已經出現了 針對 windows 和 mac OS X 的 ext2 驅動器,允許您直接從這些操作系統中讀取和寫入 ext2 文件系統,這使它成為了共享設備(如移動硬盤)極好的格式。另外 Ext2還 積累了可觀的人氣,與 ext3 和 ReiserFS 相比盡管存在更多的不足,但畢竟成了許多 it 人士的習慣,而且正在許多機器上跑著,盡管跑得有點艱難,想讓其在短時間內從我們眼中消失是不可能的,這一點還真有點類似 windows 桌面!有人說 ext3 與 ext2 的唯一區別就是前者在后者的基礎上增加了日志功能,這話有點偏激。 Ext3 的日志模式有三種,在 mount 時指定, journal 模式日志功能同時作用于數據和元數據,寫操作有點令人難以忍受(如果再在其上跑大型數據庫,我敢肯定那一定是一個蹩腳的系統管理員干的 ^O^ ), ordered 模式只對文件系統元數據的變化記錄日志(數據先寫入磁盤,然后元數據寫入日志),它只對文件系統的完整性負責,而不顧用戶數據,在這種模式下跑數據庫效果不錯,由數據庫負責數據的完整性,雙方各司其責,配合完美, writeback 模式不能保證數據先于元數據寫入磁盤,因此可能存在元數據已經更新但數據沒有更新的情況,傳言這是三種模式中最快的。

先進的日志機制、幾乎 0% 磁盤碎片、支持海量存儲和無限 CPU 輕松管理上億的文件、 " 光速 " 小文件訪問速度,快速的自動修復功能,啟動 X Window 比 ext2/3 快 30% 以上, …… ,這就是目前 ReiserFS 3.6 給人留下的深刻影響。剛剛發布的 ReiserFS 4 更是絕, Benchmark 結果幾乎是樣樣領先, ReiserFS 4 加入 kernel 只是時間問題。據ReiserFS 4 追隨者感嘆,你一旦使用它,想破壞文件系統也難。

分享到:
標簽:Linux EXT2
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定