前几天,关于高级文件系统方面也给大家分享过RAID和LVM,今天给大家分享的这款文件系统可能比这两者更先进,可以将其二者合二为一。第一,它可以使用磁盘或者分区大小不一样的设备组建RAID;第二,它可以做到像LVM一样,随时扩展以及缩减使用空间,LVM支持在线扩展,但不能支持在线缩减,btrfs同时支持在线扩展和在线缩减;并且支持一条命令直接创建出带RAID功能的LV。所以个人体验之后觉得相当不错,分享于大家。
一、btrfs文件系统定义
1、Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle, 2007, CoW
核心特性:
1、多物理卷支持:btrfs可由多个底层物理卷组成,支持RAID,以及联机“添加”、“移除”,“修改”
2、写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新
3、数据及元数据校验码:checksum
4、子卷:sub_volume
5、快照:支持快照的快照
6、透明压缩
二、brtfs文件系统操作的相关命令
1、创建文件系统
mkfs.btrfs
-L "LABEL"指定brtfs文件系统的卷标
-d <type>: raid0, raid1, raid5, raid6, raid10, single
-f|--force:强制写入btrfs文件系统(会覆盖原有文件系统)
-m <profile>: raid0, raid1, raid5, raid6, raid10, single or dup
-O <feature>:指定创建文件系统时启用的特性
-O list-all: 列出支持的所有feature
如:mkfs.btrfs -L mydata -f /dev/sdb /dev/sdc
2、查看文件系统属性
btrfs filesystem show 查看所有btrfs文件系统的设备属性,等同于使用blkid
btrfs filesystem show –m device 查看某个指定的设备的btrfs文件系统属性
3、挂载文件系统
mount -t btrfs device mount_point
4、挂载透明压缩机制
mount -o compress={lzo|zlib} device mount_point
5、在线缩减文件系统(可以带RAID操作)
btrfs filesystem resize -10G mount_point
6、在线扩展文件系统(可以带RAID操作)
btrfs filesystem resize +5G mount_point
btrfs filesystem resize max mount_point(使用全部空间)
7、查看指定btrfs文件系统的使用详情
btrfs filesytem df mount_point等同于使用df –lh
8、添加设备:man btrfs-device
btrfs device add /dev/sdb mount_point
9、删除设备
btrfs device delete /dev/sdb mount_point
10、平衡数据:man btrfs-banlance
btrfs banlance status mount_point 查看当前数据的平衡状态
btrfs banlance start mount_point 开始平衡数据
btrfs banlance pause mount_point 暂停平衡灵气
btrfs banlance cancel mount_point 取消平衡数据
btrfs banlance resume mount_point 查看数据平衡的摘要
11、修改raid级别:需要raid对成员数量的要求
btrfs balance start -mconvert=raid1|raid0|raid5 mount_point
btrfs balance start -dconvert=raid1|raid0|raid5 mount_point
12、子卷管理:man btrfs-subvolume
btrfs subvolume list mount_point 查看子卷信息
btrfs subvolume create mount_point/subv1 在当前卷下创建子卷
mount -o subvol=subv1 /dev/sdb mount_point 挂载子卷
mount /dev/sdb mount_point 挂父卷,子卷自动挂载
mount -o subvolid=### /dev/sdb mount_point 使用子卷ID挂载子卷
btrfs subvolume delete mount_point/subv1 删除子卷
13、创建快照
btrfs-subvolume snapshot [-r] mount_point/subv1 mount_point/snapshot_subv1
14、删除快照
btrfs-subvolume delete mount_point/snapshot_subv1
15、将ext4转换成btrfs(需要离线操作)
btrfs-convert /dev/sdb1
16、将btrfs转换成ext4(需要离线操作)
btrfs-convert -r /dev/sdb1
17、对文件启用CoW(写时复制)需要系统内核支持
cp --reflink testfile testfile2
三、btrfs文件系统管理实例
1、使用四块同样大小的硬盘,创建一个带有raid10功能的btrfs文件系统
[root@centos7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 5G 0 part /
└─sda3 8:3 0 5G 0 part /test
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sr0 11:0 1 7.2G 0 rom
[root@centos7 ~]# mkfs.btrfs -L raid10 -d raid10 -f /dev/sd{b,c,d,e}
btrfs-progs v3.19.1
See http://btrfs.wiki.kernel.org for more information.
Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
Turning ON incompat feature 'skinny-metadata': reduced-size metadata extent refs
adding device /dev/sdc id 2
adding device /dev/sdd id 3
adding device /dev/sde id 4
fs created label raid10 on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 80.00GiB
[root@centos7 ~]#
btrfs文件系统创建成功,现在可以创建挂载点挂载使用了
[root@centos7 ~]# mkdir /raid10
[root@centos7 ~]# mount /dev/sde /raid10
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 4.3G 743M 86% /
devtmpfs 899M 0 899M 0% /dev
tmpfs 913M 84K 913M 1% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda3 4.8G 1.2G 3.4G 26% /test
/dev/sda1 197M 139M 59M 71% /boot
tmpfs 183M 16K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
/dev/sdb 40G 17M 38G 1% /raid10
[root@centos7 ~]#
由此我们可以看出,raid10创建出来的效果,80G的硬盘做出来的是40G的raid,而且可以直接以其中任意一块盘的名称去挂载使用,但是挂载列表中显示出来的始终是文件系统创建成功时标明带有卷标的那个硬盘或者分区
查看文件系统属性
[root@centos7 ~]# btrfs filesystem show
Label: 'raid10' uuid: 37cf611f-e4d9-4a42-a599-5e8016b67958
Total devices 4 FS bytes used 896.00KiB
devid 1 size 20.00GiB used 2.02GiB path /dev/sdb
devid 2 size 20.00GiB used 2.00GiB path /dev/sdc
devid 3 size 20.00GiB used 1.01GiB path /dev/sdd
devid 4 size 20.00GiB used 1.01GiB path /dev/sde
btrfs-progs v3.19.1
[root@centos7 ~]#
查看指定btrfs文件系统的使用详情
[root@centos7 ~]# btrfs filesystem df /raid10
Data, RAID10: total=2.00GiB, used=768.00KiB
Data, single: total=8.00MiB, used=0.00B
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@centos7 ~]#
添加压缩挂载选项
[root@centos7 ~]# mount -o compress=zlib /dev/sdb /raid10
[root@centos7 ~]# mount
/dev/sda2 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sda3 on /test type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sdb on /raid10 type btrfs (rw,relatime,seclabel,compress=zlib,space_cache)
[root@centos7 ~]#
2、在线缩减空间
[root@centos7 ~]# btrfs filesystem resize -10G /raid10
Resize '/raid10' of '-10G'
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 4.3G 743M 86% /
devtmpfs 899M 0 899M 0% /dev
tmpfs 913M 84K 913M 1% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda3 4.8G 1.2G 3.4G 26% /test
/dev/sda1 197M 139M 59M 71% /boot
tmpfs 183M 16K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
/dev/sdb 35G 17M 18G 1% /raid10
[root@centos7 ~]# btrfs filesystem show
Label: 'raid10' uuid: 37cf611f-e4d9-4a42-a599-5e8016b67958
Total devices 4 FS bytes used 896.00KiB
devid 1 size 10.00GiB used 2.02GiB path /dev/sdb
devid 2 size 20.00GiB used 2.00GiB path /dev/sdc
devid 3 size 20.00GiB used 1.01GiB path /dev/sdd
devid 4 size 20.00GiB used 1.01GiB path /dev/sde
btrfs-progs v3.19.1
[root@centos7 ~]#
没有取消挂载的情况下,直接把raid10的空间缩减下来了
3、在线扩展空间
[root@centos7 ~]# btrfs filesystem resize max /raid10
Resize '/raid10' of 'max'
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 4.3G 743M 86% /
devtmpfs 899M 0 899M 0% /dev
tmpfs 913M 84K 913M 1% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda3 4.8G 1.2G 3.4G 26% /test
/dev/sda1 197M 139M 59M 71% /boot
tmpfs 183M 16K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
/dev/sdb 40G 17M 38G 1% /raid10
[root@centos7 ~]#
没有取消挂载的情况下,直接把raid10的空间扩展到了可用空间最大值了
4、在线转换RAID级别(RAID10->RAID5)
需要分两步进行,先转换元数据,再转换数据
[root@centos7 ~]# btrfs balance start -mconvert=raid5 /raid10
Done, had to relocate 4 out of 6 chunks
[root@centos7 ~]# btrfs filesystem df /raid10
Data, RAID10: total=2.00GiB, used=768.00KiB
Data, single: total=8.00MiB, used=0.00B
System, RAID5: total=96.00MiB, used=16.00KiB
Metadata, RAID5: total=1.03GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@centos7 ~]#
元数据已经转换好了,接下来转换数据
[root@centos7 ~]# btrfs balance start -dconvert=raid5 /raid10
Done, had to relocate 2 out of 4 chunks
[root@centos7 ~]# btrfs filesystem df /raid10
Data, RAID5: total=3.00GiB, used=1.00MiB
System, RAID5: total=96.00MiB, used=16.00KiB
Metadata, RAID5: total=1.03GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@centos7 ~]#
元数据和数据都转换完成了
其它选项,就不再给大家一一演示了,大家可以按照我给的命令格式自行实践。虽说btrfs文件系统是一个测试版本,目前也只有Centos7上默认支持,但个人觉得功能还是相当强大,在未来是有市场空间的。如果在我们生产环境允许的情况下,也是可以考虑使用这款文件系统的。只是我们尽量采用RAID和LVM的标准参数思维来创建以及使用这款文件系统,相信它会给你带你事半功倍的效应。