Btrfs(通常念成Butter FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入目前ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。


核心特性:

多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”,“修改”;

写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;

数据及元数据校验码:checksum

子卷:sub_volume

快照:支持快照的快照;

透明压缩:


文件系统创建:

mkfs.btrfs

-L 'LABEL'

-d <type>: raid0, raid1, raid5, raid6, raid10, single

-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup

-O <feature>

-O list-all: 列出支持的所有feature;


属性查看:

btrfs filesystem show 


挂载文件系统:

mount -t btrfs /dev/sdb MOUNT_POINT


透明压缩机制:

mount -o compress={lzo|zlib} DEVICE MOUNT_POINT



创建文件系统

mkfs.btrfs 命令建立一个 btrfs 格式的文件系统。可以用如下命令在设备 sda5 上建立一个 btrfs 文件系统,并将其挂载到 /btrfsdisk 目录下:

#mkfs.btrfs /dev/sda5 
 #mkdir /btrfsdisk 
 #mount – t btrfs /dev/sda5 /btrfsdisk

这样一个 Btrfs 就在设备 sda5 上建立好了。


创建 Snapshot

下面的例子中,创建快照 snap1 时系统存在 2 个文件。创建快照之后,对 test1 的内容进行修改。再回到 snap1,打开 test1 文件,可以看到 test1 的内容依旧是之前的内容。

#ls /btrfsdisk 
 test1 test2 
 #vi test1 
 This is a test 
 #btrfsctl – s snap1 /btrfsdisk 
 #vi test1 
 Test1 is modified 
 #cd /btrfsdisk/snap1 
 #cat test1 
 This is a test

可以从上面的例子看到,快照 snap1 保存的内容不会被后续的写操作所改变。


创建 subvolume

使用 btrfs 命令,用户可以方便的建立 subvolume 。假设 /btrfsdisk 已经挂载到了 btrfs 文件系统,则用户可以在这个文件系统内创建新的 subvolume 。比如建立一个 /sub1 的 subvolume,并将 sub1 挂载到 /mnt/test 下:

#mkdir /mnt/test 
 #btrfsctl – S sub1 /btrfsdisk 
 #mount – t btrfs – o subvol=sub1 /dev/sda5 /mnt/test

Subvolme 可以方便管理员在文件系统上创建不同用途的子文件系统,并对其进行一些特殊的配置,比如有些目录下的文件关注节约磁盘空间,因此需要打开压缩,或者配置不同的 RAID 策略等


开启压缩功能

用户可以使用 mount 参数打开压缩功能。命令如下

#mount – t btrfs – o compress /dev/sda5 /btrfsdisk