Linux 版 btrfs 入门Linux 版 btrfs 入门Linux 版 btrfs 入门Linux 版 btrfs 入门
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 版 btrfs 入门

B 树文件系统是文件系统和卷管理器合二为一的。它为向 Linux 提供高级文件系统功能集提供了很多希望。

Btrfs 在 Linux 上可用已有好几年了,因此您可能已经熟悉它了。如果没有,您可能对此有疑问,特别是如果您使用 Fedora Workstation(Btrfs 现在是其默认文件系统)。本文旨在帮助您熟悉它及其高级功能,例如写时复制和校验和。

Btrfs 是 B-Tree Filesystem 的缩写,实际上是文件系统和卷管理器合二为一。它通常被视为对 ZFS 的回应,ZFS 于 2005 年在 Sun Microsystem 的 Solaris 操作系统中引入,现在大部分被名为 OpenZFS 的开源实现所取代。 Ubuntu Linux 和 FreeBSD 通常具有 OpenZFS。其他具有类似功能的示例包括 Red Hat 的 Stratis 和 Linux 逻辑卷管理器 (LVM)。

设置

为了尝试 Btrfs,我下载了 Fedora 33 Workstation ISO 文件并将其安装到新的虚拟机 (VM) 中。安装过程与以前的版本相比没有变化。我没有自定义任何设置,包括驱动器分区和格式化,以保持本教程的准确“开箱即用”设置。 VM 启动并运行后,我安装并运行 GNOME 分区编辑器 (GParted),以获得漂亮的、出厂时全新的驱动器布局视图。

(艾伦·福米-杜瓦尔,CC BY-SA 4.0)

从这一点来看,它与你习惯的没有太大不同;事实上,您可以正常使用该系统,您甚至可能没有注意到该文件系统是 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。这是不准确的,因为它现在是一个已安装的系统,不再是一个 Live CD。 因此,我使用 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 号,该 ID 号由 btrfs subvolume list 命令显示。每个子卷都需要一个基于其 ID 号的关联 qgroup。这可以通过 btrfs qgroup create 在个人基础上完成,但是,为了方便起见,Btrfs wiki 提供了以下命令来加快为文件系统上的子卷创建 qgroup:

>btrfs subvolume list \<path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \<path>

在新安装的 Fedora 33 工作站系统中,您正在根文件系统路径 / 上进行操作。将 \ 替换为根路径:

# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /

然后运行 btrfsquota rescan 并查看新的 qgroup:

# 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

现在,您可以为其中一个 qgroup 分配配额,该配额又会应用于其关联的子卷。因此,如果您想将student3的主目录使用限制为1GB,请使用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

略有不同的选项将显示所有 qgroup 和设置的任何配额:

# 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 提供高级文件系统功能集提供了很多希望。这不是第一个,而是第一个。我将大约 15 年前引入这种类型的文件系统归功于 ZFS,但 Btrfs 是完全开源的并且不受专利限制。

如果您想探索这个文件系统,我建议您从虚拟机或备用系统开始。

我希望看到一些为喜欢在 GUI 世界中操作的系统管理员制作的图形管理实用程序。幸运的是,Btrfs 拥有强大的开发活动,Fedora 项目决定将其默认设置为 Workstation 33 就证明了这一点。

©2015-2025 艾丽卡 support@alaica.com