從 Ext 到 F2FS,Linux 文件系統與存儲技術全面解析

與 Windows 和 macOS 操作系統不同,Linux 是由愛好者社區開發的大型開源項目。它的代碼始終可供那些想要做出貢獻的人使用,任何人都可以根據個人需求自由調整它,或在其基礎上創建自己的發行版本。這就是為什么 Linux 存在如此多的變體,它的文件系統也是如此。該內核支持多種存儲格式,但最常用的是?Ext?系列、XFSBtrfsF2FS、JFS?和?ReiserFS?的格式。

內容:

  • Ext
  • XFS
  • Btrfs
  • F2FS
  • JFS
  • ReiserFS
  • Linux 的其他存儲技術

Ext

Ext(擴展文件系統)是第一個專門為 Linux 設計的格式。但是,它存在嚴重的性能限制,并很快被?Ext2?取代。此文件系統及其后來的修訂版 (Ext3?和?Ext4) 成為大多數 Linux 發行版的默認選擇。

Ext2 因其基于 inode 概念的結構而被證明效率更高。這樣的索引描述符保留特定對象(如文件或目錄)的屬性,并指向其底層數據的位置。Ext2 中的空間被劃分為多個塊,這些塊形成更大的單元,稱為塊組。有關所有塊組的信息由位于 Superblock 后面的 Descriptor Table 維護。每個塊組將 inode 保留在自己的 inode 表中。它還使用 Block 和 Inode Bitmaps 監控其塊和 inode 的狀態。同時,文件或目錄的名稱并不構成其 inode 的一部分 – 名稱通過目錄映射到相應的 inode 編號,實現為一種特殊類型的文件。

大多數 Linux 文件系統都類似,因為名稱不被視為屬性,而是定義為某個目錄中文件的別名。文件對象可以從多個位置鏈接,并以不同的名稱存在(所謂的硬鏈接)。這可能會導致在文件刪除或邏輯損壞后恢復文件名時出現嚴重甚至無法克服的困難。

Ext3 實際上是支持日志功能的 Ext2 的升級版本。Ext3 中的日志被組織為日志文件,它記錄了對文件系統的所有更改,并在發生崩潰時保護它免受損壞。

Ext4 是對 Ext4 的改進,它將數據分配方法從單個塊更改為擴展數據塊。它背后的想法是將文件的大部分數據寫入一個連續的區域,然后只記下它第一個塊的地址和序列中的塊數。最多可以將四個擴展數據塊直接存儲在 inode 中,而其余擴展數據塊則以 B+樹的形式排列。此外,Ext4 會推遲作,直到數據實際提交到磁盤,從而能夠最大限度地減少碎片。

總的來說,它被認為是最靈活的通用文件系統類型之一,也獲得了堅實穩定性的聲譽。

XFS 系列

XFS(擴展文件系統)是另一種非常成熟的文件系統,最初由 Silicon Graphics 創建并應用于該公司的 IRIX 服務器。2001 年,它進入 Linux 內核,現在大多數 Linux 發行版都支持它,其中一些發行版(如 Red Hat Enterprise Linux)甚至默認使用它。

此 FS 類型針對在單個主機上存儲非常大的文件和卷進行了優化。它將存儲空間拆分為大小相等的區域,稱為 Allocation Groups。它們中的每一個都像一個不同的文件系統,即有自己的 Superblock,管理自己的結構和空間使用。后者是在 B+樹的幫助下控制的,其中一個記錄連續自由空間區域中的第一個塊,另一個 - 它組成的塊數。存儲塊使用相同的基于范圍的方法分配給文件。XFS 中的所有文件和目錄都由其單獨的 inode 表示。擴展的分配可以直接存儲在 inode 中,或者由鏈接到它的另一個 B+tree 跟蹤,以防文件非常大或碎片化。就像 Ext 中的 inode 一樣,它們不包含名稱,這些名稱僅在相應的目錄條目中可用。

XFS 為其元數據的任何更新部署日志原則。在實際塊被修改之前,所有更改都會先寫入日志,這樣可以在發生任何事故時立即恢復。通常,這種文件系統類型設計為具有高度可擴展性,并且在服務器硬件上運行得非常好。

Btrfs

Btrfs(B-tree 文件系統)由 Oracle 開發,是 Linux 最流行的新一代格式之一。

Btrfs 經過調整,可在多種設備中運行,從智能手機到高端服務器。此外,它還包含邏輯卷管理器的功能,能夠分布在多個存儲中,以及無數其他高級可能性。

Btrfs 嚴重依賴 B 樹結構,每個結構都由內部節點和葉子組成。內部節點指向子節點或葉,而葉包含包含一些信息的項。項目的實際布局和內容取決于給定 B 樹的類型。根 B 樹(其位置在 Superblock 中可用)具有對其余 B 樹的引用。塊 B 樹管理邏輯到物理地址的映射,而設備 B 樹則相反地將底層設備上的物理塊鏈接到它們的虛擬地址。文件系統 B 樹負責文件和文件夾的分配。小文件就存儲在內部范圍項目中。較大的數據塊放置在外部的連續區域(稱為擴展數據塊)中。在這種情況下,區項將引用保存文件數據的所有區。目錄項包括文件名并指向其 inode 項。反過來,inode 項用于其他屬性,如大小、權限等。

Btrfs 是一種寫入時復制 (CoW) 文件系統。它不使用日志,而是在修改塊之前復制塊,然后將此數據寫入不同的空閑位置。此機制有助于消除更新中斷(例如,由于斷電)時數據損壞的風險。多虧了它和各種其他吸引人的功能,Btrfs 在現代 Linux 用戶中找到了越來越多的追隨者。

F2FS 系列

F2FS(Flash 友好文件系統)專為基于 NAND 閃存的存儲設備而設計,因此在現代智能手機和可移動存儲介質中的應用最為廣泛。

F2FS 基于對數結構文件系統方法 (LFS) 工作,并考慮了閃存存儲的特性,例如恒定訪問時間和有限數量的數據重寫周期。F2FS 不是創建一個大塊進行寫入,而是將這些塊組裝成并發寫入的單獨塊(最多 6 個)。

它將其存儲空間劃分為固定大小的段。連續的分段構成一個區域,多個分段構成一個區域。其中的數據分配是在節點的幫助下執行的。后者有三種類型:直接、間接和 inode。inode 存儲元數據,包括名稱、大小和其他文件的屬性;直接節點指示其數據塊的位置,而間接節點指向其他節點中的塊。這些節點的物理地址可以在節點地址表 (NIT) 中找到。內容本身存儲在 Main Area 中。其中的部分將數據塊與包含服務信息的節點塊分開。所有塊的使用狀態都由區段信息表 (SIT) 記錄。Segment Summary Area (SSA) 指定將哪些數據塊分配給哪個節點。

當可用分段用完時,F2FS 會在系統處于非活動狀態時在后臺自行清理。清理算法根據 SIT 或其使用時間的塊數選擇受害者段。

所描述的組織使 F2FS 在固態存儲上表現相當不錯。然而,到目前為止,它主要應用于便攜式設備,很少在臺式機和服務器機器上遇到。

JFS

JFS(日志文件系統)由 IBM 于 1990 年創建,在開源后發布并移植到 Linux。

JFS 卷由稱為 Allocation Groups 的區域組成,每個區域都包含一個或多個 FileSet。所有文件和目錄都由其各自的 inode 描述,而數據內容則由一個或多個擴展數據塊表示。所有盤區都由專用的 B+tree 編制索引。小型目錄的內容存儲在其 inode 中,而較大的目錄則組織為 B+樹。B+樹還控制存儲空間的使用:第一個樹存儲可用擴展的起始塊,第二個樹 - 可用擴展的數量。JFS 還包含一個單獨的日志區域,并在元數據發生更改時寫入該區域。

通常,JFS 被認為是一種快速可靠的文件系統。然而,它很少看到任何增強功能,現在已經不再使用,被更現代的選擇所超越。

ReiserFS 系列

ReiserFS 是一種替代 Linux 格式,針對存儲大量小文件進行了優化。它最初由 Namesys 于 2001 年設計,并帶來了許多新功能,這些功能在推出時非常具有創新性。然而,由于某些技術問題,最終它的維護工作被移交給了志愿者。

ReiserFS 圍繞 S+tree 進行組織,該樹由內部節點和葉節點組成。此結構用于管理所有文件、目錄和元數據。它包含四種基本類型的項目:直接、間接、目錄和統計項目。直接項保存實際數據,間接項僅鏈接到某些數據塊,目錄項表示目錄中的條目,統計項包含文件和文件夾的屬性。每個項目都有其唯一的鍵,用于在樹中查找它。此鍵包括項目的標識符、地址和類型。

不占用整個塊的文件和文件片段被合并,并直接存儲在 S+tree 的葉節點中。這種機制稱為尾部包裝,它有助于減少空間浪費和碎片的數量。此外,ReiserFS 不會直接對 S+tree 進行任何更改 – 它首先將它們寫入 Journal,然后復制到存儲上所需的位置。

總而言之,ReiserFS 具有良好的搜索功能,并支持小文件的緊湊分配。但是,這種格式不再受到積極支持,并且在不久的將來不太可能保持相關性。

Linux 的其他存儲技術

Linux 文件系統通常是自包含的,與普通獨立驅動器一起使用時,直接在分區上運行。但是,其他技術也可能在物理存儲和 Linux 文件系統之間分層,以提供更高級的功能。其中一些,如 Btrfs,通過將某些功能集成到其核心功能中來更進一步,最大限度地減少對額外層的需求。

以下是 Linux 文件系統可能結合使用的一些最常見的存儲技術:

  • 邏輯卷管理器?(LVM) – 一種磁盤管理技術,與傳統分區相比,可實現更靈活、更高效的存儲容量分配。它與大多數 Linux 文件系統兼容,包括 Ext2、Ext3、Ext4、XFS、Btrfs、F2FS、JFS 和 ReiserFS。在它的幫助下,可以創建跨越多個物理存儲設備的存儲池,并在它們之上設置可調節的邏輯卷。精簡配置是 LVM 的一項特殊功能,它允許通過動態分配空間來優化存儲使用,但僅當實際數據寫入卷時。在這種情況下,使用專用的 “thin pool” 作為源,并在其中創建的卷稱為 “thin volumes”。此類卷的虛擬大小可能超過精簡池中的實際可用空間量。
  • mdadm?– 用于創建和管理軟件 RAID 的 Linux 實用程序。它將多個物理驅動器組合到一個邏輯單元中,可以提高存儲性能和/或實現容錯能力。mdadm 支持各種 RAID 級別,包括 RAID 0(條帶化)、RAID 1(鏡像)、RAID 5(帶奇偶校驗的條帶化)、RAID 6(雙奇偶校驗)和 RAID 10(條帶鏡像)。生成的 RAID 集在 Linux 中顯示為單個邏輯塊設備,并且可以使用內核支持的任何文件系統進行格式化。
  • LUKS(Linux 統一密鑰設置) – 在 Linux 中加密塊設備的標準,如果沒有正確的加密密鑰,就無法訪問存儲在它們上的數據。LUKS 與廣泛的 Linux 文件系統兼容,包括 Ext2、Ext3、Ext4、XFS、Btrfs、F2FS、JFS 和 ReiserFS。此外,它還可以與其他 Linux 存儲技術(如 LVM 或 mdadm)結合使用,以便在這些系統管理的卷之上提供分層加密。
  • eCryptfs?– 一種 Linux 原生加密文件系統。它允許加密卷中的單個目錄或文件,而無需應用全盤加密。作為“堆疊”文件系統運行,eCryptfs 將其加密分層在現有文件系統之上,同時保留底層 FS 結構。這樣,標準的 Linux 文件系統(如 Ext2、Ext3、Ext4、XFS、Btrfs、F2FS、JFS 或 ReiserFS)仍然負責管理數據塊和其他元數據,而 eCryptfs 確保在訪問文件時對文件的內容進行加密或解密。
  • Btrfs-RAID?– 嵌入到 Btrfs 文件系統中的 RAID 功能。它允許用戶從多個存儲設備配置靈活的容錯存儲卷。Btrfs 支持多種 RAID 級別,包括 RAID 0(條帶化)、RAID 1(鏡像)、RAID 5(帶奇偶校驗的條帶化)、RAID 6(雙奇偶校驗)和 RAID 10(條帶鏡像)。與傳統 RAID 不同,Btrfs-RAID 可以動態添加、刪除或更換陣列中的驅動器,而無需使系統脫機。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76215.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76215.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76215.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode:3210. 找出加密后的字符串(python3解法)

難度:簡單 給你一個字符串 s 和一個整數 k。請你使用以下算法加密字符串: 對于字符串 s 中的每個字符 c,用字符串中 c 后面的第 k 個字符替換 c(以循環方式)。 返回加密后的字符串。 示例 1: 輸入&#xff…

JVM詳解(曼波腦圖版)

(?ω?)ノ 好噠!曼波會用最可愛的比喻給小白同學講解JVM,準備好開啟奇妙旅程了嗎?(??????)? 📌 思維導圖 ━━━━━━━━━━━━━━━━━━━ 🍎 JVM是什么?(蘋果式比…

ZStack文檔DevOps平臺建設實踐

(一)前言 對于軟件產品而言,文檔是不可或缺的一環。文檔能幫助用戶快速了解并使用軟件,包括不限于特性概覽、用戶手冊、API手冊、安裝部署以及場景實踐教程等。由于軟件與文檔緊密耦合,面對業務的瞬息萬變以及軟件的飛…

Git創建分支操作指南

1. 創建新分支但不切換&#xff08;僅創建&#xff09; git branch <分支名>示例&#xff1a;創建一個名為 new-feature 的分支git branch new-feature2. 創建分支并立即切換到該分支 git checkout -b <分支名> # 傳統方式 # 或 git switch -c <分支名&g…

package.json 中的那些版本數字前面的符號是什么意思?

1. 語義化版本&#xff08;SemVer&#xff09; 語義化版本的格式是 MAJOR.MINOR.PATCH&#xff0c;其中&#xff1a; MAJOR&#xff1a;主版本號&#xff0c;表示不兼容的 API 修改。MINOR&#xff1a;次版本號&#xff0c;表示新增功能但保持向后兼容。PATCH&#xff1a;修訂號…

如何有效防止服務器被攻擊

首先&#xff0c;我們要明白服務器被攻擊的危害有多大。據不完全統計&#xff0c;每年因服務器遭受攻擊而導致的經濟損失高達數十億。這可不是一個小數目&#xff0c;就好比您辛苦積攢的財富&#xff0c;瞬間被人偷走了一大半。 要有效防止服務器被攻擊&#xff0c;第一步就是…

Chainlit 快速構建Python LLM應用程序

背景 chainlit 是一款簡單易用的Web UI goggle&#xff0c;它支持使用 Python 語言快速構建 LLM 應用程序&#xff0c;提供了豐富的功能&#xff0c;包括文本分析&#xff0c;情感分析等。 這里我們以官網openai提供的例子&#xff0c;快速的開發一個帶有UI的聊天界面&#xf…

華為OD機試真題——硬件產品銷售方案(2025A卷:100分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析&#xff1b; 并提供Java、python、JavaScript、C、C語言、GO六種語言的最佳實現方式&#xff01; 2025華為OD真題目錄全流程解析/備考攻略/經驗分享 華為OD機試真題《硬件產品…

【數據結構_6】雙向鏈表的實現

一、實現MyDLinkedList&#xff08;雙向鏈表&#xff09; package LinkedList;public class MyDLinkedList {//首先我們要創建節點&#xff08;因為雙向鏈表和單向鏈表的節點不一樣&#xff01;&#xff01;&#xff09;static class Node{public String val;public Node prev…

做Data+AI的長期主義者,加速全球化戰略布局

在Data與AI深度融合的新紀元&#xff0c;唯有秉持長期主義方能真正釋放數智化的深層價值。2025年是人工智能從技術爆發轉向規模化落地的關鍵節點&#xff0c;也是標志著袋鼠云即將迎來十周年的重要里程碑。2025年4月16日&#xff0c;袋鼠云成功舉辦了“做DataAI的長期主義者——…

構建基于PHP和MySQL的解夢系統:設計與實現

引言 夢境解析一直是人類心理學和文化研究的重要領域。隨著互聯網技術的發展,構建一個在線的解夢系統能夠幫助更多人理解自己夢境的含義。本文將詳細介紹如何使用PHP和MySQL構建一個功能完整的解夢系統,包括系統架構設計、數據庫模型、核心功能實現以及優化策略。 本文源碼下…

【桌面】【系統應用】Samba共享文件夾

目錄 場景一&#xff1a;銀河麒麟桌面與銀河麒麟桌面之間共享文件夾 環境準備 實現目標 操作步驟 &#xff08;一&#xff09;配置主機A共享文件夾 1、環境準備 2、在主機A創建共享文件夾 3、設置共享文件密碼 &#xff08;二&#xff09;主機B訪問主機A 場景二&…

OpenCV 圖形API(37)圖像濾波-----分離過濾器函數sepFilter()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 應用一個可分離的線性濾波器到一個矩陣&#xff08;圖像&#xff09;。 該函數對矩陣應用一個可分離的線性濾波器。也就是說&#xff0c;首先&a…

webpack理解與使用

一、背景 webpack的最初目標是實現前端工程的模塊化&#xff0c;旨在更高效的管理和維護項目中的每一個資源。 最早的時候&#xff0c;我們通過文件劃分的方式實現模塊化&#xff0c;也就是將每個功能及其相關狀態數據都放在一個JS文件中&#xff0c;約定每個文件就是一個獨立…

rac環境下,增加一個控制文件controlfile

先關閉節點二&#xff0c;在節點一上操作 1、查看控制文件個數和路徑 SQL> show parameter control 2、備份參數文件 SQL> create pfile/home/oracle/orcl.pfile20250417 from spfile; 3、修改控制文件參數 SQL> alter system set contr…

git安裝(windows)

通過網盤分享的文件&#xff1a;資料(1) 鏈接: https://pan.baidu.com/s/1MAenYzcQ436MlKbIYQidoQ 提取碼: evu6 點擊next 可修改安裝路徑 默認就行 一般從命令行調用&#xff0c;所以不用創建。 用vscode&#xff0c;所以這么選擇。

Spring Boot整合難點?AI一鍵生成全流程解決方案

在當今的軟件開發領域&#xff0c;Spring Boot 憑借其簡化開發流程、快速搭建項目的優勢&#xff0c;成為了眾多開發者的首選框架。然而&#xff0c;Spring Boot 的整合過程并非一帆風順&#xff0c;常常會遇到各種難點。而飛算 JavaAI 的出現&#xff0c;為解決這些問題提供了…

Python批量處理PDF圖片詳解(插入、壓縮、提取、替換、分頁、旋轉、刪除)

目錄 一、概述 二、 使用工具 三、Python 在 PDF 中插入圖片 3.1 插入圖片到現有PDF 3.2 插入圖片到新建PDF 3.3 批量插入多張圖片到PDF 四、Python 提取 PDF 圖片及其元數據 五、Python 替換 PDF 圖片 5.1 使用圖片替換圖片 5.2 使用文字替換圖片 六、Python 實現 …

山東大學軟件學院創新項目實訓開發日志(15)之中醫知識問答歷史對話查看bug處理后端信息響應成功但前端未獲取到

在開發中醫知識問答歷史對話查看功能的時候&#xff0c;出現了前后端信息獲取異同的問題&#xff0c;在經過非常非常非常艱難的查詢之后終于解決了這一問題&#xff0c;而這一問題的罪魁禍首就是后端沒有setter和getter方法&#xff01;&#xff01;&#xff01;&#xff01;&a…

Arkts應用全局UI狀態存儲和持久化V2(AppStorageV2、PersistenceV2和@Type)

目錄 應用全局UI狀態存儲和持久化V2版本 AppStorageV2 connect remove keys 示例 使用限制 PersistenceV2 connect remove keys save notifyOnError 示例 使用限制 Type 使用限制 應用全局UI狀態存儲和持久化V2版本 以下實例AppStorageV2、PersistenceV2和裝飾…