当前位置: 首页 > 科技观察

Btrfs文件系统入门

时间:2023-03-12 00:12:40 科技观察

B树文件系统(Btrfs)是一个组合的文件系统和卷管理器。它为Linux操作系统提供了许多高级文件系统应该具备的优良特性。Btrfs已在Linux中使用多年,因此您可能已经熟悉它。如果不是,您可能会对此产生怀疑,尤其是如果您使用的是FedoraWorkstation(Btrfs现在是其默认文件系统)。本文旨在帮助您熟悉它及其高级功能,例如写时复制和校验和。Btrfs是“B-TreeFilesystem”的缩写,实际上是文件系统和卷管理器的结合体。它通常被视为对ZFS的回应,ZFS于2005年在SunMicrosystems的Solaris操作系统中引入,现在在很大程度上被称为OpenZFS的开源实现所取代。Ubuntu和FreeBSD经常使用OpenZFS。具有类似功能的其他示例包括RedHat的Stratis和Linux逻辑卷管理器(LVM)。安装为了试用Btrfs,我下载了Fedora33WorkstationISO文件并将其安装到新的虚拟机(VM)中。安装过程与以前的版本没有变化。我没有自定义任何设置,包括驱动器分区和格式化,以保持本教程的精确“开箱即用”设置。启动并运行虚拟机后,我安装并运行了GNOME分区编辑器(GParted),以获得一个漂亮的、类似于工厂的驱动器布局视图。GParted对Fedora33Workstation上Btrfs使用GParted的看法从安装的角度来看,它和你习惯的没什么不同;事实上,您可以正常使用系统,您甚至可能没有注意到文件系统是Btrfs。但是,有了这个新的默认文件系统,您就可以利用几个很酷的功能。检查Btrfs文件系统我还没有找到特定于Btrfs的图形工具,尽管它的一些功能已经合并到现有的磁盘管理工具中。从命令行,您可以仔细查看Btrfs格式:#btrfsfilesystemshowLabel:'fedora_localhost-live'uuid:f2bb02f9-5c41-4c91-8eae-827a801ee58aTotaldevices1FSbytesused6.36GiBdevid1size10.41GiB使用8.02GiB路径/dev/vda3修改Btrfs标签我首先注意到的是安装程序设置的文件系统标签:fedora_localhost-live。这是不准确的,因为它现在是一个已安装的系统,不再是livecd。所以我使用btrfsfilesystemlabel命令更改了它。修改Btrfs标签非常简单:#btrfsfilesystemlabel/fedora_localhost-live#btrfsfilesystemlabel/fedora33workstation#btrfsfilesystemlabel/fedora33workstation管理Btrfs子卷子卷看起来像可以由Btrfs管理的标准目录。我的新Fedora33工作站上有几个子卷:#btrfssubvolumelist/ID256gen2458toplevel5pathhomeID258gen2461toplevel5pathrootID265gen1593toplevel258pathvar/lib/machines使用btrfs子卷创建命令创建新的子卷,或使用btrfssubvolumedelete删除子卷:#btrfssubvolumecreate/opt/fooCreatesubvolume'/opt/foo'#btrfssubvolumelist/ID256gen2884toplevel5pathhomeID258gen2888toplevel5pathrootID265gen1593toplevel258pathvar/lib/machinesID276gen2888toplevel258pathopt/foo#btrfssubvolumedelete/opt/fooDeletesubvolume(no-commit):'/opt/foo'subvolumeallowssettingQuotas,拍摄快照,并复制到其他位置和其他主机。那么系统管理员如何利用这些功能呢?用户主目录如何工作?添加用户就像以前一样,添加一个新的用户帐户会创建一个主目录供该帐户使用:#useraddstudent1#getentpasswdstudent1student1:x:1006:1006::/home/student1:/bin/bash#ls-l/homedrwx------。1student1student180Oct2900:21student1传统上,用户的主目录是/home的子目录。所有权和经营权为业主量身定做,但特殊功能不管理。企业服务器环境是另一种情况。通常,目录是为特定应用程序及其用户保留的。您可以使用Btrfs来管理这些目录并对其应用约束。要使Btrfs子卷成为用户主目录,useradd命令中有一个新选项:--Btrfs-subvolume-home。尽管手册页尚未更新(截至撰写本文时),但您可以通过运行useradd--help查看该选项。通过在添加新用户时传递此选项,将创建一个新的Btrfs子卷。它的工作方式与创建常规目录时的-d选项类似:#useradd--btrfs-subvolume-homestudent2创建子卷'/home/student2'使用getentpasswdstudent2验证用户,它会显示正常。但是,运行btrfssubvolume命令列出子卷,您会看到一些有趣的东西:新用户的主目录!#btrfssubvolumelist/ID256gen2458toplevel5pathhomeID258gen2461toplevel5pathrootID265gen1593toplevel258pathvar/lib/machinesID272gen2459toplevel256pathhome/student2两个场景。假设您需要在/opt中安装一个WildFly服务器并部署一个JavaWeb应用程序。通常,您的第一步是创建一个Wildfly用户。使用新的--btrfs-subvolume-home选项和-b选项指定/opt作为基本目录:#useradd-b/opt--btrfs-subvolume-homewildflyCreatesubvolume'/opt/wildfly'然后,wildfly用户可以使用并且主目录设置为/opt/wildfly。删除用户删除用户时,有时需要同时删除用户的文件和主目录。userdel命令有-r选项,它同时删除Btrfs子卷:#userdel-rstudent2Deletesubvolume(commit):'/home/student2'设置磁盘使用配额在我的一门计算机科学课上,一个学生跑了一个失控的C程序随后被写入磁盘,填满了我们学院Unix系统上的整个/home目录!在管理员终止失控进程并清理一些空间之前,服务器将变得不可用。上面的也是一样的;Wildfly企业应用程序将为其用户提供越来越多的日志文件和内容存储。如何防止服务器因磁盘满而挂掉?设置磁盘使用限制是个好主意。幸运的是,Btrfs通过设置配额来支持这一点。配置配额需要几个步骤。第一步是在Btrfs文件系统上启用配额:#btrfsquotaenable/确保您知道每个子卷的配额组(qgroup)ID号,它由btrfssubvolumelist命令显示。每个子卷都需要与基于ID号的配额组相关联。这可以单独使用btrfsqgroupcreate来完成,但是,btrfswiki提供了以下命令来加速为文件系统上的子卷创建配额组:>btrfssubvolumelist\|剪切-d''-f2|xargs-I{}-n1btrfsqgroupdestroy0/{}\在新安装的Fedora33工作站系统上,您在根文件系统路径/上运行。将\替换为根路径:#btrfssubvolumelist/|剪切-d''-f2|xargs-I{}-n1btrfsqgroupcreate0/{}/然后运行??btrfsquotarescan查看新的配额组:#btrfsquotarescan/quotarescanstarted#btrfsqgroupshow/qgroupidrferexcl--------------0/516.00KiB16.00KiB0/256272.04MiB272.04MiB0/2586.08GiB6.08GiB0/26516.00KiB16.00KiB0/27116.00KiB16.00KiB0/27316.0现在你可以分配SoKi0/27316.0配额组之一的配额,然后将配额应用于其关联的子卷。因此,如果要将student3的主目录使用量限制为1GB,请使用btrfsqgrouplimit命令:#btrfsqgrouplimit1G/home/student3要查看特定子卷的配额:#btrfsqgroupshow-reF/home/student3qgroupidrferexclmax_rfermax_excl--------------------------------0/27116.00KiB16.00KiB1.00GiBnone选项参数略有不同将显示所有配额组和所有配额集:#btrfsqgroupshow-re/qgroupidrferexclmax_rfermax_excl--------------------------------0/516.00KiB16.00KiB无无0/256272.04MiB272.04MiB无无0/2586.08GiB6.08GiB无无0/26516.00KiB16.00KiB无无无0/27116.00KiBn10.00GiB00无0/26.00KiBn10.00GiB02GiB26.0无其他功能这些示例提供了对Btrfs功能的一些想法。运行btrfs--help查看完整的命令列表。还有许多其他值得注意的功能;例如,快照和发送/接收是两个值得学习的特性。总结讨论Btrfs为Linux提供的高级文件系统功能集贡献了许多功能。这不是第一次了;我知道ZFS大约在15年前推出了这种类型的文件系统,但Btrfs是完全开源的,不受专利保护。如果你想探索这个文件系统,我建议从虚拟机或备用系统开始。我觉得可以出现一些图形化的管理工具,为喜欢使用图形化工具的系统管理员提供便利。幸运的是,Btrfs拥有强大的开发活动,Fedora33项目决定将其设为工作站的默认设置就证明了这一点。