色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

btrfs:Linux中也終于有了一個可以和ZFS相媲美的文件系統

Linux閱碼場 ? 來源:未知 ? 作者:李倩 ? 2018-04-15 10:59 ? 次閱讀

Btrfs 簡介

文件系統似乎是內核中比較穩定的部分,多年來,人們一直使用 ext2/3,ext 文件系統以其卓越的穩定性成為了事實上的 Linux 標準文件系統。近年來 ext2/3 暴露出了一些擴展性問題,于是便催生了 ext4 。在 2008 年發布的 Linux2.6.19 內核中集成了 ext4 的 dev 版本。 2.6.28 內核發布時,ext4 結束了開發版,開始接受用戶的使用。似乎 ext 就將成為 Linux 文件系統的代名詞。然而當您閱讀很多有關 ext4 的文章時,會發現都不約而同地提到了 btrfs,并認為 ext4 將是一個過渡的文件系統。 ext4 的作者 Theodore Tso 也盛贊 btrfs 并認為 btrfs 將成為下一代 Linux 標準文件系統。 Oracle,IBM, Intel 等廠商也對 btrfs 表現出了極大的關注,投入了資金和人力。為什么 btrfs 如此受人矚目呢。這便是本文首先想探討的問題。

Kevin Bowling[1] 有一篇介紹各種文件系統的文章,在他看來,ext2/3 等文件系統屬于“古典時期”。文件系統的新時代是 2005 年由 Sun 公司的 ZFS 開創的。 ZFS 代表” last word in file system ”,意思是此后再也不需要開發其他的文件系統了。 ZFS 的確帶來了很多嶄新的觀念,對文件系統來講是一個劃時代的作品。

如果您比較 btrfs 的特性,將會發現 btrfs 和 ZFS 非常類似。也許我們可以認為 btrfs 就是 Linux 社區對 ZFS 所作出的回應。從此往后在 Linux 中也終于有了一個可以和 ZFS 相媲美的文件系統。

btrfs 的特性

您可以在 btrfs 的主頁上 [2] 看到 btrfs 的特性列表。我自作主張,將那張列表分成了四大部分。

首先是擴展性 (scalability) 相關的特性,btrfs 最重要的設計目標是應對大型機器對文件系統的擴展性要求。 Extent,B-Tree 和動態 inode 創建等特性保證了 btrfs 在大型機器上仍有卓越的表現,其整體性能而不會隨著系統容量的增加而降低。

其次是數據一致性 (data integrity) 相關的特性。系統面臨不可預料的硬件故障,Btrfs 采用 COW 事務技術來保證文件系統的一致性。 btrfs 還支持 checksum,避免了 silent corrupt 的出現。而傳統文件系統則無法做到這一點。

第三是和多設備管理相關的特性。 Btrfs 支持創建快照 (snapshot),和克隆 (clone) 。 btrfs 還能夠方便的管理多個物理設備,使得傳統的卷管理軟件變得多余。

最后是其他難以歸類的特性。這些特性都是比較先進的技術,能夠顯著提高文件系統的時間 / 空間性能,包括延遲分配,小文件的存儲優化,目錄索引等。

擴展性相關的特性

B-Tree

btrfs 文件系統中所有的 metadata 都由 BTree 管理。使用 BTree 的主要好處在于查找,插入和刪除操作都很高效。可以說 BTree 是 btrfs 的核心。

一味地夸耀 BTree 很好很高效也許并不能讓人信服,但假如稍微花費一點兒時間看看 ext2/3 中元數據管理的實現方式,便可以反襯出 BTree 的優點。

妨礙 ext2/3 擴展性的一個問題來自其目錄的組織方式。目錄是一種特殊的文件,在 ext2/3 中其內容是一張線性表格。如圖 1-1 所示 [6]:

圖 1. ext2 directory [6]

圖 1 展示了一個 ext2 目錄文件的內容,該目錄中包含四個文件。分別是 "home1","usr","oldfile" 和 "sbin" 。如果需要在該目錄中查找目錄 sbin,ext2 將遍歷前三項,直至找到 sbin 這個字符串為止。

這種結構在文件個數有限的情況下是比較直觀的設計,但隨著目錄下文件數的增加,查找文件的時間將線性增長。 2003 年,ext3 設計者開發了目錄索引技術,解決了這個問題。目錄索引使用的數據結構就是 BTree 。如果同一目錄下的文件數超過 2K,inode 中的 i_data 域指向一個特殊的 block 。在該 block 中存儲著目錄索引 BTree 。 BTree 的查找效率高于線性表,

但為同一個元數據設計兩種數據結構總是不太優雅。在文件系統中還有很多其他的元數據,用統一的 BTree 管理是非常簡單而優美的設計。

Btrfs 內部所有的元數據都采用 BTree 管理,擁有良好的可擴展性。 btrfs 內部不同的元數據由不同的 Tree 管理。在 superblock 中,有指針指向這些 BTree 的根。如圖 2 所示:

圖 2. btrfs btree

FS Tree 管理文件相關的元數據,如 inode,dir 等; Chunk tree 管理設備,每一個磁盤設備都在 Chunk Tree 中有一個 item ; Extent Tree 管理磁盤空間分配,btrfs 每分配一段磁盤空間,便將該磁盤空間的信息插入到 Extent tree 。查詢 Extent Tree 將得到空閑的磁盤空間信息; Tree of tree root 保存很多 BTree 的根節點。比如用戶每建立一個快照,btrfs 便會創建一個 FS Tree 。為了管理所有的樹,btrfs 采用 Tree of tree root 來保存所有樹的根節點; checksum Tree 保存數據塊的校驗和。

基于 Extent 的文件存儲

現代很多文件系統都采用了 extent 替代 block 來管理磁盤。 Extent 就是一些連續的 block,一個 extent 由起始的 block 加上長度進行定義。

Extent 能有效地減少元數據開銷。為了進一步理解這個問題,我們還是看看 ext2 中的反面例子。

ext2/3 以 block 為基本單位,將磁盤劃分為多個 block 。為了管理磁盤空間,文件系統需要知道哪些 block 是空閑的。 Ext 使用 bitmap 來達到這個目的。 Bitmap 中的每一個 bit 對應磁盤上的一個 block,當相應 block 被分配后,bitmap 中的相應 bit 被設置為 1 。這是很經典也很清晰的一個設計,但不幸的是當磁盤容量變大時,bitmap 自身所占用的空間也將變大。這就導致了擴展性問題,隨著存儲設備容量的增加,bitmap 這個元數據所占用的空間也隨之增加。而人們希望無論磁盤容量如何增加,元數據不應該隨之線形增加,這樣的設計才具有可擴展性。

下圖比較了 block 和 extent 的區別:

圖 3. 采用 extent 的 btrfs 和采用 bitmap 的 ext2/3

在 ext2/3 中,10 個 block 需要 10 個 bit 來表示;在 btrfs 中則只需要一個元數據。對于大文件,extent 表現出了更加優異的管理性能。

Extent 是 btrfs 管理磁盤空間的最小單位,由 extent tree 管理。 Btrfs 分配 data 或 metadata 都需要查詢 extent tree 以便獲得空閑空間的信息。

動態 inode 分配

為了理解動態 inode 分配,還是需要借助 ext2/3 。下表列舉了 ext2 文件系統的限制:

表 1. ext2 限制

圖 4 顯示了 ext2 的磁盤布局:

圖 4. ext2 layout

在 ext2 中 inode 區是被預先固定分配的,且大小固定,比如一個 100G 的分區中,inode table 區中只能存放 131072 個 inode,這就意味著不可能創建超過 131072 個文件,因為每一個文件都必須有一個唯一的 inode 。

為了解決這個問題,必須動態分配 inode 。每一個 inode 只是 BTree 中的一個節點,用戶可以無限制地任意插入新的 inode,其物理存儲位置是動態分配的。所以 btrfs 沒有對文件個數的限制。

針對 SSD 的優化支持

SSD 是固態存儲 Solid State Disk 的簡稱。在過去的幾十年中,CPU/RAM 等器件的發展始終遵循著摩爾定律,但硬盤 HDD 的讀寫速率卻始終沒有飛躍式的發展。磁盤 IO 始終是系統性能的瓶頸。

SSD 采用 flash memory 技術,內部沒有磁盤磁頭等機械裝置,讀寫速率大幅度提升。 flash memory 有一些不同于 HDD 的特性。 flash 在寫數據之前必須先執行擦除操作;其次,flash 對擦除操作的次數有一定的限制,在目前的技術水平下,對同一個數據單元最多能進行約 100 萬次擦除操作,因此,為了延長 flash 的壽命,應該將寫操作平均到整個 flash 上。

SSD 在硬件內部的微代碼中實現了 wear leveling 等分布寫操作的技術,因此系統無須再使用特殊的 MTD 驅動和 FTL 層。雖然 SSD 在硬件層面做了很多努力,但畢竟還是有限。文件系統針對 SSD 的特性做優化不僅能提高 SSD 的使用壽命,而且能提高讀寫性能。 Btrfs 是少數專門對 SSD 進行優化的文件系統。 btrfs 用戶可以使用 mount 參數打開對 SSD 的特殊優化處理。

Btrfs 的 COW 技術從根本上避免了對同一個物理單元的反復寫操作。如果用戶打開了 SSD 優化選項,btrfs 將在底層的塊空間分配策略上進行優化:將多次磁盤空間分配請求聚合成一個大小為 2M 的連續的塊。大塊連續地址的 IO 能夠讓固化在 SSD 內部的微代碼更好的進行讀寫優化,從而提高 IO 性能。

數據一致性相關的特性

COW 事務

理解 COW 事務,必須首先理解 COW 和事務這兩個術語。

什么是 COW?

所謂 COW,即每次寫磁盤數據時,先將更新數據寫入一個新的 block,當新數據寫入成功之后,再更新相關的數據結構指向新 block 。

什么是事務?

COW 只能保證單一數據更新的原子性。但文件系統中很多操作需要更新多個不同的元數據,比如創建文件需要修改以下這些元數據:

修改 extent tree,分配一段磁盤空間

創建一個新的 inode,并插入 FS Tree 中

增加一個目錄項,插入到 FS Tree 中

任何一個步驟出錯,文件便不能創建成功,因此可以定義為一個事務。

下面將演示一個 COW 事務。

A 是 FS Tree 的根節點,新的 inode 的信息將被插入節點 C 。首先,btrfs 將 inode 插入一個新分配的 block C ’中,并修改上層節點 B,使其指向新的 block C ’;修改 B 也將引發 COW,以此類推,引發一個連鎖反應,直到最頂層的 Root A 。當整個過程結束后,新節點 A ’變成了 FS Tree 的根。但此時事務并未結束,superblock 依然指向 A 。

圖 5. COW transaction 1

接下來,修改目錄項(E 節點),同樣引發這一過程,從而生成新的根節點 A ’’。

圖 6. COW transaction 2

此時,inode 和目錄項都已經寫入磁盤,可以認為事務已經結束。 btrfs 修改 superblock,使其指向 A ’’,如下圖所示:

圖 7. COW transaction 3

COW 事務能夠保證文件系統的一致性,并且系統 Reboot 之后不需要執行 fsck 。因為 superblock 要么指向新的 A ’’,要么指向 A,無論哪個都是一致的數據。

Checksum

Checksum 技術保證了數據的可靠性,避免 silent corruption 現象。由于硬件原因,從磁盤上讀出的數據會出錯。比如 block A 中存放的數據為 0x55,但讀取出來的數據變是 0x54,因為讀取操作并未報錯,所以這種錯誤不能被上層軟件所察覺。

解決這個問題的方法是保存數據的校驗和,在讀取數據后檢查校驗和。如果不符合,便知道數據出現了錯誤。

ext2/3 沒有校驗和,對磁盤完全信任。而不幸的是,磁盤的錯誤始終存在,不僅發生在廉價的 IDE 硬盤上,昂貴的 RAID 也存在 silent corruption 問題。而且隨著存儲網絡的發展,即使數據從磁盤讀出正確,也很難確保能夠安全地穿越網絡設備。

btrfs 在讀取數據的同時會讀取其相應的 checksum 。如果最終從磁盤讀取出來的數據和 checksum 不相同,btrfs 會首先嘗試讀取數據的鏡像備份,如果數據沒有鏡像備份,btrfs 將返回錯誤。寫入磁盤數據之前,btrfs 計算數據的 checksum 。然后將 checksum 和數據同時寫入磁盤。

Btrfs 采用單獨的 checksum Tree 來管理數據塊的校驗和,把 checksum 和 checksum 所保護的數據塊分離開,從而提供了更嚴格的保護。假如在每個數據 block 的 header 中加入一個域保存 checksum,那么這個數據 block 就成為一個自己保護自己的結構。這種結構下有一種錯誤無法檢測出來,比如本來文件系統打算從磁盤上讀 block A,但返回了 block B,由于 checksum 在 block 內部,因此 checksum 依舊是正確的。 btrfs 采用 checksum tree 來保存數據塊的 checksum,避免了上述問題。

Btrfs 采用 crc32 算法計算 checksum,在將來的開發中會支持其他類型的校驗算法。為了提高效率,btrfs 將寫數據和 checksum 的工作分別用不同的內核線程并行執行。

多設備管理相關的特性

每個 Unix 管理員都曾面臨為用戶和各種應用分配磁盤空間的任務。多數情況下,人們無法事先準確地估計一個用戶或者應用在未來究竟需要多少磁盤空間。磁盤空間被用盡的情況經常發生,此時人們不得不試圖增加文件系統空間。傳統的 ext2/3 無法應付這種需求。

很多卷管理軟件被設計出來滿足用戶對多設備管理的需求,比如 LVM 。 Btrfs 集成了卷管理軟件的功能,一方面簡化了用戶命令;另一方面提高了效率。

多設備管理

Btrfs 支持動態添加設備。用戶在系統中增加新的磁盤之后,可以使用 btrfs 的命令將該設備添加到文件系統中。

為了靈活利用設備空間,Btrfs 將磁盤空間劃分為多個 chunk 。每個 chunk 可以使用不同的磁盤空間分配策略。比如某些 chunk 只存放 metadata,某些 chunk 只存放數據。一些 chunk 可以配置為 mirror,而另一些 chunk 則可以配置為 stripe 。這為用戶提供了非常靈活的配置可能性。

Subvolume

Subvolume 是很優雅的一個概念。即把文件系統的一部分配置為一個完整的子文件系統,稱之為 subvolume 。

采用 subvolume,一個大的文件系統可以被劃分為多個子文件系統,這些子文件系統共享底層的設備空間,在需要磁盤空間時便從底層設備中分配,類似應用程序調用 malloc() 分配內存一樣。可以稱之為存儲池。這種模型有很多優點,比如可以充分利用 disk 的帶寬,可以簡化磁盤空間的管理等。

所謂充分利用 disk 的帶寬,指文件系統可以并行讀寫底層的多個 disk,這是因為每個文件系統都可以訪問所有的 disk 。傳統的文件系統不能共享底層的 disk 設備,無論是物理的還是邏輯的,因此無法做到并行讀寫。

所謂簡化管理,是相對于 LVM 等卷管理軟件而言。采用存儲池模型,每個文件系統的大小都可以自動調節。而使用 LVM,如果一個文件系統的空間不夠了,該文件系統并不能自動使用其他磁盤設備上的空閑空間,而必須使用 LVM 的管理命令手動調節。

Subvolume 可以作為根目錄掛載到任意 mount 點。 subvolume 是非常有趣的一個特性,有很多應用。

假如管理員只希望某些用戶訪問文件系統的一部分,比如希望用戶只能訪問 /var/test/ 下面的所有內容,而不能訪問 /var/ 下面其他的內容。那么便可以將 /var/test 做成一個 subvolume 。 /var/test 這個 subvolume 便是一個完整的文件系統,可以用 mount 命令掛載。比如掛載到 /test 目錄下,給用戶訪問 /test 的權限,那么用戶便只能訪問 /var/test 下面的內容了。

快照和克隆

快照是對文件系統某一時刻的完全備份。建立快照之后,對文件系統的修改不會影響快照中的內容。這是非常有用的一種技術。

比如數據庫備份。假如在時間點 T1,管理員決定對數據庫進行備份,那么他必須先停止數據庫。備份文件是非常耗時的操作,假如在備份過程中某個應用程序修改了數據庫的內容,那么將無法得到一個一致性的備份。因此在備份過程中數據庫服務必須停止,對于某些關鍵應用這是不能允許的。

利用快照,管理員可以在時間點 T1 將數據庫停止,對系統建立一個快照。這個過程一般只需要幾秒鐘,然后就可以立即重新恢復數據庫服務。此后在任何時候,管理員都可以對快照的內容進行備份操作,而此時用戶對數據庫的修改不會影響快照中的內容。當備份完成,管理員便可以刪除快照,釋放磁盤空間。

快照一般是只讀的,當系統支持可寫快照,那么這種可寫快照便被稱為克隆。克隆技術也有很多應用。比如在一個系統中安裝好基本的軟件,然后為不同的用戶做不同的克隆,每個用戶使用自己的克隆而不會影響其他用戶的磁盤空間。非常類似于虛擬機。

Btrfs 支持 snapshot 和 clone 。這個特性極大地增加了 btrfs 的使用范圍,用戶不需要購買和安裝昂貴并且使用復雜的卷管理軟件。下面簡要介紹一下 btrfs 實現快照的基本原理。

如前所述 Btrfs 采用 COW 事務技術,從圖 1-10 可以看到,COW 事務結束后,如果不刪除原來的節點 A,C,E,那么 A,C,E,D,F 依然完整的表示著事務開始之前的文件系統。這就是 snapshot 實現的基本原理。

Btrfs 采用引用計數決定是否在事務 commit 之后刪除原有節點。對每一個節點,btrfs 維護一個引用計數。當該節點被別的節點引用時,該計數加一,當該節點不再被別的節點引用時,該計數減一。當引用計數歸零時,該節點被刪除。對于普通的 Tree Root, 引用計數在創建時被加一,因為 Superblock 會引用這個 Root block 。很明顯,初始情況下這棵樹中的所有其他節點的引用計數都為一。當 COW 事務 commit 時,superblock 被修改指向新的 Root A ’’,原來 Root block A 的引用計數被減一,變為零,因此 A 節點被刪除。 A 節點的刪除會引發其子孫節點的引用計數也減一,圖 1-10 中的 B,C 節點的引用計數因此也變成了 0,從而被刪除。 D,E 節點在 COW 時,因為被 A ’’所引用,計數器加一,因此計數器這時并未歸零,從而沒有被刪除。

創建 Snapshot 時,btrfs 將的 Root A 節點復制到 sA,并將 sA 的引用計數設置為 2 。在事務 commit 的時候,sA 節點的引用計數不會歸零,從而不會被刪除,因此用戶可以繼續通過 Root sA 訪問 snapshot 中的文件。

圖 8. Snapshot

軟件 RAID

RAID 技術有很多非常吸引人的特性,比如用戶可以將多個廉價的 IDE 磁盤組合為 RAID0 陣列,從而變成了一個大容量的磁盤; RAID1 和更高級的 RAID 配置還提供了數據冗余保護,從而使得存儲在磁盤中的數據更加安全。

Btrfs 很好的支持了軟件 RAID,RAID 種類包括 RAID0,RAID1 和 RAID10.

Btrfs 缺省情況下對 metadata 進行 RAID1 保護。前面已經提及 btrfs 將設備空間劃分為 chunk,一些 chunk 被配置為 metadata,即只存儲 metadata 。對于這類 chunk,btrfs 將 chunk 分成兩個條帶,寫 metadata 的時候,會同時寫入兩個條帶內,從而實現對 metadata 的保護。

其他特性

Btrfs 主頁上羅列的其他特性不容易分類,這些特性都是現代文件系統中比較先進的技術,能夠提高文件系統的時間或空間效率。

Delay allocation

延遲分配技術能夠減少磁盤碎片。在 Linux 內核中,為了提高效率,很多操作都會延遲。

在文件系統中,小塊空間頻繁的分配和釋放會造成碎片。延遲分配是這樣一種技術,當用戶需要磁盤空間時,先將數據保存在內存中。并將磁盤分配需求發送給磁盤空間分配器,磁盤空間分配器并不立即分配真正的磁盤空間。只是記錄下這個請求便返回。

磁盤空間分配請求可能很頻繁,所以在延遲分配的一段時間內,磁盤分配器可以收到很多的分配請求,一些請求也許可以合并,一些請求在這段延遲期間甚至可能被取消。通過這樣的“等待”,往往能夠減少不必要的分配,也有可能將多個小的分配請求合并為一個大的請求,從而提高 IO 效率。

Inline file

系統中往往存在大量的小文件,比如幾百個字節或者更小。如果為其分配單獨的數據 block,便會引起內部碎片,浪費磁盤空間。 btrfs 將小文件的內容保存在元數據中,不再額外分配存放文件數據的磁盤塊。改善了內部碎片問題,也增加了文件的訪問效率。

圖 9. inline file

上圖顯示了一個 BTree 的葉子節點。葉子中有兩個 extent data item 元數據,分別用來表示文件 file1 和 file2 所使用的磁盤空間。

假設 file1 的大小僅為 15 個字節; file2 的大小為 1M 。如圖所示,file2 采用普通的 extent 表示方法:extent2 元數據指向一段 extent,大小為 1M,其內容便是 file2 文件的內容。

而對于 file1, btrfs 會把其文件內容內嵌到元數據 extent1 中。如果不采用 inline file 技術。如虛線所示,extent1 指向一個最小的 extent,即一個 block,但 file1 有 15 個字節,其余的空間便成為了碎片空間。

采用 inline 技術,讀取 file1 時只需要讀取元數據 block,而無需先讀取 extent1 這個元數據,再讀取真正存放文件內容的 block,從而減少了磁盤 IO 。

得益于 inline file 技術,btrfs 處理小文件的效率非常高,也避免了磁盤碎片問題。

目錄索引 Directory index

當一個目錄下的文件數目巨大時,目錄索引可以顯著提高文件搜索時間。 Btrfs 本身采用 BTree 存儲目錄項,所以在給定目錄下搜索文件的效率是非常高的。

然而,btrfs 使用 BTree 管理目錄項的方式無法同時滿足 readdir 的需求。 readdir 是 POSIX 標準 API,它要求返回指定目錄下的所有文件,并且特別的,這些文件要按照 inode number 排序。而 btrfs 目錄項插入 BTree 時的 Key 并不是 Inode number,而是根據文件名計算的一個 hash 值。這種方式在查找一個特定文件時非常高效,但卻不適于 readdir 。為此,btrfs 在每次創建新的文件時,除了插入以 hash 值為 Key 的目錄項外,還同時插入另外一種目錄項索引,該目錄項索引的 KEY 以 sequence number 作為 BTree 的鍵值。這個 sequence number 在每次創建新文件時線性增加。因為 Inode number 也是每次創建新文件時增加的,所以 sequence number 和 inode number 的順序相同。以這種 sequence number 作為 KEY 在 BTree 中查找便可以方便的得到一個以 inode number 排序的文件列表。

另外以 sequence number 排序的文件往往在磁盤上的位置也是相鄰的,所以以 sequence number 為序訪問大量文件會獲得更好的 IO 效率。

壓縮

大家都曾使用過 zip,winrar 等壓縮軟件,將一個大文件進行壓縮可以有效節約磁盤空間。 Btrfs 內置了壓縮功能。

通常人們認為將數據寫入磁盤之前進行壓縮會占用很多的 CPU 計算時間,必然降低文件系統的讀寫效率。但隨著硬件技術的發展,CPU 處理時間和磁盤 IO 時間的差距不斷加大。在某些情況下,花費一定的 CPU 時間和一些內存,但卻能大大節約磁盤 IO 的數量,這反而能夠增加整體的效率。

比如一個文件不經過壓縮的情況下需要 100 次磁盤 IO 。但花費少量 CPU 時間進行壓縮后,只需要 10 次磁盤 IO 就可以將壓縮后的文件寫入磁盤。在這種情況下,IO 效率反而提高了。當然,這取決于壓縮率。目前 btrfs 采用 zlib 提供的 DEFALTE/INFLATE 算法進行壓縮和解壓。在將來,btrfs 應該可以支持更多的壓縮算法,滿足不同用戶的不同需求。

目前 btrfs 的壓縮特性還存在一些不足,當壓縮使能后,整個文件系統下的所有文件都將被壓縮,但用戶可能需要更細粒度的控制,比如針對不同的目錄采用不同的壓縮算法,或者禁止壓縮。我相信,btrfs 開發團隊將在今后的版本中解決這個問題。

對于某些類型的文件,比如 jpeg 文件,已經無法再進行壓縮。嘗試對其壓縮將純粹浪費 CPU 。為此,當對某文件的若干個 block 壓縮后發現壓縮率不佳,btrfs 將不會再對文件的其余部分進行壓縮操作。這個特性在某種程度上提高了文件系統的 IO 效率。

預分配

很多應用程序有預先分配磁盤空間的需要。他們可以通過 posix_fallocate 接口告訴文件系統在磁盤上預留一部分空間,但暫時并不寫入數據。如果底層文件系統不支持 fallocate,那么應用程序只有使用 write 預先寫一些無用信息以便為自己預留足夠的磁盤空間。

由文件系統來支持預留空間更加有效,而且能夠減少磁盤碎片,因為所有的空間都是一次分配,因而更有可能使用連續的空間。 Btrfs 支持 posix_fallocate 。

總結

至此,我們對 btrfs 的很多特性進行了較為詳細的探討,但 btrfs 能提供的特性卻并不止這些。 btrfs 正處于試驗開發階段,還將有更多的特性。

Btrfs 也有一個重要的缺點,當 BTree 中某個節點出現錯誤時,文件系統將失去該節點之下的所有的文件信息。而 ext2/3 卻避免了這種被稱為”錯誤擴散”的問題。

但無論怎樣,希望您和我一樣,開始認同 btrfs 將是 Linux 未來最有希望的文件系統。

BTRFS 使用簡介

了解了 btrfs 的特性,想必您一定想親身體驗一下 btrfs 的使用。本章將簡要介紹如何使用 btrfs 。

創建文件系統

mkfs.btrfs 命令建立一個 btrfs 格式的文件系統。可以用如下命令在設備 sda5 上建立一個 btrfs 文件系統,并將其掛載到 /btrfsdisk 目錄下:

這樣一個 Btrfs 就在設備 sda5 上建立好了。值得一提的是在這種缺省情況下,即使只有一個設備,Btrfs 也會對 metadata 進行冗余保護。如果有多個設備,那么您可以在創建文件系統的時候進行 RAID 設置。詳細信息請參見后續的介紹。

這里介紹其他幾個 mkfs.btrfs 的參數。

Nodesize 和 leafsize 用來設定 btrfs 內部 BTree 節點的大小,缺省為一個 page 大小。但用戶也可以使用更大的節點,以便增加 fanout,減小樹的高度,當然這只適合非常大的文件系統。

Alloc-start 參數用來指定文件系統在磁盤設備上的起始地址。這使得用戶可以方便的預留磁盤前面的一些特殊空間。

Byte-count 參數設定文件系統的大小,用戶可以只使用設備的一部分空間,當空間不足時再增加文件系統大小。

修改文件系統的大小

當文件系統建立好之后,您可以修改文件系統的大小。 /dev/sda5 掛載到了 /btrfsdisk 下,大小為 800M 。假如您希望只使用其中的 500M,則需要減小當前文件系統的大小,這可以通過如下命令實現:

同樣的,您可以使用 btrfsctl 命令增加文件系統的大小。

創建 Snapshot

下面的例子中,創建快照 snap1 時系統存在 2 個文件。創建快照之后,對 test1 的內容進行修改。再回到 snap1,打開 test1 文件,可以看到 test1 的內容依舊是之前的內容。

可以從上面的例子看到,快照 snap1 保存的內容不會被后續的寫操作所改變。

創建 subvolume

使用 btrfs 命令,用戶可以方便的建立 subvolume 。假設 /btrfsdisk 已經掛載到了 btrfs 文件系統,則用戶可以在這個文件系統內創建新的 subvolume 。比如建立一個 /sub1 的 subvolume,并將 sub1 掛載到 /mnt/test 下:

Subvolme 可以方便管理員在文件系統上創建不同用途的子文件系統,并對其進行一些特殊的配置,比如有些目錄下的文件關注節約磁盤空間,因此需要打開壓縮,或者配置不同的 RAID 策略等。目前 btrfs 尚處于開發階段,創建的 subvolme 和 snapshot 還無法刪除。此外針對 subvolume 的磁盤 quota 功能也未能實現。但隨著 btrfs 的不斷成熟,這些功能必然將會進一步完善。

創建 RAID

mkfs 的時候,可以指定多個設備,并配置 RAID 。下面的命令演示了如何使用 mkfs.btrfs 配置 RAID1 。 Sda6 和 sda7 可以配置為 RAID1,即 mirror 。用戶可以選擇將數據配置為 RAID1,也可以選擇將元數據配置為 RAID1 。

將數據配置為 RAID1,可以使用 mkfs.btrfs 的 -d 參數。如下所示:

添加新設備

當設備的空間快被使用完的時候,用戶可以使用 btrfs-vol 命令為文件系統添加新的磁盤設備,從而增加存儲空間。下面的命令向 /btrfsdisk 文件系統增加一個設備 /sda

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11378

    瀏覽量

    211349

原文標題:新一代 Linux 文件系統 btrfs 簡介-btrfs 的特性和使用

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux文件系統的組成及構建方案

    Linux“三巨頭”已經完成了 2 ,就剩最后 rootfs(根文件系統)
    發表于 10-13 14:21 ?1098次閱讀

    Linux proc文件系統詳解

    篇:《文件系統很多,但這幾個最為重要》介紹procfs(進程文件系統的縮寫),包含
    發表于 06-15 11:42 ?1194次閱讀

    Linux文件系統課程

    本章學習目標理解什么是文件系統了解文件系統工作原理理解Fedora Core Linux文件系統的結構掌握Fedora Core Linux
    發表于 04-10 17:07 ?0次下載

    debian安裝zfs文件系統

    ZFS文件系統的英文名稱為Zettabyte File System,叫動態文件系統,是第一個128位
    的頭像 發表于 02-12 16:47 ?1.1w次閱讀
    debian安裝<b class='flag-5'>zfs</b><b class='flag-5'>文件系統</b>

    簡單介紹Linux虛擬文件系統–VFS

    Linux可以支持多種文件系統,而且支持各種文件系統之間相互訪問,這是因為
    發表于 04-24 14:35 ?1498次閱讀

    在 SSD 上使用 btrfs 文件系統的相關優化

    btrfs 文件系統對 SSD 進行優化,在掛載參數中加入 ssd 即可。該參數不會自動啟用 TRIM/discard。
    發表于 04-27 14:06 ?2963次閱讀

    可以了解的Linux 文件系統結構

    Linux文件是什么?它的文件系統又是什么?那些配置文件又在哪里?我下載好的程序保存在哪里
    發表于 04-27 14:06 ?752次閱讀
    <b class='flag-5'>可以</b>了解的<b class='flag-5'>Linux</b> <b class='flag-5'>文件系統</b>結構

    linux文件系統的虛擬文件系統設計詳解

    Linux 中允許眾多不同的文件系統共存,如 ext2, ext3, vfat 等。通過使用同文件 I/O 系統 調用即可對
    發表于 04-02 14:37 ?1918次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>文件系統</b><b class='flag-5'>中</b>的虛擬<b class='flag-5'>文件系統</b>設計詳解

    Linux系統日志文件的JFS文件系統

    嵌入式linux中文站向大家介紹下JFS文件系統Linux系統日志文件
    發表于 05-05 14:10 ?5136次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>系統</b>日志<b class='flag-5'>文件</b><b class='flag-5'>中</b>的JFS<b class='flag-5'>文件系統</b>

    FESCo正式批準允許Fedora 33桌面變體默認使用Btrfs文件系統

    這項變更要求 Fedora 桌面版本使用 Btrfs 并以“透明的方式”體驗現代文件系統的功能。官方則表示希望增加新的功能,同時減少處理磁盤空間耗盡等情況所需的專業知識。Btrfs 通過設計理念很好地適應
    的頭像 發表于 08-14 16:43 ?1944次閱讀
    FESCo正式批準<b class='flag-5'>了</b>允許Fedora 33桌面變體默認使用<b class='flag-5'>Btrfs</b><b class='flag-5'>文件系統</b>

    Linux文件系統解析

    Linux ,最直觀、最可見的部分就是 文件系統(file system)。下面我們就來起探討下關于
    的頭像 發表于 09-16 11:29 ?2567次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>文件系統</b>解析

    Linux5.11引入Btrfs文件系統的諸多改進和性能提升

    在最新的 Linux 5.11 內核合并窗口中,我們見到了其對于 Btrfs 文件系統的諸多改進和性能提升。首先,btrfs rescue = mount 選項,現已接受使用備份根
    的頭像 發表于 12-16 14:18 ?1570次閱讀
    <b class='flag-5'>Linux</b>5.11引入<b class='flag-5'>Btrfs</b><b class='flag-5'>文件系統</b>的諸多改進和性能提升

    適用于Linux的最佳通用文件系統 Linux文件系統的安裝

    為您的計算機選擇正確的文件系統可能是困難的過程。您可能會想知道:為什么文件系統很重要?有沒有適用于安裝 Linux 的特定
    發表于 08-03 10:22 ?400次閱讀
    適用于<b class='flag-5'>Linux</b>的最佳通用<b class='flag-5'>文件系統</b> <b class='flag-5'>Linux</b><b class='flag-5'>文件系統</b>的安裝

    Linux文件系統特點

    Linux文件系統特點 文件系統要有嚴格的組織形式,使得文件能夠以塊為單位進行存儲。 文件系統
    的頭像 發表于 11-09 14:48 ?1350次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>文件系統</b>特點

    Linux文件系統的掛載過程

    Linux文件系統(rootfs)是Linux系統中所有其他文件系統和目錄的起點,它是內核啟動時掛載的第
    的頭像 發表于 10-05 16:50 ?625次閱讀
    主站蜘蛛池模板: 免费光看午夜请高视频 | 高清视频在线观看SEYEYE | 午夜看片a福利在线观看 | 欧美69xxx | 性白俄罗斯高清xxxxx | 丰满五十六十老熟女HD60 | 超碰97人在线视频 | 儿媳妇完整版视频播放免费观看 | 亚洲第一国产 | 俄罗斯bbbbbbbbb大片 | 日韩精品欧美亚洲高清有无 | 俄罗斯破处 | 99久久国产露脸精品国产麻豆 | 国产久久re6免费热在线 | 在线看无码的免费网站 | 手机观看毛片 | 国产AV无码成人黄网站免费 | 国产睡熟迷奷系列网站 | 被黑人掹躁10次高潮 | 白百合在线观看 | 国产精品1卡二卡三卡四卡乱码 | 成年女人免费影院播放 | 天天国产在线精品亚洲 | 一本道久在线综合色色 | 久久久无码精品亚洲A片软件 | 三级网站视频在线观看 | 在线观看免费精品国产 | 久久r视频 | 少妇被躁爽到高潮无码久久 | 国产午夜精品理论片在线 | 玩弄人妻少妇500系列网址 | 99视频久九热精品 | 色橹橹欧美在线观看视频高清 | A级毛片高清免费网站不卡 a级毛片高清免费视频 | 天天躁日日躁狠狠躁AV麻豆 | 蜜桃臀无码内射一区二区三区 | 美女被黑人巨大进入 | 和尚扒开双腿蹂躏 | 影音先锋男人资源813. | 国产永久免费视频 | 国产麻豆AV伦 |