本页使用了标题或全文手工转换

Btrfs

维基百科,自由的百科全书
跳到导航 跳到搜索
Btrfs
开发者SUSEMeta西部数据甲骨文公司富士通Red Hat
全称Btrfs
发布稳定版本:6.2,2023年2月
不稳定版本:6.2,2023年2月 (Linux)
结构
目录内容B树
文件分配extents
限制
最大文件尺寸16 EiB[1]
最大文件数量264(每个子卷)
最长文件名255字节
最大卷容量16 EiB[1]
文件名字符集'/'NUL'\0')以外的所有字符
功能
日期记录内容更改时间(mtime)[2],属性更改时间(ctime),访问时间(atime)
日期分辨率纳秒
属性POSIX扩展文件属性
文件系统权限POSIX,访问控制表
透明压缩
透明加密否(计划支持)
单一实例存储(SIS)是(计划支持,通过补丁支持)
操作系统支持Linux

Btrfs(B-tree檔案系統,通常念成Butter FSBetter FSB-tree FS),一種支持寫入時複製(COW)的文件系统,運行在Linux作業系統,採用GPL授權。Oracle于2007年對外宣布這項計劃,並釋出原始碼,在2014年8月釋出穩定版。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特別是单个文件的大小,总文件系统大小或文件检查和加入ext3未支持的功能,像是可写快照(writable snapshots)、快照的快照(snapshots of snapshots)、内建磁盘阵列(RAID),以及子卷(subvolumes)。Btrfs也宣称专注在“容错、修复及易于管理”。

历史[编辑]

Btrfs的核心数据结构——写时复制B树——最初是由IBM研究员Ohad Rodeh在2007年USENIX会议上提出的。Chris Mason当时是SUSE公司的ReiserFS工程师,后来加入了Oracle,并开始开发一种基于B树的新文件系统。

2008年,ext3ext4文件系统的主要开发者曹子德表示,虽然ext4有改进的功能,但它不是一个重大的进步;它使用了旧技术,是一个权宜之计。曹子德说,Btrfs是一个更好的方向,因为“它在可扩展性、可靠性和易管理性方面提供了改进”。Btrfs也有“一些与reiser3/4相同的设计思想”。

Btrfs 1.0版本具有最终确定的磁盘格式,于2008年底发布,并于2009年被接受进入Linux内核主线。几个Linux发行版开始在安装过程中提供Btrfs作为根文件系统的实验性选择。

2011年7月,Btrfs自动碎片整理和擦除功能被合并到Linux内核主线的3.0版本中。除了Oracle的Mason外,富士通的Miao Xie也贡献了性能改进。2012年6月,Chris Mason离开Oracle加入Fusion-io,一年后又与Josef Bacik一起加入Facebook。在这两家公司工作期间,Mason继续他对Btrfs的工作。

2012年,两个Linux发行版将Btrfs从实验性状态转变为生产或支持状态:3月份的Oracle Linux ,8月份的SUSE Linux Enterprise 。

2015年,Btrfs被采用为SUSE Linux Enterprise Server(SLE)12的默认文件系统。

2017年8月,红帽公司在Red Hat Enterprise Linux(RHEL)7.4的发布说明中宣布,不再计划将Btrfs转变为一个完全支持的功能(它自RHEL 6 beta以来一直作为“技术预览”包含在内),并指出它将在RHEL 7发布系列中保持可用。2019年5月,Btrfs从RHEL 8中移除。RHEL从RHEL 6中的ext4转移到RHEL 7中的XFS。

2020年,Btrfs被选为Fedora 33桌面变体的默认文件系统。

特性[编辑]

特性列表[编辑]

已实现[编辑]

  • 联机碎片整理
  • 联机卷生长和收缩
  • 联机块设备增加和删除
  • 联机负载均衡(块设备间的对象移动以达到平衡)
  • 文件系统级的镜像(类RAID-1)、条带(类RAID-0)
  • 子卷(一个或多个单独可挂载基于每个物流分区)
  • 透明压缩(目前支持zlibLZOZSTD (從 4.14 開始支援))
  • 快照(只读和可写,写复制,子卷复制)
  • 文件克隆
  • 数据和元数据的校验和(目前是CRC-32C)
  • 就地转换(带回滚)ext3/4与ReiserFS
  • 只读存储的联合挂载,称为文件系统播种(只读存储用作可写 Btrfs 的写时复制支持)
  • 用户定义的事务
  • 块丢弃支持
  • 发送/接收(将快照之间的差异保存为二进制流)
  • 带外数据去重(需要用户空间工具)
  • 能够处理交换文件和交换分区

已实现但不建议在生产环境中使用[编辑]

  • 分层的每个子卷配额
  • RAID 5,RAID 6

计划但尚未实现[编辑]

  • 带内数据去重
  • 在线文件系统检查
  • 最多六个奇偶校验设备的 RAID,超越了 RAID 5 和 RAID 6 的可靠性
  • 对象级 RAID 0,RAID 1 和 RAID 10
  • 透明加密
  • 持久读写缓存( L2ARC + ZIL,lvmcache 等)

克隆[编辑]

Btrfs 提供了一个克隆操作,可以原子地创建一个文件的写时复制快照。这样的克隆文件有时被称为 reflinks,因为它们与拟议的相关 Linux 内核系统调用有关。

在克隆时,文件系统不会创建一个指向现有 inode 的新链接;相反,它会创建一个新的 inode,最初与原始文件共享相同的磁盘块。因此,克隆只能在同一个 Btrfs 文件系统的边界内工作,但是在某些情况下,自 Linux 内核 3.6 版本起,它可能会跨越子卷的边界。实际的数据块不会被复制;同时,由于 Btrfs 的写时复制(CoW)特性,对任何克隆文件的修改都不会在原始文件中可见,反之亦然。

克隆不应与硬链接混淆,硬链接是将多个文件名与单个文件关联的目录项。虽然硬链接可以被认为是同一文件的不同名称,但 Btrfs 中的克隆提供了最初共享所有磁盘块的独立文件。

GNU coreutils 自 7.5 版本支持了这个 Btrfs 特性,通过 cp 命令的 --reflink 选项可以使用克隆功能。

除了数据克隆( FICLONE ),Btrfs 还支持通过 FIDEDUPERANGE 进行带外去重。这个功能允许两个具有(甚至部分)相同数据的文件共享存储空间。

参考资料[编辑]

  1. ^ 1.0 1.1 Suse Documentation: Storage Administration Guide – Large File Support in Linux. SUSE. [2015-08-12]. (原始内容存档于2016-03-04). 
  2. ^ Jonathan Corbet. File creation times. LWN.net. 2010-07-26 [2015-08-15]. (原始内容存档于2015-09-05). 

参见[编辑]

外部链接[编辑]