說說IO(四) 檔案系統

2021-05-27 14:56:42 字數 2564 閱讀 3890

檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性、安全性。如果在分布式環境下,則有相應的分布式檔案系統。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

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...

說說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...