說說IO(四) 檔案系統

2021-08-07 09:49:40 字數 3528 閱讀 7810

檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性、安全性。如果在分布式環境下,則有相應的分布式檔案系統。 linux 上有 ext 系列, windows 上有 fat 和 ntfs 。如圖為乙個 linux 下檔案系統的結構。

其中 vfs ( virtual file system )是 linux kernel 檔案系統的乙個模組,簡單看就是乙個 adapter ,對下遮蔽了下層不同檔案系統之間的差異,對上為作業系統提供了統一的介面 .

中間部分為各個不同檔案系統的實現。

再往下是 buffer cache 和 driver 。

檔案系統的結構

各種檔案系統實現方式不同,因此效能、管理性、可靠性等也有所不同。下面為 linux ext2 ( ext3 )的乙個大致檔案系統的結構。

boot block 存放了引導程式。

super block 存放了整個檔案系統的一些全域性引數,如:卷名、狀態、塊大小、塊總數。他在檔案系統被 mount 時讀入記憶體,在 umount 時被釋放。

上圖描述了 ext2 檔案系統中很重要的三個資料結構和他們之間的關係。

inode : inode 是檔案系統中最重要的乙個結構。如圖,他裡面記錄了檔案相關的所有資訊,也就是我們常說的 meta 資訊。包括:檔案型別、許可權、所有者、大小、 atime 等。 inode 裡面也儲存了指向實際檔案內容資訊的索引。其中這種索引分幾類:

如圖:

directory

代表了檔案系統中的目錄,包括了當前目錄中的所有

inode

資訊。其中每行只有兩個資訊,乙個是檔名,乙個是其對應的

inode

。需要注意,

directory

不是檔案系統中的乙個特殊結構,他實際上也是乙個檔案,有自己的

inode

,而它的檔案內容資訊裡面,包括了上面看到的那些檔名和

inode

的對應關係。如下圖:

data block 即存放檔案的時間內容塊。 data block 大小必須為磁碟的資料塊大小的整數倍,磁碟一般為 512 位元組,因此data block 一般為 1k 、 2k 、 4k 。

buffer cache

buffer & cache

雖然 buffer 和 cache 放在一起了,但是在實際過程中 buffer 和 cache 是完全不同了。 buffer 一般對於寫而言,也叫「緩衝區」,緩衝使得多個小的資料塊能夠合併成乙個大資料塊,一次性寫入; cache 一般對於讀而且,也叫「快取」,避免頻繁的磁碟讀取。如圖為 linux 的 free 命令,其中也是把 buffer 和 cache 進行區分,這兩部分都算在了 free 的記憶體。

buffer cache 中的快取,本質與所有的快取都是一樣,資料結構也是類似,下圖為 vxsf 的乙個 buffer cache 結構。

這個資料結構與 memcached 和 oracle sga 的 buffer 何等相似。左側的 hash chain 完成資料塊的定址,上方的的鍊錶記錄了資料塊的狀態。

buffer vs direct i/o

檔案系統的 buffer 和 cache 在某些情況下確實提高了速度,但是反之也會帶來一些負面影響。一方面檔案系統增加了乙個中間層,另外一方面,當 cache 使用不當、配置不好或者有些業務無法獲取 cache 帶來的好處時, cache 則成為了一種負擔。

適合 cache 的業務:序列的大資料量業務,如: nfs 、 ftp 。

不適合 cache 的業務:隨機 io 的業務。如: oracle ,小檔案讀取。

塊裝置、字元裝置、裸裝置

這幾個東西看得很暈,找了一些資料也沒有找到很準確的說明。

從硬體裝置的角度來看,

從作業系統的角度看(對應作業系統的裝置檔案型別的 b 和 c ),

# ls -l /dev/*lv

brw-------    1 root      system        22,   2 may 15 2007   lv

crw-------    2 root      system        22,   2 may 15 2007   rlv

如上,相比之下,字元裝置在使用更為直接,而塊裝置更為靈活。檔案系統一般建立在塊裝置上,而為了追求高效能,使用字元裝置則是更好的選擇,如 oracle 的裸裝置使用。

裸裝置

裸裝置也叫裸分割槽,就是沒有經過格式化、沒有檔案系統的一塊儲存空間。可以寫入二進位制內容,但是內容的格式、其中資訊的組織等問題,需要使用它的人來完成。檔案系統就是建立在裸裝置之上,並完成裸裝置空間的管理。

cio

cio 即並行 io ( concurrent io )。在檔案系統中,當某個檔案被多個程序同時訪問時,就出現了 inode 競爭的問題。一般地,讀操作使用的共享鎖,即:多個讀操作可以併發進行,而寫操作使用排他鎖。當鎖被寫程序占用時,其他所有操作均阻塞。因此,當這樣的情況出現時,整個應用的效能將會大大降低。如圖:

cio 就是為了解決這個問題。而且 cio 帶來的效能提高直逼裸裝置。當檔案系統支援 cio 並開啟 cio 時, cio 缺省會開啟檔案系統的 direct io ,即:讓 io 操作不經過 buffer 直接進行底層資料操作。由於不經過資料 buffer ,在檔案系統層面就無需考慮資料一致性的問題,因此,讀寫操作可以並行執行。

在最終進行資料儲存的時候,所有操作都會序列執行, cio 把這個事情交個了底層的 driver 。

說說IO(四) 檔案系統

檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性 安全性。如果在分布式環境下,則有相應的分布式檔案系統。linux上有ext系列,windows上有fat和ntfs。如圖為乙個linux下檔案系統的結構。其中vfs virtual file system 是linux ke...

說說IO(四) 檔案系統

linux cache 資料結構 檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性 安全性。如果在分布式環境下,則有相應的分布式檔案系統。linux上有ext系列,windows上有fat和ntfs。如圖為乙個linux下檔案系統的結構。其中vfs virtual file...

實驗四 檔案系統

實驗四 檔案系統 一 實驗目的 1 熟悉linux檔案系統的檔案和目錄結構,掌握linux檔案系統的基本特徵 2 模擬實現linux檔案系統的簡單i o流操作 備份檔案。二 實驗內容 1 瀏覽linux系統根目錄下的子目錄,熟悉每個目錄的檔案和功能 2 設計程式模擬實現linux檔案系統的簡單i o...