xdays

Linux-Btrfs文件系统

January 04, 2020

简介

BtrFS(B-tree文件系统,又称为Butter FS或Better FS),2007由oracle开源后,得到了IBM、intel等厂商的大力支持,其目标计划是替代linux目前的ext3/4,成为下一代linux标准的文件系统。 支持写时复制(CoW)、快照、在线扩容缩容、数据checksum、subvolume、磁盘阵列(raid)等,运行在linux上,并遵循GPL协议的强大文件系统。

  1. CoW(Copy on Write)可以保证数据一致性,每次改动块都会创建新的文件
  2. 基于Cow技术可以在volume和文件级别创建快照
  3. 数据块和inode都可以动态分配
  4. 可以给metadata和data块来创建多个副本

文件系统管理

创建

# 单个设备
mkfs.btrfs -L data /dev/sdb1
# 多个设备,metadata保留多个副本
mkfs.btrfs -d raid0 -m raid1 /dev/sdb1 /dev/sdc1

添加/删除设备

btrfs device add /dev/part3
btrfs device remove /dev/part3

修改数据快或者meta块的副本

btrfs balance start -dconvert=dup /srv/shared/
btrfs balance start -mconvert=dup /srv/shared/

创建挂载删除subvolume

btrfs subvolume create /srv/shared/video
mount -o subvol=video /dev/sdb1 /mnt
umount /mnt
btrfs subvolume delete /srv/shared/video

Quota磁盘配额

适用于多用户场景,给每个用户分配固定的空间,还可以动态调整

# enable quota for subvolume
btrfs quota enable /srv/shared/video
# get limit
btrfs qgroup show -reF /srv/shared/video
# set limit
btrfs qgroup limit -e 10G 0/260 /srv/shared/video/

然后测试下配额是否生效

# dd if=/dev/zero of=/mnt/11G.bin bs=1M count=20480
dd: error writing '/mnt/11G.bin': Disk quota exceeded
10240+0 records in
10239+0 records out
10737377280 bytes (11 GB, 10 GiB) copied, 163.942 s, 65.5 MB/s

快照

建快照就是从当前状态下的subvolume新建一个subvolume,你也可以直接挂载snapshot

btrfs subvolume snapshot /srv/shared/video /srv/shared/video-backup
mount -o subvol=video-backup /dev/sdb1 /mnt
ls /mnt
umount /mnt
btrfs subvolume delete /srv/shared/video-backup

高能警告

目前社区有一些关于btrfs非常负面的评价,褒贬不一,使用前请想好退路,数据无价。看看官方的 status 页面,了解下各个功能当前是否稳定了。


xdays

我是 xdays, 记录着我技术的成长,生活的点滴和感悟,能对你有所帮助那更好。