Linux btrfs文件系统管理与应用
btrfs文件系统详解及使用
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来使用
实例演示
先在虚拟机中添加三块磁盘大小分别是20G的磁盘,/sdb,/sdc,/sdd
然后将sdb与sdc创建成btrfs文件系统
mkfs.btrfs -L mydata /dev/sdb /dev/sdc
使用btrfs filesystem show这个命令来查看一下系统中的使用btrfs的分区
btrfs filesystem show
将创建好的文件系统挂载的/mydata目录
mount -t btrfs /dev/sdb /mydata
让数据已透明压缩的方式存储到此文件系统中
umount /dev/sdb mount -o compress=lzo /dev/sdb /mydata/
缩减文件系统的大小
btrfs filesystem resize -10G /mydata
添加新的磁盘到文件系统中
btrfs device add /dev/sdd /mydata
我们可以将原有数据均衡到三块磁盘中
btrfs balance start /mydata
当我们需要缩减存储空间时,可以使用命令直接移除磁盘,被移除的磁盘中的数据会自动同步到其它的磁盘上面
btrfs device delete /dev/sdb /mydata
更能文件系统默认的存储方式
- 首先我们先来查看一下文件系统的的基本信息
- 这里我们可以看到数据是以single单文件格式存储的
- 元数据是以RAID1方式存储的
- 下面我们将存储方式全部更改为RAID5级
btrfs filesystem df /mydata
将第二块磁盘重新添加进来
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目录下
创建子卷 test test2
btrfs subvolume create /mydata/test btrfs subvolume create /mydata/test2 btrfs subvolume list /mydata
umount /mydata/ mount -o subvol=test /dev/sdb /mnt
我们复制一个文件到test子卷挂载的目录中,然后挂载/mydata进行验证一下
cp /etc/mtab /mnt/ umount /mnt/ mount /dev/sdb /mydata/ ls /mydata/test
如果想要删除子卷的话只需要使用下面的命令即可
btrfs subvolume delete /mydata/test2
为子卷创建快照
btrfs subvolume snapshot /mydata/test /mydata/test_snap btrfs subvolume list /mydata/
为了验证我们在test目录中任意创建一个文件,然后切换到快照中发现新创建的文件不存在即快照创建成功
cd /mydata/test touch test.txt ls /mydata/test_snap/