文件系統 操作系統就是處理各種數據的,這些數據在硬碟上就是二進位,人類肯定不能直接看懂這些二進位數據,要有一個翻譯器,將這些二進位的數據還原為人類能看懂的文件形式,這個工作就是由文件系統來完成的,文件系統的目的就是實現數據的查詢和存儲,由於使用場合、使用環境的不同,Linux 有多種文件系統,不同的 ...
文件系統
操作系統就是處理各種數據的,這些數據在硬碟上就是二進位,人類肯定不能直接看懂這些二進位數據,要有一個翻譯器,將這些二進位的數據還原為人類能看懂的文件形式,這個工作就是由文件系統來完成的,文件系統的目的就是實現數據的查詢和存儲,由於使用場合、使用環境的不同,Linux 有多種文件系統,不同的文件系統支持不同的體系。文件系統是管理數據的,而可以存儲數據的物理設備有硬碟、U 盤、SD 卡、NAND FLASH、NOR FLASH、網路存儲設備等。不同的存儲設備其物理結構不同,不同的物理結構就需要不同的文件系統去管理,比如管理 NAND FLASH 的話使用 YAFFS 文件系統,管理硬碟、SD 卡的話就是 ext 文件系統等等。
文件系統類型
Linux 下的文件系統主要有 ext2、ext3、ext4 等文件系統。Linux 還支持其他的 UNIX 文件系統,比如 XFS、JFS、UFS 等,也支持 Windows 的 FAT 文件系統和網路文件系統 NFS 等。主要講一下 Linux 自帶的 ext2、ext3 和 ext4 文件系統。
Linux 系統能夠支持的文件系統非常多,除 Linux 預設文件系統 Ext2、Ext3 和 Ext4 之外,還能支持 fat16、fat32、NTFS(需要重新編譯內核)等 Windows 文件系統。也就是說,Linux 可以通過掛載的方式使用 Windows 文件系統中的數據。Linux 所能夠支持的文件系統在 "/usr/src/kemels/當前系統版本/fs" 目錄中(需要在安裝時選擇),該目錄中的每個子目錄都是一個可以識別的文件系統。我們介紹較為常見的 Linux 支持的文件系統,如表所示。
文件系統 | 描 述 |
---|---|
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 的預設文件系統 |
xfs | 被業界稱為最先進、最具有可升級性的文件系統技術,由 SGI 公司設計,目前最新的 CentOS 7 版本預設使用的就是此文件系統。 |
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 交換分區 |
硬碟是用來存儲數據的,可以將其想象成柜子,只不過柜子是用來存儲衣物的。新買來的硬碟,通常要對其進行分區並格式化,分區就如同把一個大櫃按照要求分割成幾個小柜子(組合衣櫃);格式化就好比在每個小柜子中打入隔斷,決定每個隔斷的大小和位置,然後在櫃門上貼上標簽,標簽中寫清楚每件衣服保存的隔斷的位置和這件衣服的一些特性(比如衣服是誰的,衣服的顏色、大小等)。
很多初學者認為,對硬碟進行格式化,只是清除了硬碟中的數據,其實不然,格式化過程中還向硬碟中寫入了文件系統。因為不同的操作系統,管理系統中文件的方式也不盡相同(給文件設定的屬性和許可權也不完全一樣),因此,為了使硬碟有效存放當前系統中的文件數據,就需要將硬碟進行格式化,令其使用和操作系統一樣(或接近)的文件系統格式。
各操作系統使用的文件系統並不相同,例如,Windows 98 以前的微軟操作系統使用 FAT(FAT16)文件系統,Windows 2000 以後的版本使用 NTFS 文件系統,而 Linux 的正統文件系統是 Ext2。
既然格式化的真實目的是為了寫入文件系統,那麼,Linux 中的文件系統到底是什麼,又是如何運作的呢?
早期的 Linux 使用 Ext2 文件系統格式,CentOS 5.x 預設使用 Ext3,本教程中所用的 CentOS 6.x 預設使用 Ext4,而目前最新的 CentOS 7.x 預設使用 xfs 格式。
由於 xfs 文件系統不是這裡的重點,因為有關 xfs 文件系統,這裡不做深入介紹,感興趣的讀者可自行搜索相關資料。
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 號,從而找到文件的實際數據。
[root@honey-master ~] df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 63G 0 63G 0% /dev
tmpfs tmpfs 63G 176K 63G 1% /dev/shm
tmpfs tmpfs 63G 66M 63G 1% /run
tmpfs tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 219G 50G 169G 23% /
/dev/sdb1 ext4 976M 155M 754M 18% /boot
/dev/sda ext4 3.6T 129G 3.3T 4% /data
tmpfs tmpfs 13G 0 13G 0% /run/user/0
overlay overlay 219G 50G 169G 23% /var/lib/docker/overlay2/fff1390868eaaa40a4b9a60a208ac29827be7651d4d32bb781a47e0d57e1f09c/merged
overlay overlay 219G 50G 169G 23% /var/lib/docker/overlay2/201e22c7ff5e538259c75f3d961073cc8a606d429cbe9adfe2cb20d14fe334b1/merged
本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16338220.html