王大拿在給新員工培訓:“無論是使用過Windows作業系統還是Linux作業系統的同學,

相信都知道什麼是檔案系統

。” 趙二狗插嘴到:“

什麼是檔案系統?

” 好吧,我驚呆了!

為什麼要有檔案系統?檔案系統都有那些種類?

給個截圖吧,下面這個都見過吧。一堆資料夾,然後裡面又有一堆檔案,這些東東就是

檔案系統的表象

。那本質是什麼呢?我們知道這些東西其實都是存在磁碟上的,具體磁碟空間是什麼樣的我們並不知道,但檔案系統軟體給我們呈現出來了一個非常清晰的表象,我們可以建立、刪除和複製這些檔案。而實現這些功能是透過一個軟體實現的,

這個軟體就是檔案系統

為什麼要有檔案系統?檔案系統都有那些種類?

什麼是檔案系統

任何技術的出現是為了解決問題,檔案系統也是為了解決某些問題。那檔案系統是為了解決什麼問題呢?

我們有了一個相對形象的概念,檔案系統管理著很多檔案。而這些檔案其實就是資料,這些資料又是儲存在磁碟上的。因此,實質上檔案系統是管理磁碟的軟體系統,它簡化了使用者對磁碟空間的使用方法,並降低了磁碟空間的使用難度,透過更加形象的方式將磁碟中的資料展示給使用者。 趙二狗竊竊私語:“好囉嗦” 大家對磁碟都比較清楚,其實就是儲存資料的地方,我們可以將磁碟與倉庫類比。如圖3所示是一個空倉庫,一個沒有格式化的磁碟就好像一個空倉庫,空間非常大,我們可以隨便使用。

為什麼要有檔案系統?檔案系統都有那些種類?

磁碟的內部雖然非常複雜,但磁碟生產廠商做了很多工作,將磁碟的複雜性掩蓋起來了。對於普通使用者來說,磁碟就是一個線性空間,就好像C語言中的陣列一樣,透過偏移就可以訪問其空間(讀寫資料)。

為什麼要有檔案系統?檔案系統都有那些種類?

但是,我們雖然可以直接訪問磁碟的空間,如果缺乏規劃,那麼使用的最終結果可能是這樣樣子的。資料被毫無規律的放到磁碟上,最後查詢的時候會非常費勁,甚至可能找不到需要的資料。

為什麼要有檔案系統?檔案系統都有那些種類?

因此,檔案系統出現了。檔案系統實現對磁碟空間的統一管理,

一方面檔案系統對磁碟空間進行統一規劃,另外一方面檔案系統提供給普通使用者人性化的介面

。就好比倉庫中的貨架,將空間進行規劃和編排,這樣根據編號可以方便的找到具體的貨物。而檔案系統也是類似,將磁碟空間進行規劃和編號處理,

這樣透過檔名就可以找到具體的資料

,而不用關心資料到底是怎麼儲存的。

為什麼要有檔案系統?檔案系統都有那些種類?

以Ext4檔案系統為例,它將磁碟空間進行劃分,並透過元資料實現對磁碟空間的管理。這樣,使用者對檔案的操作就轉化為檔案系統對磁碟空間的操作。

為什麼要有檔案系統?檔案系統都有那些種類?

也就是說,檔案系統解決了普通使用者使用磁碟儲存資料的問題。

什麼是分散式檔案系統

上面說的是普通本地檔案系統的概念,比如Ext4、XFS、FAT32和Btrfs等檔案系統。這些檔案系統只能在本地進行磁碟格式化並使用。那麼什麼是分散式檔案系統呢?下面是維基百科給出的定義。

相對於本機端的檔案系統而言,

分散式檔案系統

(英語:Distributed file system, DFS),或是

網路檔案系統

(英語:Network File System),是一種允許檔案透過網路在多臺主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。

透過定義我肯可以看出,

分散式檔案系統解決的是資源共享的問題。

我們先看一個例項,以NFS檔案系統為例,它分為服務端和客戶端,客戶端透過某種協議連線到服務端,此時會在客戶端的目錄樹中對映一個子樹,這樣在客戶端就能訪問服務端的檔案系統。然而,對於客戶端來說,這個目錄樹關係是透明的,也就是使用者不知道這些內容是在遠端計算機,也不用關心。

為什麼要有檔案系統?檔案系統都有那些種類?

分散式檔案系統解決的最大的問題是資源共享的問題,因此分散式檔案系統最大的特點是多個客戶端可以訪問相同的服務端。

為什麼要有檔案系統?檔案系統都有那些種類?

NFS可以供多個客戶端訪問,但其畢竟是單機,處理能力是有限的。因此在大規模資料領域,不如電商網站、大資料處理等,採用單機模式無法滿足要求。問題有出來了,為了解決這個問題,谷歌開發了GFS分散式檔案系統,該檔案系統的服務端透過一個叢集來實現,客戶端可以併發的訪問該叢集的多達數萬個節點,因此承載能力得到極大的提升。 如圖10是HDFS的架構圖,HDFS是GFS的開源實現,起基本架構是一樣的。整個叢集的節點分為2中角色,一個是Master節點,負責管理元資料;另外一個是資料節點,負責儲存檔案的資料。在這種架構中,客戶端透過Master節點可以得到檔案資料的具體位置,然後可以直接與資料節點互動。由於資料節點可以很多(數萬個),因此承載能力得到極大的提升。

為什麼要有檔案系統?檔案系統都有那些種類?

除了上述HDFS和GFS等分散式檔案系統外,還有GlusterFS、CephFS等很多分散式檔案系統,但每種分散式檔案系統的細節又有所差異,

這個也是與它們所要解決的具體問題相關的

什麼是叢集檔案系統

雖然分散式檔案系統可以處理高併發訪問的問題,但對於同一個檔案同時寫會存在資料不一致的問題。這個需要客戶端的應用做特殊處理。如圖11所示,客戶端1從服務端讀取的某個檔案的資料,而此時在客戶端進行了追加寫操作,由於網路延遲或者什麼原因,資料並沒有達到服務端。此時,客戶端2讀取了服務端的資料,顯然此時資料是舊資料。如果此時客戶端2進行寫操作,無法保證服務端最終的資料是客戶端1的還是客戶端2的,因此存在不可預料的結果。

為什麼要有檔案系統?檔案系統都有那些種類?

為了解決同一個檔案被不同客戶端的應用併發寫的問題,這個時候開發了叢集檔案系統。其中比較著名的是Oracle的OCFS2檔案系統。OCFS2透過分散式鎖解決了寫併發的問題,如果有程序對某個檔案的區域進行寫操作時會加鎖,這樣其它客戶端如果對相同區域寫資料時就必須等待。這樣,OCFS2檔案系統就保證了資料的一致性。 到此為止,我們介紹檔案系統的原理及市面上常見的各種型別的檔案系統。透過分析我們看到,不同的檔案系統解決的問題是不同的,因此應用場景也是有很大差異的。因此,大家在工作中如果選型時,也需要考慮這些差異。