Btrfs⽂件系统⼊门
Btrfs ⽂件系统⼊门
B-tree ⽂件系统(Btrfs)融合了⽂件系统和卷管理器。它为 Linux 操作系统提供了⾼级⽂件系统应当拥有的诸多不错的功能特性。
好⼏年前 Btrfs 就已经可以在 Linux 中使⽤了,所以你可能已经熟悉它了。如果没有,你可能对它尚有疑虑,尤其是如果你使⽤的是 Fedora ⼯作站 (Btrfs 现在是它的默认⽂件系统)。本⽂旨在帮助你熟悉它及其⾼级功能,例如 写时复制 和 校验和。
Btrfs 是 “B-Tree Filesystem” 的缩写,实际上是⽂件系统和卷管理器的结合体。它通常被视为对 ZFS 的回应,ZFS 早在 2005 年就被引⼊Sun 微系统的 Solaris 操作系统中,现在基本上被⼀个名为 OpenZFS 的开源实现所取代。Ubuntu 和 FreeBSD 常常使⽤ OpenZFS。其他具有类似特性的⽰例有红帽的 Stratis 和 Linux <ruby>逻辑卷管理器<rt>Logical Volume Manager</rt></ruby>(LVM)。
安装
为了尝试 Btrfs,我下载了 Fedora 33 ⼯作站 ISO ⽂件 并将其安装到⼀个新的虚拟机(VM)中。安装过程与以前的版本没有变化。我没有⾃定义任何设置,包括驱动器分区和格式化,以保持本教程的准确“开
箱即⽤”设置。当虚拟机启动并运⾏后,我安装并运⾏了 GNOME 分区编辑器(GParted),以获得⼀个良好的、⼯⼚级的驱动器布局视图。
GParted's view of Btrfs on Fedora 33 Workstation using GParted
GParted’s view of Btrfs on Fedora 33 Workstation using GParted
从安装这⼀点来说,与你以前所习惯的情况没什么不同;事实上,你可以正常使⽤该系统,甚⾄可能没有注意到⽂件系统是 Btrfs。然⽽,拥有这个新的默认⽂件系统使你能够利⽤⼏个很酷的特性。
检查 Btrfs ⽂件系统
我暂时没有到特定于 Btrfs 的图形⼯具,尽管它的⼀些功能已经被合并到现有的磁盘管理⼯具中。
在命令⾏中,你可以更仔细地查看 Btrfs 格式:
1. # btrfs filesystem show
2. Label: 'fedora_localhost-live' uuid: f2bb02f9-5c41-4c91-8eae-827a801ee58a
3. Total devices 1 FS bytes used 6.36GiB
4. devid 1 size 10.41GiB used 8.02GiB path /dev/vda3
修改 Btrfs 标签
我⾸先注意到的是安装程序设置的⽂件系统标签:fedora_localhost-live。这是不准确的,因为它现在是⼀个已安装的系统,不再是 livecd。所以我使⽤ btrfs filesystem label 命令对其进⾏了更改。
修改 Btrfs 标签⾮常的简单:
1. # btrfs filesystem label /
2. fedora_localhost-live
3. # btrfs filesystem label / fedora33workstation
4. # btrfs filesystem label /
5. fedora33workstation
管理 Btrfs ⼦卷
⼦卷看起来像是可以由 Btrfs 管理的标准⽬录。我的新 Fedora 33 ⼯作站上有⼏个⼦卷:
1. # btrfs subvolume list /
2. ID 256 gen 2458 top level 5 path home
3. ID 258 gen 2461 top level 5 path root
4. ID 265 gen 1593 top level 258 path var/lib/machines
使⽤ btrfs subvolume Create 命令创建新的⼦卷,或使⽤ btrfs subvolume delete 删除⼦卷:
1. # btrfs subvolume create /opt/foo
2. Create subvolume '/opt/foo'
3. # btrfs subvolume list /
4. ID 256 gen 2884 top level 5 path home
5. ID 258 gen 2888 top level 5 path root
6. ID 265 gen 1593 top level 258 path var/lib/machines
7. ID 276 gen 2888 top level 258 path opt/foo
8. # btrfs subvolume delete /opt/foo
9. Delete subvolume (no-commit): '/opt/foo'
⼦卷允许设置配额、拍摄快照以及复制到其他位置和其他主机等操作。那么系统管理员如何利⽤这些功能?⽤户主⽬录⼜是如何操作的呢?
添加⽤户
就像从前⼀样,添加⼀个新的⽤户帐户会创建⼀个主⽬录供该帐户使⽤:
1. # useradd student1
2. # getent passwd student1
3. student1:x:1006:1006::/home/student1:/bin/bash
4. # ls -l /home
5. drwx------. 1 student1 student1 80 Oct 29 00:21 student1
传统上,⽤户的主⽬录是 /home 的⼦⽬录。所有权和操作权是为所有者量⾝定制的,但是特殊功能来没有管理它们。⽽企业服务器环境是另外⼀种情况。通常,⽬录是为特定的应⽤程序及其⽤户保留的。你可以利⽤ Btrfs 来管理和应⽤对这些⽬录的约束。
为了将 Btrfs ⼦卷作为⽤户主页,在 useradd 命令中有⼀个新选项:--Btrfs-subvolume-home。尽管⼿册页尚未更新(截⾄本⽂撰写之时),但你可以通过运⾏ useradd --help 来查看该选项。通过在添加新⽤户时传递此选项,将创建⼀个新的 Btrfs ⼦卷。它的功能与创建常规⽬录时的 -d
选项类似:
1. # useradd --btrfs-subvolume-home student2
2. Create subvolume '/home/student2'
使⽤ getent passwd student2 验证⽤户,它将显⽰为正常。但是,运⾏ btrfs subvolume 命令列出⼦卷,你将看到⼀些有趣的内容:新⽤户的主⽬录!
1. # btrfs subvolume list /
2. ID 256 gen 2458 top level 5 path home
3. ID 258 gen 2461 top level 5 path root
4. ID 265 gen 1593 top level 258 path var/lib/machines
5. ID 272 gen 2459 top level 256 path home/student2
探索企业服务器环境的第⼆个场景。假设你需要在 /opt 中安装⼀个 WildFly 服务器并部署⼀个 Java web 应⽤程序。通常,你的第⼀步是创建⼀个 wildfly ⽤户。使⽤新的 --btrfs-subvolume-home 选项和 -b 选项来指定 /opt 作为基本⽬录:
1. # useradd -b /opt --btrfs-subvolume-home wildfly
2. Create subvolume '/opt/wildfly'
ubuntu使用入门教程
于是,wildfly ⽤户可以使⽤了,并且主⽬录设置在了 /opt/wildfly。
删除⽤户
删除⽤户时,有时需要同时删除该⽤户的⽂件和主⽬录。userdel 命令有 -r 选项,它可以同时删除 Btrfs ⼦卷:
1. # userdel -r student2
2. Delete subvolume (commit): '/home/student2'
设置磁盘使⽤配额
在我的⼀节计算机科学课上,⼀个学⽣运⾏了⼀个失控的 C 程序,然后写进了磁盘,将我们院的 Unix 系统上整个 /home ⽬录都填满了!在管理员终⽌失控进程并清除⼀些空间之前,服务器将⽆法使⽤。上述情况也是如此;那个 Wildfly 企业应⽤程序将为其⽤户提供越来越多的⽇志⽂件和内容存储。如何防⽌服务器因磁盘已满⽽死机?设置磁盘使⽤限制是个好主意。幸运的是,Btrfs 通过设置配额的⽅式⽀持这⼀点。
配置配额需要⼏个步骤。第⼀步是在 Btrfs ⽂件系统上启⽤配额:
1. # btrfs quota enable /
确保你知道每个⼦卷的配额组(qgroup)ID 号,该编号由 btrfs subvolume list 命令显⽰。每个⼦卷都需要基于 ID 号码来关联配额组。这可以通过 btrfs qgroup create 单独完成,但是,btrfs 维基提供了以下命令来加快为⽂件系统上的⼦卷创建配额组:
1. > btrfs subvolume list \<path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \<path>
在新安装的 Fedora 33 ⼯作站系统中,你在根⽂件系统路径上操作,/。⽤根路径替换 \<path>:
1. # btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /
然后运⾏ btrfs quota rescan,查看新的配额组:
1. # btrfs quota rescan /
2. quota rescan started
3. # btrfs qgroup show /
4. qgroupid rfer excl
5. -------- ---- ----
6. 0/5 16.00KiB 16.00KiB
7. 0/256 272.04MiB 272.04MiB
8. 0/258 6.08GiB 6.08GiB
9. 0/265 16.00KiB 16.00KiB
10. 0/271 16.00KiB 16.00KiB
11. 0/273 16.00KiB 16.00KiB
于是现在,你可以将配额分配给其中⼀个配额组,然后将配额应⽤于其关联的⼦卷。因此,如果要将 student3 的主⽬录使⽤限制为 1 GB,请使⽤ btrfs qgroup limit 命令:
1. # btrfs qgroup limit 1G /home/student3
查看特定⼦卷的配额:
1. # btrfs qgroup show -reF /home/student3
2. qgroupid rfer excl max_rfer max_excl
3. -------- ---- ---- -------- --------
4. 0/271 16.00KiB 16.00KiB 1.00GiB none
稍有不同的选项参数将显⽰所有配额组和设置的所有配额:
1. # btrfs qgroup show -re /
2. qgroupid rfer excl max_rfer max_excl
3. -------- ---- ---- -------- --------
4. 0/5 16.00KiB 16.00KiB none none
5. 0/256 272.04MiB 272.04MiB none none
6. 0/258 6.08GiB 6.08GiB none none
7. 0/265 16.00KiB 16.00KiB none none
8. 0/271 16.00KiB 16.00KiB 1.00GiB none
9. 0/273 16.00KiB 16.00KiB none none
其他特性
这些例⼦提供了 Btrfs 特性的⼀些思考。运⾏ btrfs --help 查看命令的完整列表。还有许多其他值得注意的功能;例如,快照和发送/接收是两个值得学习的功能。
总结讨论
Btrfs 为向 Linux 提供⾼级⽂件系统特性集贡献了很多特性。这不是第⼀次;我知道 ZFS 在⼤约 15 年前引⼊了这种类型的⽂件系统,但是Btrfs 是完全开源的,不受专利的限制。
如果你想探索这个⽂件系统,我建议从虚拟机或备⽤系统开始。
我想能够出现⼀些图形化的管理⼯具,为那些喜欢⽤图形⼯具的系统管理员提供便利。幸运的是,Btrfs 具有强⼤的开发活动,Fedora 33 项⽬决定将其设置为⼯作站上的默认值就证明了这⼀点。
作者:Alan Formy-Duval 选题:lujun9972 译者:Chao-zhi 校对:wxy
本⽂由 LCTT 原创编译,Linux中国 荣誉推出

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。