btrfs文件系统的核心特性:
多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、移除,修改;
写时复制更新机制(CoW):复制、更新及替换指针,而非就地更新;
修改一个文件,不知直接修改源文件,而是将文件先复制一份,对目标新复制的文件进行修改,然后将文件名本来是指向原来的文件空间转而转向新空间
数据及元数据效验码:chechsum
子卷:sub_volume
快照:支持快照的快照;
透明压缩;自动在存储时实现压缩,读取时自动解压缩
常用命令:
文件系统创建:
mkfs.btrfs
-L 'LABEL'
-d <type>:raid0,raid1,raid5,raid6,radi10,single
-m<profile>:raid0,raid1,raid5,raid6,radi10,single,dup
属性查看:
btrfs filesystem show
挂载文件系统:
mont -t btrfs /dev/sdb/ MOUNT_POINT
透明压缩机制:
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
扩展文件系统:
btrfs filesystem resize max /mydata
添加新的磁盘到文件系统中
btrfs device add /dev/sdd /mydata
删除文件系统中的磁盘:
btrfs device delete /dev/sdd /mydata
在我们生产环境中可以使用多块硬盘直接用btrfs文件系统组合成RAID来使用
示例:接下来我们来演示一下用btrfs文件系统三块磁盘组成一个RAID组来使用
先在虚拟机中添加三块磁盘大小分别是20G的磁盘,/sdb,/sdc,/sdd
然后将sdb与sdc创建成btrfs文件系统
使用btrfs filesystem show这个命令来查看一下系统中的使用btrfs的分区
将创建好的文件系统挂载的/mydata目录
mount -t btrfs /dev/sdb /mydata
让数据已透明压缩的方式存储到此文件系统中
mount -o compress=lzo /dev/sdb /mydata/
缩减文件系统的大小
btrfs filesystem resize -10G /mydata
添加新的磁盘到文件系统中
btrfs device add /dev/sdd /mydata
我们可以将原有数据均衡到三块磁盘中
btrfs balance start /mydata
当我们需要缩减存储空间时,可以使用命令直接移除磁盘,被移除的磁盘中的数据会自动同步到其它的磁盘上面
btrfs filesystemd del /dev/sdb /mydata
更能文件系统默认的存储方式
首先我们先来查看一下文件系统的的基本信息
这里我们可以看到数据是以single单文件格式存储的
元数据是以RAID1方式存储的
下面我们将存储方式全部更改为RAID5级别
将第二块磁盘重新添加进来
btrfs device add /dev/sdb /mydata
btrfs balance start -dconvert=raid5 /mydata
btrfs balance start -mconvert=raid5 /mydata
注意我们在修改raid级别时,要确保底层硬盘的数量能够组成相应的raid级别
创建子卷
我们在/mydata文件系统下创建两个子卷test跟test2,并将test单独挂载到/mnt目录下
btrfs subvolume create /mydata/test
btrfs subvolume create /mydata/test2
btrfs subvolume list /mydata
我们复制一个文件到test子卷挂载的目录中,然后挂载/mydata进行验证一下
如果想要删除子卷的话只需要使用下面的命令即可
btrfs subvolume delete /mydata/test2
为子卷创建快照
btrfs subvolume snapshot /mydata/test /mydata/test_snap
为了验证我们在test目录中任意创建一个文件,然后切换到快照中发现新创建的文件不存在即快照创建成功
当我们不需要快照时可以使用一下命令进行快照的删除
btrfs subvolume delete /mydata/test_sanp 删除快照