Linux运维*一.Linux基础---15、btrfs文件系统

被刻印的时光 ゝ 提交于 2020-03-10 23:41:15

一、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 /块设备 ,将块设备回滚为原来系统

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!