首頁 > linux教程 > Linux文件系統管理 閱讀:0更新時間:2020-03-28 01:00:28

Linux文件系統詳解

硬盤是用來存儲數據的,可以將其想象成柜子,只不過柜子是用來存儲衣物的。新買來的硬盤,通常要對其進行分區并格式化,分區就如同把一個大柜按照要求分割成幾個小柜子(組合衣柜);格式化就好比在每個小柜子中打入隔斷,決定每個隔斷的大小和位置,然后在柜門上貼上標簽,標簽中寫清楚每件衣服保存的隔斷的位置和這件衣服的一些特性(比如衣服是誰的,衣服的顏色、大小等)。

很多初學者認為,對硬盤進行格式化,只是清除了硬盤中的數據,其實不然,格式化過程中還向硬盤中寫入了文件系統。因為不同的操作系統,管理系統中文件的方式也不盡相同(給文件設定的屬性和權限也不完全一樣),因此,為了使硬盤有效存放當前系統中的文件數據,就需要將硬盤進行格式化,令其使用和操作系統一樣(或接近)的文件系統格式。

各操作系統使用的文件系統并不相同,例如,Windows 98 以前的微軟操作系統使用 FAT(FAT16)文件系統,Windows 2000 以后的版本使用 NTFS 文件系統,而 linux 的正統文件系統是 Ext2。 

既然格式化的真實目的是為了寫入文件系統,那么,Linux 中的文件系統到底是什么,又是如何運作的呢?

在 CentOS 6.3 系統中,默認的文件系統是 Ext4,它是 Ext3(Ext2) 文件系統的升級版,在性能、伸縮性和可靠性方面進行了大量改進,變化可以說是翻天覆地的,比如:
  • 向下兼容 Ext3;
  • 最大 1EB 文件系統和 16TB 文件;
  • 無限數量子目錄;
  • Extents 連續數據塊概念;
  • 多塊分配、延遲分配、持久預分配;
  • 快速 FSCK、日志校驗、無日志模式、在線碎片整理、inode 增強、默認啟用 barrier 等;

不同的文件系統,其運作模式和操作系統的文件數據有關。拿 Linux 操作系統中的文件為例,文件數據不僅包括文件中的內容,還包含非常多的文件屬性,例如文件的 rwx 權限以及文件所有者、所屬組、創建時間等。

通常情況下,文件系統會將文件的實際內容和屬性分開存放:
  • 文件的屬性保存在 inode 中(i 節點)中,每個 inode 都有自己的編號。每個文件各占用一個 inode。不僅如此,inode 中還記錄著文件數據所在 block 塊的編號;
  • 文件的實際內容保存在 block 中(數據塊),類似衣柜的隔斷,用來真正保存衣物。每個 block 都有屬于自己的編號。當文件太大時,可能會占用多個 block 塊。
  • 另外,還有一個 super block(超級塊)用于記錄整個文件系統的整體信息,包括 inode 和 block 的總量、已經使用量和剩余量,以及文件系統的格式和相關信息等。

由此我們可以推斷出,只要能找到文件 inode 所在的位置,自然就能知道這個文件存放數據的 block 號,從而找到文件的實際數據。整個過程如圖 1 所示。
文件系統的數據存取示意圖
圖 1 文件系統的數據存取示意圖
圖 1 中,文件系統先格式化出 inode 和 block 塊,假設某文件的權限和屬性信息存放到 inode 4 號位置,這個 inode 記錄了實際存儲文件數據的 block 號有 4 個,分別為 2、7、13、15,由此,操作系統就能快速地找到文件數據的存儲位置。

這種管理文件的系統稱為索引式文件系統,Linux 文件系統(Ext 系列)就屬于索引式文件系統。

注意,inode 節點并不存儲文件的文件名,因為文件名是文件所在目錄的數據,所以會保存在上一級目錄的 block 塊中。前面章節在講權限命令的時候說過,要對文件的上一級目錄擁有 w 權限,才能刪除目錄中的文件,就是因為文件名是保存在目錄的 block 中的。

Linux支持的常見文件系統

Linux 系統能夠支持的文件系統非常多,除 Linux 默認文件系統 Ext2、Ext3 和 Ext4 之外,還能支持 fat16、fat32、NTFS(需要重新編譯內核)等 Windows 文件系統。也就是說,Linux 可以通過掛載的方式使用 Windows 文件系統中的數據。Linux 所能夠支持的文件系統在 "/usr/src/kemels/當前系統版本/fs" 目錄中(需要在安裝時選擇),該目錄中的每個子目錄都是一個可以識別的文件系統。我們介紹較為常見的 Linux 支持的文件系統,如表 1 所示。

文件系統 描 述
Ext Linux 中最早的文件系統,由于在性能和兼容性上具有很多缺陷,現在已經很少使用
Ext2 是 Ext 文件系統的升級版本,Red Hat Linux 7.2 版本以前的系統默認都是 Ext2 文件系統。于 1993 年發布,支持最大 16TB 的分區和最大 2TB 的文件(1TB=1024GB=1024x1024KB)
Ext3 是 Ext2 文件系統的升級版本,最大的區別就是帶日志功能,以便在系統突然停止時提高文件系統的可靠性。支持最大 16TB 的分區和最大 2TB 的文件
Ext4 是 Ext3 文件系統的升級版。Ext4 在性能、伸縮性和可靠性方面進行了大量改進。Ext4 的變化可以說是翻天覆地的,比如向下兼容 Ext3、最大 1EB 文件系統和 16TB 文件、無限數量子目錄、Extents 連續數據塊 概念、多塊分配、延遲分配、持久預分配、快速 FSCK、日志校驗、無日志模式、在線碎片整理、inode 增強、默認啟用 barrier 等。它是 CentOS 6.3 的默認文件系統
swap swap 是 Linux 中用于交換分區的文件系統(類似于 Windows 中的虛擬內存),當內存不夠用時,使用交換分區暫時替代內存。一般大小為內存的 2 倍,但是不要超過 2GB。它是 Linux 的必需分區
NFS NFS 是網絡文件系統(Network File System)的縮寫,是用來實現不同主機之間文件共享的一種網絡服務,本地主機可以通過掛載的方式使用遠程共享的資源
iso9660 光盤的標準文件系統。Linux 要想使用光盤,必須支持 iso9660 文件系統
fat 就是 Windows 下的 fatl6 文件系統,在 Linux 中識別為 fat
vfat 就是 Windows 下的 fat32 文件系統,在 Linux 中識別為 vfat。支持最大 32GB 的分區和最大 4GB 的文件
NTFS 就是 Windows 下的 NTFS 文件系統,不過 Linux 默認是不能識別 NTFS 文件系統的,如果需要識別,則需要重新編譯內核才能支持。它比 fat32 文件系統更加安全,速度更快,支持最大 2TB 的分區和最大 64GB 的文件
ufs Sun 公司的操作系統 Solaris 和 SunOS 所采用的文件系統
proc Linux 中基于內存的虛擬文件系統,用來管理內存存儲目錄 /proc
sysfs 和 proc —樣,也是基于內存的虛擬文件系統,用來管理內存存儲目錄 /sysfs
tmpfs 也是一種基于內存的虛擬文件系統,不過也可以使用 swap 交換分區
本小節的內容基于底層,不是很好理解。如果大家實在看不明白,也沒有關系,這一小節的內容并不影響對 Linux 的操作和使用,也不影響我們后面的學習。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩