
Btrfs
![]() | 此條目可参照英語維基百科相應條目来扩充。 |
开发者 | SUSE、Meta、西部数据、甲骨文公司、富士通、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 FS,Better FS或B-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年,ext3和ext4文件系统的主要开发者曹子德表示,虽然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)
- 子卷(一个或多个单独可挂载基于每个物流分区)
- 透明压缩(目前支持zlib、LZO和ZSTD (從 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.0 1.1 Suse Documentation: Storage Administration Guide – Large File Support in Linux. SUSE. [2015-08-12]. (原始内容存档于2016-03-04).
- ^ Jonathan Corbet. File creation times. LWN.net. 2010-07-26 [2015-08-15]. (原始内容存档于2015-09-05).
参见[编辑]
外部链接[编辑]
- 官方网站
- Initial Btrfs宣告(页面存档备份,存于互联网档案馆)
- Coherent远程文件系统(页面存档备份,存于互联网档案馆),基于“btrfs”
- 新一代Linux文件系统btrfs简介(页面存档备份,存于互联网档案馆)
|