Redian新闻
>
Btrfs 详解:基础概念 | Linux 中国

Btrfs 详解:基础概念 | Linux 中国

科技
 
导读:这篇文章是《Btrfs 详解》系列文章中的一篇。                                   
本文字数:2950,阅读时长大约:5分钟

这篇文章是《Btrfs 详解》系列文章中的一篇。从 Fedora Linux 33 开始,Btrfs 就是 Fedora Workstation 和 Fedora Silverblue 的默认文件系统。

介绍

文件系统是现代计算机的基础之一。它是任何操作系统必不可少的一部分,且通常不为人注意。但是,像 Btrfs 这样的现代文件系统提供了许多很棒的特性,使计算机的使用更加方便。例如,它可以无感地为你压缩文件,或者为增量备份建立可靠的基础。

这篇文章将带你高屋建瓴地了解 Btrfs 文件系统是如何工作的,有什么特性。本文既不会过多涉及技术细节,也不会研究其底层实现,系列后续的文章会详细介绍一些重要特性。

什么是文件系统

你基本了解过文件系统是如何工作的,那么下面的内容对你应该是不陌生的,你可以直接跳到下一节。否则,请先阅读下面对文件系统的简短介绍。

简单来说,文件系统允许你的 PC 去寻找存储在磁盘上的数据。这听起来像是微不足道的工作,但实际上时至今日各种类型的非易失性存储设备(比如机械硬盘、固态硬盘、SD 卡等等)仍然与 1970 年代 PC 被发明时基本相同:一个(巨大的)存储块集合。

(Block)” 是最小的可寻址存储单元。PC 上的每个文件内容被存储在多个块中。一个块通常是 4096 字节的大小。这取决于你的硬件和在这之上的软件(即文件系统)。

文件系统允许我们从海量的存储块中查找文件的内容,这是通过所谓的 inode 去实现的。一个 inode 在特殊格式的存储块里记录了文件的信息。这包含文件的大小,哪里去寻找组成文件内容的存储块,访问规则(即谁可读,可写,可执行)等等。

下面是 inode 的示意图:

A text file “myfile.txt” and a hypothetical example of its representation on disk. All the squares are individual storage blocks.

inode 的结构对文件系统的功能有巨大的影响,因此它是各种文件系统诸多的重要数据结构之一。出于这个原因,每个文件系统有各自的 inode 结构。如果你想了解更多信息,看看下面 链接🔗 btrfs.wiki.kernel.org 关于 Btrfs 文件系统 inode 结构的内容。如需更详细地了解各个字段的含义,你可以 参考🔗 ext4.wiki.kernel.org ext4 文件系统的 inode 结构。

写时复制(CoW)文件系统

相比 ext4,Btrfs 拥有的杰出特性之一是,它是一个 写时复制(Copy-on-Write)(CoW)文件系统。当一个文件被改变和回写磁盘,它不会故意写回它原来的位置,而是被复制和存储在磁盘上的新位置。从这个意义上,可以简单地认为 Cow 是一种 “重定向”,因为文件写入被重定向到不同的存储块上。

这听起来很浪费,但实际上并不是。这是因为被修改的数据无论如何一定会被写到磁盘上,不管文件系统是如何工作的。Btrfs 仅仅是确保了数据被写入在之前没被占据的块上,所以旧数据保持完整。唯一真正的缺点就是这种行为会导致文件碎片化比其他文件系统要快。在日常的电脑使用中,你不太可能会注意到这点差异。

CoW 的优势在哪里?简单的说:文件被修改和编辑的历史被保存了下来。Btrfs 保存文件旧版本的引用(inode)可以轻易地被访问。这个引用就是快照:文件系统在某个时间点的状态镜像。这将是这系列文章里的单独的一篇,所以暂时留到后面介绍。

除了保存文件历史,CoW 文件系统永远处于一致的状态,即使之前的文件系统事务(比如写入一个文件)由于断电等原因没有完成。这是因为文件系统的元数据更新也是写时复制的:文件系统本身永远不会被覆写,所以中断不会使其处于部分写入的状态。

对文件的写时复制

你可以将文件名视为对 inode 的指针。在写入文件的时候,Btrfs 创建一个被修改文件内容(数据)的拷贝,和一个新的 inode(元数据),然后让文件名指向新的 inode,旧的 inode 保持不变。下面是一个假设示例来阐述这点:

Continuation of the example above: 3 more bytes of data were added

这里 myfile.txt 增加了三个字节。传统的文件系统会更新中间的 Data 块去包含新的内容。CoW 文件系统不会改变旧的数据块(图中灰色),写入(复制)更改的数据和元数据在新的地方。值得注意的是,只有被改变的数据块被复制,而不是全部文件。

如果没有空闲的块去写入新内容,Btrfs 将从被旧文件版本占据的数据块中回收空间(除非它们是快照的一部分,本系列后续文章会看到)。

对目录的写时复制

从文件系统的角度看,目录只是特殊类型的文件。与常规文件不同,文件系统直接解释数据块的内容。一个目录有自身的元数据(inode,就像上面说的文件一样)去记录访问权限或修改时间。最简单的形式,存在目录里的数据(被叫作目录项)是一个 inode 引用的列表,每个 inode 又是另外的文件或目录。但是,现代文件系统在目录项中至少会存储一个文件名和对应的 inode 引用。

之前已经指出,写入一个文件会创建之前 inode 的副本,并相应修改其内容。从根本上,这产生了一个和之前无关的新的 inode 。为了让被修改的文件对文件系统可见,所有包含这个文件引用的目录项都会被更新。

这是一个递归的过程!因为一个目录本身是一个带有 inode 的文件。修改目录里的任何一项都会为这个目录文件创建新的 inode 。这会沿着文件系统树递归直到文件系统的根。

所以,只要保留对任何旧目录的引用,并且这些目录没有被删除和覆写,就可以遍历之前旧状态的文件系统树。这就是快照的功能。

后续文章可以期待的内容

Btrfs 不只是一个 Cow 文件系统。它目标是实现高级特性的同时关注容错、修复和易于管理(参见 文档🔗 btrfs.readthedocs.io)。本系列未来的文章将会专门介绍这些特性。

◈ 子卷 – 文件系统中的文件系统
◈ 快照 – 回到过去
◈ 压缩 – 透明节省存储空间
◈ 配额组 – 限制文件系统大小
◈ RAID – 替代 mdadm 配置

这远非 Btrfs 特性的详尽列表。如果你想全面地了解可用特性,查看 维基🔗 btrfs.wiki.kernel.org 和 文档🔗 btrfs.readthedocs.io

总结

我希望我已能激起你进一步了解计算机文件系统的兴趣。如果目前你有任何疑问,请在评论区留言讨论以便在日后文章中探讨,同时,你也可以自行学习文中提供的相关资源。如果你发现 Btrfs 中某项特别有趣的功能,也欢迎在评论区提出。如果某个主题收到足够的关注,我可能会在系列文章中新增相关内容。下一篇文章再见!

(题图:MJ/35fa1970-1806-4026-8d58-095a56206ec9)


via: https://fedoramagazine.org/working-with-btrfs-general-concepts/

作者:Andreas Hartmann 选题:lkxed 译者:A2ureStone 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :A2ureStone
🌟
翻译: 1.0 篇
|
贡献: 1 天
2023-09-13
2023-09-13
https://linux.cn/lctt/A2ureStone
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Linux Shell 介绍:Bash、Zsh 和 Fish | Linux 中国5 个专注于隐私保护的 Linux 发行版 | Linux 中国沁园春 喜蛛与量子在 Linux 中使用 cp 命令 | Linux 中国Fedora Linux 的家族(四):替代下载 | Linux 中国如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹 | Linux 中国老子的故事Fedora Linux 的家族(一):官方版本 | Linux 中国如何在 Linux 中注释 PDF | Linux 中国Btrfs 详解:快照 | Linux 中国Fedora Linux Flatpak 八月推荐应用 | Linux 中国终端基础:在 Linux 中复制文件和目录 | Linux 中国Fedora Linux 的家族(三):实验室 | Linux 中国同行相轻 格格不入在 Linux 中使用 cat 命令 | Linux 中国如何在 Linux 中扩展 Veritas 文件系统(VxFS) | Linux 中国你好,我是筚(bì)篥( lì)!一直在期待的基于 Ubuntu 的滚动发布 Rhino Linux 终于来了 | Linux 中国Linux 窗口管理器 Compiz 简史 | Linux 中国Btrfs 详解:压缩 | Linux 中国你的旧电脑是 “过时” 了,还是使用 Linux 的机会? | Linux 中国Bcachefs已被合并到Linux-Next,Linux 6.7有望引入使用 Btrfs 快照方便升级 Fedora Linux 且易于回退 | Linux 中国Linux 中退出码的含义 | Linux 中国穿过黑夜的爱情之花Linux 桌面上的 Firefox 面临着大问题 | Linux 中国Fedora Linux 的家族(二):定制版 | Linux 中国2023 年最佳 Linux 视频编辑软件 | Linux 中国阳光下灿烂 风雨中奔跑将 Linux 终端与 Nautilus 文件管理器结合起来 | Linux 中国人工智能教程(一):基础知识 | Linux 中国终端基础:Linux 终端中的目录切换 | Linux 中国开源朗读者 | Linux 只是一个内核:这是什么意思? | Linux 中国在 Linux 文件系统中使用 attr 添加扩展属性 | Linux 中国Btrfs 详解:子卷
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。