一、btrfs文件系统简介
btrfs(B-tree,Butter FS,Better FS):由GPL授权,Oracle在2007年左右开始研发,支持写时复制(CoW),是ext的取代产品,centos6不支持btrfs
btrfs核心特征:
1、多物理卷支持:
btrfs可由多个底层物理卷组成
支持RAID、以联机“添加”、“移除”、“修改”
2、支持写时复制跟新机制(CoW):
修改文件时,不直接修改原文件,而是修改快照复制出那份文件
修改完成后将文件名指向重源文件改为指向修改的复制文件上;
工作模式为:复制、更新、替换指针;
可实现文件的快速修复及恢复。
3、支持数据及元数据校验码:checksum
4、支持子卷:sub_volume
5、支持快照及增量快照:即支持给快照进行快照
6、透明压缩:
将数据存储到btrfs文件系统时,能实现自动压缩;
读取时有能实现自动解压缩,节约存储空间
二、btrfs文件系统管理工具
[root@localhost ~]# btrfs
btrfs btrfs-debug-tree btrfs-map-logical btrfstune
btrfsck btrfs-find-root btrfs-select-super btrfs-zero-log
btrfs-convert btrfs-image btrfs-show-super
[root@localhost ~]# btrfs --help
mkfs.btrfs /dev/块设备 # 将指定设备格式化为btrfs
mkfs.btrfs -L 卷标名 /dev/块设备 # 将指定设备格式化为btrfs,并指明卷标
[root@localhost /]# mkfs.btrfs -L MyData /dev/sdb /dev/sdc
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
fs created label MyData on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 40.00GiB
mkfs.btrfs -m {raid0|raid1|…} 卷标名 /dev/块设备 # 指明元原数据如何存放
raid0 | raid1 | raid5 | raid6 | raid10|single(单独存放)|dup(冗余存放)
mkfs.btrfs -d {raid0|raid1|…} /dev/块设备
指明输入如何存放(如何跨多设备存放)
raid0 | raid1 | raid5 | raid6 | raid10 | single
mkfs.btrfs -O list-all # 查看btrfs特新选项
[root@localhost ~]# mkfs.btrfs -O list-all
Filesystem features available at mkfs time:
mixed-bg - mixed data and metadata block groups (0x4)
extref - increased hardlink limit per file to 65536 (0x40, default)
raid56 - raid56 extended format (0x80)
skinny-metadata - reduced-size metadata extent refs (0x100, default)
no-holes - no explicit hole extents for files (0x200)
mount -t btrfs /dev/sdb /Mydata # 将创建好的sdb挂载Mydata(同时自动挂载子卷)
[root@localhost /]# mkdir /Mydata
[root@localhost /]# mount -t btrfs /dev/sdb /Mydata
[root@localhost /]# mount
/dev/sdb on /Mydata type btrfs (rw,relatime,seclabel,space_cache)
umount /块设备 #进行卸载
mount -o compress={lzo|zlib} /块设备 /挂载点 #挂载时,开启透明压缩机制支持压缩解压缩lzo和zlib
[root@localhost /]# mount -o compress=lzo /dev/sdb /Mydata
三、UUID查看
使用blkid查看sdc和sdb,因为被创建为一个文件系统,所以UUID相同,但是子卷UUID_SUB不同
[root@localhost /]# blkid /dev/sdb
/dev/sdb: LABEL="MyData" UUID="9a4159df-9556-4087-aec0-ff43e954e0b7" UUID_SUB="b176c983-38ea-4287-a14a-048441d7be33" TYPE="btrfs"
[root@localhost /]# blkid /dev/sdc
/dev/sdc: LABEL="MyData" UUID="9a4159df-9556-4087-aec0-ff43e954e0b7" UUID_SUB="263c080b-3439-4ef6-b9d0-c7368c860f6f" TYPE="btrfs"
四、btrfs filesystem
btrfs filesystem show #查看创建好的btrfs文件系统
[root@localhost /]# btrfs filesystem show
Label: 'MyData' uuid: 9a4159df-9556-4087-aec0-ff43e954e0b7
Total devices 2 FS bytes used 112.00KiB
devid 1 size 20.00GiB used 2.03GiB path /dev/sdb
devid 2 size 20.00GiB used 2.01GiB path /dev/sdc
btrfs filesystem lable /dev/块设备 #查看指定块设备所属btrfs系统的卷标
[root@localhost /]# btrfs filesystem label /dev/sdb
MyData
btrfs filesystem resize {+n单位|-n单位|max} /Mydata #将挂载好的btrfs文件系统扩5G(+5G)
或者缩减5G(-5G)
或者调整至最大逻辑边界(等于物理空间大小)
[root@localhost /]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb 40G 17M 38G 1% /Mydata
[root@localhost /]# btrfs filesystem resize -10G /Mydata
Resize '/Mydata' of '-10G'
[root@localhost /]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb 30G 17M 18G 1% /Mydata
btrfs filesystem df /挂载的文件系统 #查看挂载好的btrfs文件系统的空间使用信息
[root@localhost /]# btrfs filesystem df /Mydata/
Data, RAID0: total=2.00GiB, used=768.00KiB
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
五、btrfs device
btrfs device add /块设备 /挂载点
# 将指定的块设备添加到指定的btrfs文件系统挂载点(会自动挂载及自动扩展)
补充:拆除磁盘时需要将磁盘的数据组织形式、原数据组织形式、文件系统组织形式改为single或者raid1
[root@localhost /]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb 40G 17M 18G 1% /Mydata
[root@localhost /]# btrfs device add /dev/sdd /Mydata
[root@localhost /]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb 60G 17M 56G 1% /Mydata
btrfs device delete /块设备 /挂载点
将指定的块设备从指定的btrfs文件系统挂载点移除(会自动移动块设备的数据到其它设备后再移除块设备)
[root@localhost /]# btrfs device delete /dev/sdd /Mydata/
六、btrfs blance
btrfs balance state /挂载点 #将多个块设备储存的数据平衡均分储存到各个块设备
btrfs balance status /挂载点 #显示balance均分状态
btrfs balance pause /挂载点 #暂停balance均分
btrfs balance resume /挂载点 #继续balance均分
btrfs balance cancel /挂载点 #取消balance均分
btrfs balance start -dconvert={raid1raid5|…} /挂载点 #修改数据的组织机制
如修改Raid级别{raid0|raid1|raid10|raid5|raid6|single|dup}
[root@localhost /]# btrfs filesystem df /Mydata/
Data, RAID0: total=2.00GiB, used=768.00KiB
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@localhost /]# btrfs balance start -dconvert=raid5 /Mydata
Done, had to relocate 1 out of 5 chunks
[root@localhost /]# btrfs filesystem df /Mydata
Data, RAID5: total=2.00GiB, used=768.00KiB
System, RAID5: total=64.00MiB, used=16.00KiB
Metadata, RAID5: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
btrfs balance start -mconvert={raid1raid5|…} /挂载点 #修改元数据的组织机制
[root@localhost /]# btrfs filesystem df /Mydata/
Data, RAID0: total=2.00GiB, used=768.00KiB
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@localhost /]# btrfs balance start -mconvert=raid5 /Mydata
Done, had to relocate 4 out of 5 chunks
[root@localhost /]# btrfs filesystem df /Mydata
Data, RAID5: total=2.00GiB, used=768.00KiB
System, RAID5: total=64.00MiB, used=16.00KiB
Metadata, RAID5: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
btrfs balance start -sconvert={raid1raid5|…} /挂载点 #修改文件系统的组织机制
[root@localhost /]# btrfs filesystem df /Mydata/
Data, RAID0: total=2.00GiB, used=768.00KiB
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@localhost /]# btrfs balance start -sconvert=raid5 /Mydata
Refusing to explicitly operate on system chunks.
Pass --force if you really want to do that.
[root@localhost /]# btrfs filesystem df /Mydata
Data, RAID5: total=2.00GiB, used=768.00KiB
System, RAID5: total=64.00MiB, used=16.00KiB
Metadata, RAID5: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
七、btrfs subvolume子卷命令
btrfs subvolume create /挂载点/子卷名 #在指定挂载点创建btrfs子卷
[root@localhost /]# btrfs subvolume create /Mydata/mydata1
Create subvolume '/Mydata/mydata1'
btrfs subvolume list /挂载点 # 查看指定挂载点下的子卷
[root@localhost /]# btrfs subvolume list /Mydata
ID 260 gen 39 top level 5 path mydata1
mount -o subvol=子卷名 /dev/块设备 /挂载点 # 单独将子卷挂载到指定挂载点
[root@localhost /]# mkdir Mydata1
[root@localhost /]# mount -o subvol=mydata1 /dev/sdb /Mydata1
mount -o subvolid=子卷ID /dev/块设备 /挂载点 # 使用子卷ID单独将子卷挂载到指定挂载点
[root@localhost /]# mount -o subvolid=260 /dev/sdb /Mydata1
btrfs subvolume show /子卷挂载点 # 查看子卷信息
[root@localhost /]# btrfs subvolume show /Mydata1
/Mydata1
Name: mydata1
uuid: e660ee38-4086-244a-8bb4-9de481cf35fb
Parent uuid: -
Creation time: 2018-01-16 20:32:22
Object ID: 260
Generation (Gen): 39
Gen at creation: 39
Parent: 5
Top Level: 5
Flags: -
Snapshot(s):
btrfs subvolume delete /挂载点/子卷名 # 通过路径删除子卷
[root@localhost /]# btrfs subvolume delete /Mydata/mydata1
btrfs subvolume snapshot /父卷挂载点/子卷名 /父卷挂载点/快照子卷名 #创建子卷快照
补充:因为快照卷必须在原卷同一卷组下,所以子卷快照卷必须在其父卷下
[root@localhost /]# btrfs subvolume snapshot /Mydata/mydata1 /Mydata/mydata1_snap
八、对文件进行快照
cp --reflink 文件1 文件1快照卷
[root@localhost /]# cp --reflink passwd passwd_snap
九、将块设备自动转换为btrfs文件系统
1、将旧设备组织形式改为single或raid1
2、btrfs device delete拆除块设备
3、umount卸载旧设备挂载点
4、fsck -f /块设备 进行强制检测
5、btrfs-convert /块设备,将块设备自动转换为btrfs文件系统
6、mount进行挂载
7、5、btrfs-convert -r /块设备 ,将块设备回滚为原来系统
来源:CSDN
作者:Mr.BianC
链接:https://blog.csdn.net/bianchencheng/article/details/104784541