Btrfs 和 LVM-ext4 該如何選擇?
Fedora 33 在其各類桌面版本中引入了新的默認(rèn)文件系統(tǒng) Btrfs。多年以來,F(xiàn)edora 一直在 邏輯卷管理(LVM) 卷之上使用 ext4,引入 Brtfs 對 Fedora 來說是一個很大的轉(zhuǎn)變。更改默認(rèn)文件系統(tǒng)需要 令人信服的原因。雖然 Btrfs 是令人興奮的下一代文件系統(tǒng),但 LVM 上的 ext4 是成熟而穩(wěn)定的。本指南旨在探索各自的高級特性,使得更容易在 Btrfs 和 LVM-ext4 之間進(jìn)行選擇。
先說結(jié)論
最簡單的建議是堅持使用默認(rèn)值。全新安裝的 Fedora 33 環(huán)境默認(rèn)為 Btrfs,升級之前的 Fedora 版本將繼續(xù)使用最初安裝的設(shè)置,通常是 LVM-ext4。對于現(xiàn)有的 Fedora 用戶來說,獲取 Btrfs 的最簡單方式是全新安裝。然而,全新安裝比簡單升級更具破壞性。除非有特殊需要,否則這種干擾可能是不必要的。Fedora 開發(fā)團隊仔細(xì)考慮了這兩個默認(rèn)值,因此對任何一個選擇都要有信心。
那么其他文件系統(tǒng)呢?
現(xiàn)在有很多 Linux 系統(tǒng)的文件系統(tǒng)。在加上卷管理器、加密方法和存儲機制的組合后,這一數(shù)字呈爆炸式增長。那么,為什么要關(guān)注 btrfs 和 LVM-ext4 呢?對于 Fedora 的用戶來說,這兩種設(shè)置可能是最常見的。在 Fedora 11 中,LVM 之上的 ext4 成為了默認(rèn)磁盤布局,在此之前則使用的是 ext3。
既然 Btrfs 是 Fedora 33 的默認(rèn)設(shè)置,那么絕大多數(shù)現(xiàn)有用戶會考慮是應(yīng)該原地踏步還是向前跳躍。面對全新安裝的 Fedora 33 環(huán)境,有經(jīng)驗的 Linux 用戶可能會想知道是使用這個新的文件系統(tǒng),還是退回到他們熟悉的文件系統(tǒng)。因此,在眾多可能的存儲選項中,許多 Fedora 用戶會想知道如何在 Btrfs 和 LVM-ext4 之間進(jìn)行選擇。
兩者的共性
盡管兩個文件系統(tǒng)之間存在核心差異,但 Btrfs 和 LVM-ext4 實際上有很多共同之處。兩者都是成熟且經(jīng)過充分測試的存儲技術(shù)。從 Fedora Core 的早期開始,就一直在使用 LVM,而 ext4 在 2009 年成為 Fedora 11 的默認(rèn)設(shè)置。Btrfs 在 2009 年并入 Linux 主線內(nèi)核,并且 Facebook 廣泛使用了該文件系統(tǒng)。SUSE Linux Enterprise 12 在 2014 年使其成為默認(rèn)文件系統(tǒng)。因此,它在生產(chǎn)環(huán)境中也有著長久的運行時間。
這兩個系統(tǒng)都能很好地防止因意外停電而導(dǎo)致的文件系統(tǒng)損壞,盡管它們的實現(xiàn)方式不同。它們支持的配置包括使用單盤設(shè)置和跨越多個設(shè)備,并且這兩種配置都能夠創(chuàng)建近乎即時的快照。有各種工具可以幫助管理這兩種系統(tǒng),包括命令行和圖形界面。這兩種解決方案在家用臺式機和高端服務(wù)器上都同樣有效。
LVM-ext4 的優(yōu)勢
LVM 上 ext4 的結(jié)構(gòu)
ext4 文件系統(tǒng) 專注于高性能和可伸縮性,沒有太多額外的花哨之處。它能有效地防止長時間后的碎片化,并當(dāng)碎片化出現(xiàn)后提供了 很好的工具。ext4 之所以堅如磐石,是因為它構(gòu)建在前代的 ext3 文件系統(tǒng)之上,帶來了多年的系統(tǒng)內(nèi)測試和錯誤修復(fù)。
LVM-ext4 環(huán)境中的大多數(shù)高級功能都來自 LVM 本身。LVM 位于文件系統(tǒng)的“下方”,這意味著它支持任何文件系統(tǒng)。邏輯卷(LV)是通用的塊設(shè)備,因此 虛擬機可以直接使用它們。這種靈活性使得每個邏輯卷都可以使用合適的文件系統(tǒng),用合適的選項應(yīng)對各種情況。這種分層方法還遵循了“小工具協(xié)同工作”的 Unix 哲學(xué)。
從硬件抽象出來的卷組(VG)允許 LVM 創(chuàng)建靈活的邏輯卷。每個邏輯卷都提取自同一個存儲池,但具有自己的設(shè)置。調(diào)整卷的大小比調(diào)整物理分區(qū)的大小容易得多,因為沒有數(shù)據(jù)有序放置的限制。LVM 物理卷(PV)可以是任意數(shù)量的分區(qū),甚至可以在系統(tǒng)運行時在設(shè)備之間移動。
LVM 支持只讀和讀寫的 快照,這使得從活動系統(tǒng)創(chuàng)建一致的備份變得很容易。每個快照都有一個定義的大小,更改源卷或快照卷將占用其中的空間。又或者,邏輯卷也可以是稀疏配置池的一部分。這允許快照自動使用池中的數(shù)據(jù),而不是使用在創(chuàng)建卷時定義的固定大小的塊。
有多個磁盤驅(qū)動器的 LVM
當(dāng)有多個設(shè)備時,LVM 才真正大放異彩。它原生支持大多數(shù) RAID 級別,每個邏輯卷可以具有不同的 RAID 級別。LVM 將自動為 RAID 配置選擇適當(dāng)?shù)奈锢碓O(shè)備,或者用戶可以直接指定它?;镜?RAID 支持包括用于性能的數(shù)據(jù)條帶化(RAID0)和用于冗余的鏡像(RAID1)。邏輯卷也可以使用 RAID5、RAID6 和 RAID10 等高級設(shè)置。LVM RAID 支持已經(jīng)成熟,因為 LVM 在底層使用的 設(shè)備映射器(dm) 和 多設(shè)備(md) 內(nèi)核支持, 與 mdadm 使用的一樣。
對于具有快速和慢速驅(qū)動器的系統(tǒng),邏輯卷也可以是 緩存卷。經(jīng)典示例是 SSD 和傳統(tǒng)磁盤驅(qū)動器的組合。緩存卷使用較快的驅(qū)動器來存儲更頻繁訪問的數(shù)據(jù)(或用作寫緩存),而慢速的驅(qū)動器則用于處理大量數(shù)據(jù)。
LVM 中大量穩(wěn)定的功能以及 ext4 的可靠性在既往的使用中早已被證明了。當(dāng)然,功能越多就越復(fù)雜。在配置 LVM 時,要找到合適的功能選項是很有挑戰(zhàn)性的。對于單驅(qū)動器的臺式機系統(tǒng),LVM 的功能(例如 RAID 和緩存卷)不適用。但是,邏輯卷比物理分區(qū)更靈活,快照也很有用。對于正常的桌面使用,LVM 的復(fù)雜性會成為典型的用戶可能遇到的問題恢復(fù)的障礙。
Btrfs 的優(yōu)勢
Btrfs 結(jié)構(gòu)
從前幾代文件系統(tǒng)中學(xué)到的經(jīng)驗指導(dǎo)了構(gòu)建到 Btrfs 的功能設(shè)計。與 ext4 不同,它可以直接跨越多個設(shè)備,因此它具有通常僅在卷管理器中才能找到的功能。它還具有 Linux 文件系統(tǒng)空間中獨有的功能(ZFS 具有相似的功能集,但不要指望它在 Linux 內(nèi)核中出現(xiàn))。
Btrfs 的主要功能
也許最重要的功能是對所有數(shù)據(jù)進(jìn)行校驗和。校驗和與寫時復(fù)制(COW)一起,提供了在意外斷電后確保文件系統(tǒng)完整性的 關(guān)鍵方法。更獨特的是,校驗和可以檢測數(shù)據(jù)本身中的錯誤。悄然的數(shù)據(jù)損壞(有時也稱為 bitrot)比大多數(shù)人意識到的更常見。如果沒有主動驗證,損壞最終可能會傳播到所有可用的備份中。這使得用戶沒有有效的副本。通過透明地校驗所有數(shù)據(jù),Btrfs 能夠立即檢測到任何此類損壞。啟用正確的 dup 或 raid 選項,文件系統(tǒng)也可以透明地修復(fù)損壞。
寫時復(fù)制也是 Btrfs 的基本功能,因為它在提供文件系統(tǒng)完整性和即時子卷快照方面至關(guān)重要。從公共子卷創(chuàng)建快照后,快照會自動共享底層數(shù)據(jù)。另外,事后的重復(fù)數(shù)據(jù)刪除 使用相同的技術(shù)來消除相同的數(shù)據(jù)塊。單個文件可以通過使用 cp
的 reflink 選項 來使用 COW 功能。reflink 副本對于復(fù)制大型文件(例如虛擬機鏡像)特別有用,這些文件往往隨著時間的推移具有大部分相同的數(shù)據(jù)。
Btrfs 支持跨越多個設(shè)備,而無需卷管理器。多設(shè)備支持可提供數(shù)據(jù)鏡像功能以實現(xiàn)冗余和條帶化以提高性能。此外,還實驗性地支持更高級的 RAID 級別,例如 RAID 5 和 RAID 6。與標(biāo)準(zhǔn) RAID 設(shè)置不同,Btrfs 的 RAID1 實際上允許奇數(shù)個設(shè)備。例如,它可以使用 3 個設(shè)備,即使它們的大小不同。
所有 RAID 和 dup 選項都是在文件系統(tǒng)級別指定的。因此,各個子卷不能使用不同的選項。請注意,使用多設(shè)備的 RAID1 選項意味著即使一個設(shè)備發(fā)生故障,卷中的所有數(shù)據(jù)都是可用的,并且校驗功能可以保持?jǐn)?shù)據(jù)本身的完整性。這超出了當(dāng)前典型的 RAID 設(shè)置所能提供的范圍。
附加功能
Btrfs 還支持快速簡便的遠(yuǎn)程備份。子卷快照可以 發(fā)送到遠(yuǎn)程系統(tǒng) 進(jìn)行存儲。通過利用文件系統(tǒng)中固有的 COW 元數(shù)據(jù),這些傳輸通過僅發(fā)送先前發(fā)送的快照中的增量更改而非常有效。諸如 snapper 之類的用戶應(yīng)用程序使管理這些快照變得容易。
另外,Btrfs 卷可以具有 透明壓縮 功能,并且 chattr +c 可以標(biāo)記進(jìn)行壓縮的單個文件或目錄。壓縮不僅可以減少數(shù)據(jù)消耗的空間,還可以通過減少寫入操作量來幫助延長 SSD 的壽命。壓縮當(dāng)然會帶來額外的 CPU 開銷,但是有很多選項就可以權(quán)衡取舍。
Btrfs 集成了文件系統(tǒng)和卷管理器功能,這意味著總體維護(hù)比 LVM-ext4 更簡單。當(dāng)然,這種集成的靈活性較低,但是對于大多數(shù)臺式機甚至服務(wù)器而言,設(shè)置已足夠。
LVM 上使用 Btrfs
Btrfs 可以 就地轉(zhuǎn)換 ext3/ext4 文件系統(tǒng)。就地轉(zhuǎn)換意味著無需將數(shù)據(jù)復(fù)制出來然后再復(fù)制回去。數(shù)據(jù)塊本身甚至都不需要修改。因此,對于現(xiàn)有的 LVM-ext4 系統(tǒng),一種選擇是將 LVM 保留在原處,然后簡單地將 ext4 轉(zhuǎn)換為 Btrfs。雖然可行且受支持,但有一些原因使它不是最佳選擇。
Btrfs 的吸引力之一是與卷管理器集成的文件系統(tǒng)所帶來的更輕松的管理。要是在 LVM 之上運行,對于系統(tǒng)維護(hù),仍然要對額外的卷管理器進(jìn)行一些設(shè)置。同樣,LVM 設(shè)置通常具有多個固定大小的邏輯卷,并具有獨立文件系統(tǒng)。雖然 Btrfs 支持給定的計算機上的多個卷,但是許多不錯的功能都需要單一卷具有多個子卷。如果每個 LVM 卷都有一個獨立的 Btrfs 卷,則用戶仍然需要手動管理固定大小的 LVM 卷。雖然能夠收縮掛載的 Btrfs 文件系統(tǒng)的能力確實使處理固定大小的卷的工作變得更輕松。通過在線收縮功能,就無需啟動 實時鏡像 了。
在使用 Btrfs 的多設(shè)備支持時,必須仔細(xì)考慮邏輯卷的物理位置。對于 Btrfs 而言,每個邏輯卷都是一個單獨的物理設(shè)備,如果實際情況并非如此,則某些數(shù)據(jù)可用性功能可能會做出錯誤的決定。例如,如果單個驅(qū)動器發(fā)生故障,對數(shù)據(jù)使用 RAID1 通??梢蕴峁┍Wo(hù)。如果實際邏輯卷在同一物理設(shè)備上,則沒有冗余。
如果強烈需要某些特定的 LVM 功能,例如原始塊設(shè)備或高速緩存的邏輯卷,則在 LVM 之上運行 Btrfs 是有意義的。在這種配置下,Btrfs 仍然提供其大多數(shù)優(yōu)點,例如校驗和和易于發(fā)送的增量快照。盡管使用 LVM 會產(chǎn)生一些操作開銷,但 Btrfs 的這種開銷并不比任何其他文件系統(tǒng)大。
總結(jié)
當(dāng)嘗試在 Btrfs 和 LVM-ext4 之間進(jìn)行選擇時,沒有一個正確的答案。每個用戶都有獨特的要求,并且同一用戶可能擁有具有不同需求的不同系統(tǒng)??匆幌旅總€配置的功能集,并確定是否有令人心動的功能。如果沒有,堅持默認(rèn)值沒有錯。選擇這兩種設(shè)置都有很好的理由。