首頁 > 運動

Linux的檔案系統的基本原理及常見型別

由 SunnyZhang的I世界 發表于 運動2021-10-12

簡介透過這些元資料檔案系統實現了對磁碟空間的管理,最終為使用者提供了簡單易用的介面(使用介面,非API)

linux系統有幾種型別檔案

在計算機出現之前其實就有檔案系統的概念了,此時的檔案系統是指用於管理(儲存和檢索等)紙質檔案的系統。計算機及發明後,檔案系統逐漸專指用於管理儲存介質的系統。它透過簡單的介面給使用者,方便使用者使用儲存裝置。

Linux的檔案系統的基本原理及常見型別

Linux作業系統下的檔案系統基本上也是如此。當我們進入Linux作業系統時,首先看到的是各種型別的目錄(參考一篇文章學會Linux系統目錄管理)和各種檔案。Linux有個理念就是“一切皆檔案”,在Linux作業系統中幾乎所有資源都是以檔案的形式呈現的。比如磁碟是檔案,套接字是檔案,系統配置項也是檔案。所有這些內容在Linux都是透過檔案系統來管理的。

在作業系統中,檔案系統的概念得到了延伸。Linux的檔案系統分為兩類,

一類是真實的檔案系統,用於儲存資料;

另一類是偽檔案系統,這些檔案系統並不會持久化資料。

今天我們將對Linux下的檔案系統進行整體的介紹,讓大家對檔案系統有個概括的瞭解。

檔案系統的使用

在Linux作業系統中檔案系統的使用是非常簡單的。如果使用的是Ubuntu等有圖形介面的作業系統,那麼我們可以透過GUI瀏覽檔案系統。這個跟使用Windows和Mac OS作業系統很像。

從使用者角度來看,檔案系統的檔案被組織成樹形結構。

使用者可以自由的建立目錄和檔案。

Linux的檔案系統的基本原理及常見型別

但是如果是命令列的系統,那麼就沒有圖形介面方便了。但是,從組織形式上來說,也是樹形結構。只不過沒有那麼直觀。如圖我們透過tree命令可以看到檔案系統的內容及結構。

Linux的檔案系統的基本原理及常見型別

當然,上面說的都是檔案系統已經掛載的場景。

有些情況下我們有一個新的磁碟,但並沒有掛載,這個時候怎麼才能使用這塊磁碟呢?

方法也是非常簡單的,只需要做如下幾步:

格式化磁碟,由於Linux支援很多種檔案系統,我們在使用磁碟之前需要使用某種檔案系統進行格式化。比如格式化為Ext4檔案系統,mkfs。ext4 /dev/sdc。

掛載檔案系統,格式化後並不能馬上使用,需要掛載到目錄樹上才可以使用。具體命令是mount /dev/sdc /mnt/ext4_test。

完成上述步驟後,/mnt/ext4_test目錄就是新磁碟的根目錄了,我們可以在其中建立子目錄或者新檔案了。從普通使用者的角度來看,它只是一個子目錄,並不會感知到其是一個新的磁碟,或者檔案系統的具體型別。這一點與Windows有比較大的差異。

檔案系統的基本原理

在作業系統層面,檔案系統是其最關鍵的子系統之一,其核心功能是對儲存資源的管理。也就是說檔案系統是對磁碟(還包括光碟或者磁帶等其它型別的儲存介質)的空間進行管理的。檔案系統對磁碟空間的管理其實還是比較簡單的,就是將大的磁碟空間切割為很小的區域(例如4KB),然後透過對這些小區域的分配和釋放來使用磁碟空間。

雖然檔案系統是一個樹形結構,但是磁碟本身的空間卻是一個扁平的線性儲存空間。以Ext4為例,檔案系統將磁碟劃分為若干個塊組,每個塊組又劃分為若干磁碟塊(可以在格式化時指定,預設是1KB)。

Linux的檔案系統的基本原理及常見型別

為了管理這些磁碟塊,總是需要一些區域來記錄哪些磁碟塊已經被使用了,哪些還沒有被使用。記錄這些資料的資料通常在磁碟的特殊區域,我們稱這些資料為檔案系統的元資料。透過這些元資料檔案系統實現了對磁碟空間的管理,最終為使用者提供了簡單易用的介面(使用介面,非API)。

檔案系統的分類

前文我們介紹了基於儲存介質的本地檔案系統,對其基本原理也做了介紹。其實檔案系統發展到現在,其種類也豐富多樣。比如基於磁碟的普通本地檔案系統除了Ext4外,還包括XFS、ZFS和Btrfs等等。其中Btrfs和ZFS不僅僅可以管理一塊磁碟,還可以實現多塊磁碟的管理,同時實現資料的冗餘管理,這樣可以避免磁碟故障導致的資料丟失。

另一個方面,除了對磁碟資料管理的檔案系統外,還有一些網路檔案系統。也就是說,這些檔案系統看似在本地,但其實資料是在遠端的專門的裝置上。客戶端是透過一些網路協議實現資料的傳輸的。比如NFS和GlusterFS等等檔案系統。

幾十年的發展,檔案系統的種類也非常多,我們沒有辦法一一進行介紹。今天我們就按照大類對主要的檔案系統進行介紹,不足之處還請指教。

本地檔案系統

本地檔案系統是對磁碟空間進行管理的檔案系統。從呈現形態上來看,檔案系統就是一個樹形的目錄結構。前面我們已經介紹了比較多的概念,其本質上就是實現對磁碟空間的管理,實現磁碟線性空間與目錄結構的轉換。

Linux的檔案系統的基本原理及常見型別

從普通使用者的角度來說,主要方便了對磁碟空的使用,降低了使用難度,提高了利用效率。常見的本地檔案系統有Ext4、Btrfs、XFS和ZFS等等。

偽檔案系統

偽檔案系統是對傳統檔案系統的延伸。偽檔案系統並不會持久化資料,而是在記憶體中的檔案系統。它以檔案系統的形態實現使用者與核心資料的互動。比如我們常見的偽檔案系統包括proc、sysfs和configfs等等。

在Linux作業系統中偽檔案系統主要實現核心與使用者態的互動。比如獲取IPv4協議的引數,我們只需要

網路(分散式)檔案系統

網路檔案系統是一種將資料儲存在遠端的檔案系統。網路檔案系統通常分為客戶端和服務端,其中客戶端類似本地檔案系統,而服務端則是對資料進行管理的系統。網路檔案系統的使用與本地檔案系統沒有任何差別,只需要執行mount命令掛載即可。網路檔案系統種類也很多,比如NFS、CephFS和Gluster等。

在使用者層面,完成掛載後的網路檔案系統與本地檔案系統完全一樣,看不出任何差異,對使用者是透明的。網路檔案系統就好像將遠端的檔案系統對映到了本地。

Linux的檔案系統的基本原理及常見型別

如圖是將檔案系統服務中檔案系統對映到客戶端的示意圖。從使用者的角度只是某個子目錄,但實際上讀寫請求需要透過網路轉發到服務端進行處理。

叢集檔案系統

叢集檔案系統也是一種本地檔案系統。與普通本地檔案系統的差異在於其後端磁碟通常是基於網路的SAN裝置,且在多個節點共享(非絕對)。叢集檔案系統可以實現多個節點對磁碟介質的共同訪問。

Linux的檔案系統的基本原理及常見型別

同時,對於叢集檔案系統來說,其最大的特點是多個結點可以同時為應用層提供檔案系統服務。這種常見特別適合用於應用業務多活的場景,透過叢集檔案系統提供高可用叢集機制,避免宕機造成的服務失效情況。

文章後期可能會進行錯誤更正和內容更新,

關注

我們更方便了解內容變化。

Tags:檔案系統磁碟linux本地作業系統