Btrfs文件系统

简单的介绍一下

btrfs,全称为b-tree,江湖上也有人管他叫butter FS或Better FS,遵循GPL协定,由oracle公司从2007年左右开始研发。

核心特性

  1. Cow:写时复制,可将预修改的文件复制一份,接着在副本上完成修改,而后把文件指针指向副本文件,一旦改错了还可以随时回退。
  2. 校验码机制:支持数据及元数据校验码机制,方便快速检测文件是否受损,可自动尝试修复,极大了保障了数据可靠性。
  3. 快照:支持快照,类似lvm的快照,不过它还支持快照的快照和对单个文件做快照。
  4. RAID:支持RAID。
  5. 多物理卷支持:btrfs文件系统可由多个底层的物理卷组成,类似逻辑卷中的vg。
  6. 子卷:可在一个文件系统中创建多个子卷,接着将每个子卷单独使用或挂载。
  7. 动态伸缩:支持联机实现物理卷的添加、移除、修改操作。
  8. 透明压缩:通过消耗CPU的时钟周期来完成数据压缩存放,并且在用户读取时自动解压缩,整个过程用户是无感的,不过压缩与解压就会消耗CPU的时钟周期。

命令

创建并挂载brtfs文件系统

mkfs.btrfs [option] DEV:创建btrfsoption:-L:指定卷标。-m:指定元数据如何存放,支持raid0|1|5|6|10、single、dup,确保底层设备够用。-d:指定数据如何存放,支持raid0|1|5|6|10、single。-O:指定启用的特性,需在格式化时使用,但是一些老内核可能不支持全部特性,可使用mkfd.brtfs -O list-all查看支持的特性。

挂载btrfs和挂载普通文件系统无异。

mount -t brtfs DEV MOUNT_POINT:-t也可以缺省。
启用透明压缩机制:mount -o comperess={lzo|zlib} DEVICE MOUNT_POINT

管理brtfs命令

命令格式:btrfs <subcommand> [option]

1. brtfs filesystem [option]:管理btrfs系统的命令。option:(1) show|[--mounted|--all-devices|<path>|<uudi>|device|<label>]:显示brtfs文件系统,支持多种指定方式。  (2) sync <path>:强制将指定设备存储在内存上的数据同步到磁盘上。(3) df <path>:查看指定已挂载设备的空间使用率情况。(4) defragmeng [option] <file> | <dir>:做磁盘碎片整理。(5) resize [+|-]#[gkm] <path> | max <path>:改变文件系统大小。(6) label [<dev>|<mountpoint>] [<newlabel>] :显示卷标。2. btrfs device [option]:管理硬件设备的命令。option:(1) add DEV path:新增设备。(2) deleta DEV path:移除一个设备,btrfs可以智能将预拆除设备上的数据移除,并且文件系统逻辑边界与物理边界自动调整,\\但是在拆除前,一定确保拆除后的磁盘大小能够承载现有数据。(3) scan:扫描设备。(4) ready:将指定设备转为备用状态。(5) state:显示I\O统计数据。3. btrfs balance [option]  path:实现数据均衡。option:(1) status <path>:查看文件系统均衡进度。(2) start [[-m|-d]convert] <path>:启动均衡,可以修改数据及元数据的组织机制,或仅均衡数据。(3) stop <path>:终止均衡。(4) pause <path>:暂停均衡。(5) resume <path>:继续均衡。4. btrfs subvolume [option] path:子卷管理命令。option:(1) list path:列出子卷。(2) create /path/sub_path:创建子卷,直接在父卷下使用类似创建目录的形式创建子卷。(3) delete /path:删除子卷(4) show path:显示子卷的详细信息。(5) snapshot VOL VOL_SNAP:创建快照卷。(6) get default:查看默认卷。(7) set default:设置默认卷。可以单独挂载子卷,使用mount -o subvol=SUB_NAME DEV /path,也可以使用卷ID实现挂载。5. btrfs-convert [option] DEVoption:(1) -r:回滚文件系统。

一次完整的操作过程

  1. 使用3个卷创建1个btrfs文件系统。
  2. 调整brtfs的空间大小,查看前后空间对比。增删底层设备,查看空间变化及底层物理卷信息。
  3. 新增1个设备,完成数据的balance。
  4. 不挂载父卷的情况下挂载子卷,查看文件信息。
  5. 对某个物理卷创建快照,验证效果。对brtfs底层卷数量进行增删,查看空间变化情况,查看底层物理卷信息。
  6. 选个分区,先格式化成ext4文件系统,在转换成btrfs,在转换成ext4。

分步开始:

  • 使用3个卷创建1个btrfs文件系统。

首先在虚拟机中加入4块硬盘或4个分区,格式化其中3个创建成btrfs。

[root@node1 ~]# mkfs.btrfs -L mydata /dev/sdb1 /dev/sdb2 /dev/sdb3
btrfs-progs v4.9.1
See http://btrfs.wiki.kernel.org for more information.Label:              mydata
UUID:               43f82814-243e-4154-b3f5-be980e5b3cb0
Node size:          16384
Sector size:        4096
Filesystem size:    65.00GiB
Block group profiles:Data:             RAID0             3.00GiBMetadata:         RAID1             1.00GiBSystem:           RAID1             8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  3
Devices:ID        SIZE  PATH1    20.00GiB  /dev/sdb12    30.00GiB  /dev/sdb23    15.00GiB  /dev/sdb3
[root@node1 ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="mydata" UUID="43f82814-243e-4154-b3f5-be980e5b3cb0" UUID_SUB="611caec5-f15a-4e4a-b734-2564a7e6151c" TYPE="btrfs"
[root@node1 ~]# blkid /dev/sdb2
/dev/sdb2: LABEL="mydata" UUID="43f82814-243e-4154-b3f5-be980e5b3cb0" UUID_SUB="0b963519-fe9d-4107-a283-d34057e07be7" TYPE="btrfs"
[root@node1 ~]# blkid /dev/sdb3
/dev/sdb3: LABEL="mydata" UUID="43f82814-243e-4154-b3f5-be980e5b3cb0" UUID_SUB="fb035730-f919-486b-9ce3-a60fdae3621b" TYPE="btrfs"

这里可以看到,3个分区共同组成了1个btrfs,并且每个分区使用不同的UUID_SUB来区分。

  • 调整brtfs的空间大小,查看前后空间对比。增删底层设备,查看空间变化及底层物理卷信息。
[root@node1 ~]# df -lh
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.4G     0  1.4G   0% /dev
tmpfs                    1.4G     0  1.4G   0% /dev/shm
tmpfs                    1.4G  9.5M  1.4G   1% /run
tmpfs                    1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  1.4G   49G   3% /
/dev/mapper/centos-home   46G   33M   46G   1% /home
/dev/sda1               1014M  150M  865M  15% /boot
tmpfs                    283M     0  283M   0% /run/user/0
/dev/sdb1                 65G   18M   52G   1% /mydata分区大小分别为 20G、30G、15G共同组成 65G 大小的Btrfs。
[root@node1 ~]# btrfs filesystem resize -20G /mydata
Resize '/mydata' of '-20G'
ERROR: unable to resize '/mydata': Invalid argument   <------这里-20G报错了,提示参数错误。[root@node1 ~]# btrfs filesystem resize -19G /mydata
Resize '/mydata' of '-19G'
ERROR: unable to resize '/mydata': No space left on device  <---------这里-19G报错了,提示磁盘空间不足。[root@node1 ~]# btrfs filesystem resize -18G /mydata
Resize '/mydata' of '-18G'
执行成功后,我又将空间调整为max。
[root@node1 ~]# btrfs filesystem resize -15G /mydata
Resize '/mydata' of '-15G'
执行成功后,我又将空间调整为max。
[root@node1 ~]# btrfs filesystem resize max /mydata
Resize '/mydata' of 'max'
[root@node1 ~]# btrfs filesystem resize -10G /mydata
Resize '/mydata' of '-10G'

这里遇到个小问题,空间减少20G与空间减少19G都报错了,但是报错信息不同,自我推测原因为Btrfs存储元数据及数据会默认启用RAID机制,应该是-20G或19G就会破坏现在的RAID级别,所以它拒绝修改,于是我尝试着将调整btrfs的数据组织机制,尝试过raid0、raid1、raid5、single的不同组合(single暂未设置成功),有趣的是,调整数据组织机制后,执行缩减空间大小命令时,报错区间也变化了。目前还没摸清具体的缩减取值区间及规律,不过我笃定数据组织机制就是限制空间缩减的元凶。

  • 新增1个设备,完成数据的balance。
    首先查看下现在的底层设备信息。
[root@node1 ~]# btrfs filesystem show
Label: 'mydata'  uuid: 43f82814-243e-4154-b3f5-be980e5b3cb0Total devices 3 FS bytes used 704.00KiBdevid    1 size 2.00GiB used 1.16GiB path /dev/sdb1devid    2 size 30.00GiB used 1.16GiB path /dev/sdb2devid    3 size 15.00GiB used 1.16GiB path /dev/sdb3
[root@node1 ~]# df -lh
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.4G     0  1.4G   0% /dev
tmpfs                    1.4G     0  1.4G   0% /dev/shm
tmpfs                    1.4G  9.5M  1.4G   1% /run
tmpfs                    1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  1.4G   49G   3% /
/dev/mapper/centos-home   46G   33M   46G   1% /home
/dev/sda1               1014M  150M  865M  15% /boot
tmpfs                    283M     0  283M   0% /run/user/0
/dev/sdb1                 47G   17M   46G   1% /mydata

可以看到,现在这个brtfs共有3个分区,并且空间共47G。现在我使用dd命令,向btrfs中填充一些数据。

[root@node1 ~]# dd if=/dev/zero of=/mydata/data.dd bs=1G count=10
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 38.9366 s, 276 MB/s[root@node1 mydata]# ll -h
total 10G
-rw-r--r--. 1 root root 10G May 12 21:19 data.dd

执行命令将新的分区加入这个btrfs。

[root@node1 mydata]# btrfs device add /dev/sdb5 /mydata
[root@node1 mydata]# df -lh
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.4G     0  1.4G   0% /dev
tmpfs                    1.4G     0  1.4G   0% /dev/shm
tmpfs                    1.4G  9.5M  1.4G   1% /run
tmpfs                    1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  1.4G   49G   3% /
/dev/mapper/centos-home   46G   33M   46G   1% /home
/dev/sda1               1014M  150M  865M  15% /boot
tmpfs                    283M     0  283M   0% /run/user/0
/dev/sdb1                 82G   11G   63G  14% /mydata
[root@node1 mydata]# btrfs filesystem show /mydata
Label: 'mydata'  uuid: 43f82814-243e-4154-b3f5-be980e5b3cb0Total devices 4 FS bytes used 10.01GiBdevid    1 size 2.00GiB used 2.00GiB path /dev/sdb1devid    2 size 30.00GiB used 9.00GiB path /dev/sdb2devid    3 size 15.00GiB used 9.00GiB path /dev/sdb3devid    4 size 35.00GiB used 0.00B path /dev/sdb5

现在已经完成了新分区加入,接着对数据进行balance。

[root@node1 mydata]# btrfs balance start /mydata
WARNING:Full balance without filters requested. This operation is veryintense and takes potentially very long. It is recommended touse the balance filters to narrow down the balanced data.Use 'btrfs balance start --full-balance' option to skip thiswarning. The operation will start in 10 seconds.Use Ctrl-C to stop it.
10 9 8 7 6 5 4 3 2 1
Starting balance without any filters.
Done, had to relocate 11 out of 11 chunks
有道机翻:完全平衡,没有过滤器要求。这次行动非常紧张,可能需要很长时间。
建议使用均衡过滤器来缩小被均衡的数据范围。使用'btrfs balance start——full-balance'选项跳过此警告。
过程中查看balance状态:
[root@node1 ~]# btrfs balance status /mydata
Balance on '/mydata' is running
2 out of about 11 chunks balanced (3 considered),  82% left

不管如何,最后它提示了Done。那就暂且算验证成功了吧。

Btrfs文件系统管理及应用相关推荐

  1. 2.Linux磁盘,文件系统管理--创建文件系统

    第一篇:创建文件系统(格式化) ============================================================================ 概述: === ...

  2. 磁盘与文件系统管理( 认识磁盘,了解磁盘,文件系统的建立与自动挂载)

    文章目录 磁盘与文件系统管理 磁盘结构及分区表示 硬盘的结构 硬盘的接口 磁盘分区表示 MBR介绍 fdisk 命令–查看或管理磁盘分区 mkswap命令 磁盘分区的表示 linux系统文件类型 EX ...

  3. 20150901-Linux磁盘管理及文件系统管理

    占位,待完善... Linux系统管理 磁盘和文件系统管理: RAID, LVM; btrfs; 程序包管理:rpm, yum(dnf) Linux的网络管理; 进程和作业管理:htop, glanc ...

  4. Centos磁盘管理和文件系统管理

    Linux磁盘及文件系统管理 文件接口:open(), read(), write(), close() 设备类别: 块(block):随机访问,数据交换单位为"块" 字符(cha ...

  5. Linux文件系统管理——创建与检测

    目录 一.常见的文件系统 二.文件系统的组成部分 三.文件系统管理工具 1.创建文件系统 2.mkswap:创建交换分区 3.blkid:块设备属性信息查看 4.e2label 5.tune2fs 7 ...

  6. Linux磁盘分区逻辑卷文件系统管理

    文章目录 两种分区工具 一.fdisk 分区工具 二.格式化 三.挂载使用分区 四.parted 分区工具 五.交换空间 5.1.使用分区做交换空间 5.2.使用文件所占用的硬盘空间,充当交换空间 逻 ...

  7. Linux 之旅 5:磁盘与文件系统管理

    Linux 之旅 5:磁盘与文件系统管理 Linux文件系统 文件系统特性 我们知道,对于一个新的存储设备,无论是移动硬盘还是U盘,在第一次连接电脑后一般都会提示要格式化后使用,那格式化是做什么用的呢 ...

  8. php管理txt文件系统,PHP文件系统管理详解

    下面小编就为大家带来一篇PHP文件系统管理(实例讲解).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 文件概念: 第一个是windows的文件,另一个php根据LINU ...

  9. 磁盘管理及文件系统管理

    Linux磁盘管理及文件系统管理 涉及到的命令: mknod.fdisk.partx.kpartx.partprobe.ln.mkfs.mkfs.{ext2.ext3.ext4.xfs}.fsck.{ ...

最新文章

  1. Firefox 与 IE 已死?Chrome 一统天下!
  2. EasyUI--datebox设置默认时间
  3. 机器学习/梯度下降算法
  4. 【译】探索更轻量的Electron替代品来托管Blazor桌面应用程序
  5. 【渝粤教育】国家开放大学2018年春季 0471-21T畜牧学 参考试题
  6. C++算法一些常用的stl函数
  7. Redis 发布订阅
  8. CVPR2021 视频超分辨率中的时空蒸馏方案
  9. odoo12 启动过程中出现的问题解决
  10. python变量作用域图解_python笔记--作用域、高阶函数、闭包
  11. 20050909:女乘客钓男司机?
  12. c语言程序游戏例子,C语言游戏编写例子.doc
  13. 监听程序当前无法识别连接描述符中请求的服务_Linux I/O复用中select poll epoll模型的介绍及其优缺点的比较...
  14. 《那些年啊,那些事——一个程序员的奋斗史》四
  15. python社团宣传语_宣传语_Python语言及其应用_红黑联盟读书频道
  16. 小鹿爬虫系列——静态网站页面爬取
  17. npm install 报错sill pacote range manifest for hmac-drbg@^1.0.0 fetched
  18. CTF学习笔记:misc
  19. Objective-c 学习笔记(二)
  20. 计算机能不能升级固态硬盘,不算很老的计算机升级,换一块MLC的固态硬盘吧,新电脑回来了!...

热门文章

  1. 解决vim中无法退格删除的问题
  2. java 返回 json格式_java 如何返回json格式数据,需要技巧
  3. 关于equals()方法的调用报空指针异常的问题---常量在前,变量在后
  4. 关于Omnet+Sumo+Veins的安装与配置的一些浅谈
  5. ThreeJs 3D编程
  6. 单片机加红外编解码模块(自带破解空调遥控器功能)实现控制空调开关
  7. 华为海思ubuntu qt
  8. 如何针对轮播图进行功能测试?
  9. VC++武汉科技大学机械自动化学院
  10. div 上下左右 居中