Btrfs 文件系統入門
好幾年前 Btrfs 就已經可以在 Linux 中使用了,所以你可能已經熟悉它了。如果沒有,你可能對它尚有疑慮,尤其是如果你使用的是 Fedora 工作站 (Btrfs 現在是它的默認文件系統)。本文旨在幫助你熟悉它及其高級功能,例如 寫時複製 和 校驗和。
Btrfs 是 「B-Tree Filesystem」 的縮寫,實際上是文件系統和卷管理器的結合體。它通常被視為對 ZFS 的回應,ZFS 早在 2005 年就被引入 Sun 微系統的 Solaris 操作系統中,現在基本上被一個名為 OpenZFS 的開源實現所取代。Ubuntu 和 FreeBSD 常常使用 OpenZFS。其他具有類似特性的示例有紅帽的 Stratis 和 Linux 邏輯卷管理器 (LVM)。
安裝
為了嘗試 Btrfs,我下載了 Fedora 33 工作站 ISO 文件 並將其安裝到一個新的虛擬機(VM)中。安裝過程與以前的版本沒有變化。我沒有自定義任何設置,包括驅動器分區和格式化,以保持本教程的準確「開箱即用」設置。當虛擬機啟動並運行後,我安裝並運行了 GNOME 分區編輯器(GParted),以獲得一個良好的、工廠級的驅動器布局視圖。
![GParted's view of Btrfs on Fedora 33 Workstation using GParted](/data/attachment/album/202105/30/070234u1vajnxp7d5jam43.png "GParted's view of Btrfs on Fedora 33 Workstation using GParted")
從安裝這一點來說,與你以前所習慣的情況沒什麼不同;事實上,你可以正常使用該系統,甚至可能沒有注意到文件系統是 Btrfs。然而,擁有這個新的默認文件系統使你能夠利用幾個很酷的特性。
檢查 Btrfs 文件系統
我暫時沒有找到特定於 Btrfs 的圖形工具,儘管它的一些功能已經被合併到現有的磁碟管理工具中。
在命令行中,你可以更仔細地查看 Btrfs 格式:
# btrfs filesystem show
Label: 'fedora_localhost-live' uuid: f2bb02f9-5c41-4c91-8eae-827a801ee58a
Total devices 1 FS bytes used 6.36GiB
devid 1 size 10.41GiB used 8.02GiB path /dev/vda3
修改 Btrfs 標籤
我首先注意到的是安裝程序設置的文件系統標籤:fedora_localhost-live
。這是不準確的,因為它現在是一個已安裝的系統,不再是 livecd。所以我使用 btrfs filesystem label
命令對其進行了更改。
修改 Btrfs 標籤非常的簡單:
# btrfs filesystem label /
fedora_localhost-live
# btrfs filesystem label / fedora33workstation
# btrfs filesystem label /
fedora33workstation
管理 Btrfs 子卷
子卷看起來像是可以由 Btrfs 管理的標準目錄。我的新 Fedora 33 工作站上有幾個子卷:
# btrfs subvolume list /
ID 256 gen 2458 top level 5 path home
ID 258 gen 2461 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
使用 btrfs subvolume Create
命令創建新的子卷,或使用 btrfs subvolume delete
刪除子卷:
# btrfs subvolume create /opt/foo
Create subvolume '/opt/foo'
# btrfs subvolume list /
ID 256 gen 2884 top level 5 path home
ID 258 gen 2888 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
ID 276 gen 2888 top level 258 path opt/foo
# btrfs subvolume delete /opt/foo
Delete subvolume (no-commit): '/opt/foo'
子卷允許設置配額、拍攝快照以及複製到其他位置和其他主機等操作。那麼系統管理員如何利用這些功能?用戶主目錄又是如何操作的呢?
添加用戶
就像從前一樣,添加一個新的用戶帳戶會創建一個主目錄供該帳戶使用:
# useradd student1
# getent passwd student1
student1:x:1006:1006::/home/student1:/bin/bash
# ls -l /home
drwx------. 1 student1 student1 80 Oct 29 00:21 student1
傳統上,用戶的主目錄是 /home
的子目錄。所有權和操作權是為所有者量身定製的,但是特殊功能來沒有管理它們。而企業伺服器環境是另外一種情況。通常,目錄是為特定的應用程序及其用戶保留的。你可以利用 Btrfs 來管理和應用對這些目錄的約束。
為了將 Btrfs 子卷作為用戶主頁,在 useradd
命令中有一個新選項:--Btrfs-subvolume-home
。儘管手冊頁尚未更新(截至本文撰寫之時),但你可以通過運行 useradd --help
來查看該選項。通過在添加新用戶時傳遞此選項,將創建一個新的 Btrfs 子卷。它的功能與創建常規目錄時的 -d
選項類似:
# useradd --btrfs-subvolume-home student2
Create subvolume '/home/student2'
使用 getent passwd student2
驗證用戶,它將顯示為正常。但是,運行 btrfs subvolume
命令列出子卷,你將看到一些有趣的內容:新用戶的主目錄!
# btrfs subvolume list /
ID 256 gen 2458 top level 5 path home
ID 258 gen 2461 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
ID 272 gen 2459 top level 256 path home/student2
探索企業伺服器環境的第二個場景。假設你需要在 /opt
中安裝一個 WildFly 伺服器並部署一個 Java web 應用程序。通常,你的第一步是創建一個 wildfly
用戶。使用新的 --btrfs-subvolume-home
選項和 -b
選項來指定 /opt
作為基本目錄:
# useradd -b /opt --btrfs-subvolume-home wildfly
Create subvolume '/opt/wildfly'
於是,wildfly
用戶可以使用了,並且主目錄設置在了 /opt/wildfly
。
刪除用戶
刪除用戶時,有時需要同時刪除該用戶的文件和主目錄。userdel
命令有 -r
選項,它可以同時刪除 Btrfs 子卷:
# userdel -r student2
Delete subvolume (commit): '/home/student2'
設置磁碟使用配額
在我的一節計算機科學課上,一個學生運行了一個失控的 C 程序,然後寫進了磁碟,將我們院的 Unix 系統上整個 /home
目錄都填滿了!在管理員終止失控進程並清除一些空間之前,伺服器將無法使用。上述情況也是如此;那個 Wildfly 企業應用程序將為其用戶提供越來越多的日誌文件和內容存儲。如何防止伺服器因磁碟已滿而死機?設置磁碟使用限制是個好主意。幸運的是,Btrfs 通過設置配額的方式支持這一點。
配置配額需要幾個步驟。第一步是在 Btrfs 文件系統上啟用配額:
# btrfs quota enable /
確保你知道每個子卷的配額組(qgroup)ID 號,該編號由 btrfs subvolume list
命令顯示。每個子卷都需要基於 ID 號碼來關聯配額組。這可以通過 btrfs qgroup create
單獨完成,但是,btrfs 維基提供了以下命令來加快為文件系統上的子卷創建配額組:
> btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} <path>
在新安裝的 Fedora 33 工作站系統中,你在根文件系統路徑上操作,/
。用根路徑替換 <path>
:
# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /
然後運行 btrfs quota rescan
,查看新的配額組:
# btrfs quota rescan /
quota rescan started
# btrfs qgroup show /
qgroupid rfer excl
-------- ---- -0/5 16.00KiB 16.00KiB
0/256 272.04MiB 272.04MiB
0/258 6.08GiB 6.08GiB
0/265 16.00KiB 16.00KiB
0/271 16.00KiB 16.00KiB
0/273 16.00KiB 16.00KiB
於是現在,你可以將配額分配給其中一個配額組,然後將配額應用於其關聯的子卷。因此,如果要將 student3
的主目錄使用限制為 1 GB,請使用 btrfs qgroup limit
命令:
# btrfs qgroup limit 1G /home/student3
查看特定子卷的配額:
# btrfs qgroup show -reF /home/student3
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- -----0/271 16.00KiB 16.00KiB 1.00GiB none
稍有不同的選項參數將顯示所有配額組和設置的所有配額:
# btrfs qgroup show -re /
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- -----0/5 16.00KiB 16.00KiB none none
0/256 272.04MiB 272.04MiB none none
0/258 6.08GiB 6.08GiB none none
0/265 16.00KiB 16.00KiB none none
0/271 16.00KiB 16.00KiB 1.00GiB none
0/273 16.00KiB 16.00KiB none none
其他特性
這些例子提供了 Btrfs 特性的一些思考。運行 btrfs --help
查看命令的完整列表。還有許多其他值得注意的功能;例如,快照和發送/接收是兩個值得學習的功能。
總結討論
Btrfs 為向 Linux 提供高級文件系統特性集貢獻了很多特性。這不是第一次;我知道 ZFS 在大約 15 年前引入了這種類型的文件系統,但是 Btrfs 是完全開源的,不受專利的限制。
如果你想探索這個文件系統,我建議從虛擬機或備用系統開始。
我想能夠出現一些圖形化的管理工具,為那些喜歡用圖形工具的系統管理員提供便利。幸運的是,Btrfs 具有強大的開發活動,Fedora 33 項目決定將其設置為工作站上的默認值就證明了這一點。
via: https://opensource.com/article/20/11/btrfs-linux
作者:Alan Formy-Duval 選題:lujun9972 譯者:Chao-zhi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive