简介

文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3,ext 文件系统以其卓越的稳定性成为了事实上的 标准文件系统。近年来 ext2/3 暴露出了一些扩展性问题,于是便催生了 ext4 。在 2008 年发布的 2.6.19 内核中集成了 ext4 的 dev 版本。 2.6.28 内核发布时,ext4 结束了开发版,开始接受用户的使用。似乎 ext 就将成为 文件系统的代名词。然而当您阅读很多有关 ext4 的文章时,会发现都不约而同地提到了 ,并认为 ext4 将是一个过渡的文件系统。 ext4 的作者 Theodore Tso 也盛赞 并认为 将成为下一代 标准文件系统。 Oracle,IBM, Intel 等厂商也对 btrfs 表现出了极大的关注,投入了资金和人力。

—— 来自 ibm.com

BtrfsB-tree, Butter FS, Better FS)文件系统现在还处于技术预览版阶段,按官方的话来说就是Maybe已经稳定了。即使如此,它还是受到了莫大的关注。因为它所具备的许多特性,在提高磁盘使用效率的同时,也使得系统运行更加稳定,数据更加可靠。下面就来说说Btrfs所具备的一些核心特性,以及如何实现Btrfs的创建和使用。

核心特性

  • 多物理卷支持

btrfs可由多个底层物理卷组成;支持,可以在线“添加”、“移除”、“修改”。

  • 写时复制更新机制(CoW

复制、更新及替换指针,而非直接更新。即在修改某文件时,先复制一份源文件,然后在新文件上修改,修改完成后再将指针指向新文件,便于快速恢复。

  • 数据及元数据校验码

支持使用checksum进行数据校验(可检查数据是否受损,会尝试修复)。

  • 子卷

支持创建和挂载子卷,以及子卷的子卷的子卷……

  • 快照

支持快照功能,并支持创建快照的快照,以及快照的快照的快照……(跟LVM类似,子卷的快照必须和子卷处于同一个父卷。)

  • 透明压缩

自动通过占用cpu时钟周期的方式对数据自动进行压缩,读取的时候自动解压缩。说白了就是自动压缩,用时间和性能来换取空间。

  • 在线无损转换

可将ext3/ext4文件系统转换成Btrfs,而无需卸载或重新格式化。(支持回滚。)

示例

由于用得不多,就不作详细说明了,感兴趣的话可man一下以下命令进行研究:

文件系统创建

Btrfs能在整个设备上使用,替代MBRGPT分区表,但是并不要求一定这么做,最简单的方法是在一个已存在的分区上创建btrfs文件系统。(示例中是直接使用整个硬盘,替代MBRGPT分区表使用。)

mkfs.btrfs -L mybtrfs -d raid0 -m raid1 /dev/sdb /dev/sdc

数据和元数据的RAID等级可以用-d-m参数指定。默认情况下元数据使用镜像(RAID1),而数据被stripRAID0)。

属性查看

btrfs filesystem show [laybel]

[hzz@ ~]$ sudo btrfs filesystem show mybtrfs
Label: 'mybtrfs' uuid: 24040293-4e59-40c5-82cd-95e945b43831
Total devices 2 FS bytes used 112.00KiB
devid 1 size 5.00GiB used 1.51GiB path /dev/sdb
devid 2 size 5.00GiB used 1.51GiB path /dev/sdc

[hzz@magedu ~]

[hzz@magedu ~]$ sudo mkdir /mytest
[hzz@magedu ~]$ sudo mount -t btrfs /dev/sdb /mytest
[hzz@magedu ~]$ sudo btrfs filesystem df -h /mytest
Data, RAID0: total=1.00GiB, used=512.00KiB
System, RAID1: total=8.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
[hzz@magedu ~]

均衡数据

btrfs balance start /mytest

在线调整大小

btrfs filesystem resize +2G /mytest

[hzz@magedu ~]$ sudo btrfs filesystem resize -2G /mytest
Resize ‘/mytest’ of ‘-2G’
[hzz@magedu ~]$ sudo btrfs filesystem resize +2G /mytest
Resize ‘/mytest’ of ‘+2G’
[hzz@magedu ~]

[hzz@magedu ~]$ sudo btrfs device delete /dev/sdb /mytest
[hzz@magedu ~]$ sudo btrfs filesystem show
Label: ‘mybtrfs’ uuid: 24040293-4e59-40c5-82cd-95e945b43831
Total devices 2 FS bytes used 448.00KiB
devid 2 size 5.00GiB used 800.00MiB path /dev/sdc
devid 3 size 5.00GiB used 800.00MiB path /dev/sdd

[hzz@magedu ~]

btrfs-convert /dev/sdb

加 -r 参数可进行回滚。

### 创建和挂载子卷

`[hzz@magedu ~]$ sudo btrfs subvolume create /mytest/tst1
Create subvolume ‘/mytest/tst1’
[hzz@magedu ~]$ sudo btrfs subvolume list -p /mytest
ID 261 gen 40 parent 5 level 5 path tst1
[hzz@magedu ~]$

更多参考

《Btrfs (简体中文)》
《新一代 Linux 文件系统 btrfs 简介》
《wiki-Btrfs》
《如何选择文件系统:EXT4、Btrfs 和 XFS》