btrfs文件系统初识及应用

Btrfs(通常念成Butter FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。

特性:

首先是扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。 Extent,B-Tree 和动态 inode 创建等特性保证了btrfs在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。

其次是数据一致性 (data integrity) 相关的特性。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。 btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。

第三是和多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot),和克隆 (clone)  子卷(sub_volume)透明压缩。btrfs还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。

最后是其他难以归类的特性。这些特性都是比较先进的技术,能够显著提高文件系统的时间 / 空间性能,包括延迟分配,小文件的存储优化,目录索引等。

扩展性相关的特性

B-Tree

btrfs 文件系统中所有的 metadata 都由 B-Tree 管理。使用 B-Tree 的主要好处在于查找,插入和删除操作都很高效。可以说 B-Tree 是 btrfs 的核心。

一味地夸耀 B-Tree 很好很高效也许并不能让人信服,但假如稍微花费一点儿时间看看 ext2/3 中元数据管理的实现方式,便可以反衬出 B-Tree 的优点。(之前的博客文件系统详解有讲解ext系列的文件系统)。

基于 Extent 的文件存储

现代很多文件系统都采用了 extent 替代 block 来管理磁盘。 Extent 就是一些连续的 block,一个 extent 由起始的 block 加上长度进行定义,能有效地减少元数据开销。

centos7默认支持btrfs文件系统

通过fdisk 命令创建3个分区

[[email protected] ~]# fdisk -l
磁盘 /dev/sda:128.8 GB, 128849018880 字节,251658240 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00065fe7
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    46194687    22584320   8e  Linux LVM
/dev/sda3        46194688   251658239   102731776    5  Extended
/dev/sda5        46196736    67168255    10485760   83  Linux
/dev/sda6        67170304    88141823    10485760   83  Linux
/dev/sda7        88143872   109115391    10485760   83  Linux

mkfs.btrfs  创建btrfs文件系统的参数

-L   指定卷标

-m   指明元数据是如何存放的(raid0 raid1 raid....)

-d   如指定数据跨多设备存放的类型(raid0 raid1 raid5 raid6 raid10)

-O   格式化启动的特性

-O list-all 列出支持所有的feature;

[[email protected] ~]# mkfs.btrfs -L mydata /dev/sda5 /dev/sda6   #创建btrfs文件系统
Btrfs v3.16.2
See http://btrfs.wiki.kernel.org for more information.
[[email protected] ~]# btrfs filesystem show  #查看btrfs文件属性,是否创建
Label: ‘mydata‘  uuid: 4483a0bc-7fa1-4691-b976-a1a98ebf448c
Total devices 2 FS bytes used 112.00KiB
devid    1 size 10.00GiB used 2.03GiB path /dev/sda5
devid    2 size 10.00GiB used 2.01GiB path /dev/sda6
[[email protected] ~]# blkid /dev/sda5   #显示的子卷uuid和物理uuid是不同的
/dev/sda5: LABEL="mydata" UUID="4483a0bc-7fa1-4691-b976-a1a98ebf448c" UUID_SUB="cd986ce4-38c2-4b9d-845e-6009af489925" TYPE="btrfs" 
[[email protected] ~]# blkid /dev/sda6
/dev/sda6: LABEL="mydata" UUID="4483a0bc-7fa1-4691-b976-a1a98ebf448c" UUID_SUB="069a84fe-b9a0-47a2-851c-43ffa83d2aee" TYPE="btrfs"
[[email protected] ~]# mkdir /mysql
[[email protected] ~]# mount -o compress=lzo /dev/sda5 /mysql/   
#compress=lzo 指定压缩算法
#挂载btrfs文件系统(挂载btrfs设备一个任何即可)
[[email protected] ~]# df -h  #查看是否挂载
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   20G  838M   19G    5% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M     0  490M    0% /dev/shm
tmpfs                    490M  6.6M  484M    2% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  120M  378M   25% /boot
/dev/sda5                 20G  1.0M   18G    1% /mysql
[[email protected] ~]# btrfs filesystem resize -8G /mysql/  #文件系统缩减8G的容量,+8G表示拓展8G(resize 调整文件系统大小)
Resize ‘/mysql/‘ of ‘-8G‘
[[email protected] ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   20G  838M   19G    5% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M     0  490M    0% /dev/shm
tmpfs                    490M  6.7M  484M    2% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  120M  378M   25% /boot
/dev/sda5                 12G  512K   10G    1% /mysql
btrfs device add /dev/*  /mount_point 新增设备至挂载点,实现自动自动扩容
[[email protected] ~]# btrfs device add /dev/sda7 /mysql/   #新增分区/dev/sda7至/mysql
[[email protected] ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   20G  838M   19G    5% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M     0  490M    0% /dev/shm
tmpfs                    490M  6.7M  484M    2% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  120M  378M   25% /boot
/dev/sda5                 27G  512K   25G    1% /mysql

btrfs balance 把原来的数据均衡的分配到新增的磁盘上

btrfs balance status /mydata    #显示状态(并不是真正能看到)

[[email protected] ~]# btrfs balance start /mydata    #开启balance  pause 暂停

移除一个物理卷   

btrfs device delete   #拆除一个物理卷  在支持联机状态会自动先移动数据再拆除

[[email protected] ~]# btrfs device delete /dev/sda7 /mysql/  #把/dev/sda7拆除
[[email protected] ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   20G  838M   19G    5% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M     0  490M    0% /dev/shm
tmpfs                    490M  6.7M  484M    2% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  120M  378M   25% /boot
/dev/sda5                 17G  640K   17G    1% /mysql
[[email protected] ~]# btrfs balance start -dconvert=raid5 /mysql/ 
                                #修改数据的raid级别,修改支持动态
                     -mconvert=raid5 #修改元数据的raid级別                        
Done, had to relocate 1 out of 3 chunks
[[email protected] ~]# btrfs filesystem df /mysql/
Data, RAID5: total=2.00GiB, used=832.00KiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=256.00MiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00

创建子卷

[[email protected] mysql]# btrfs subvolume list /mysql/  #查看子卷是否挂载
[[email protected] mysql]# btrfs subvolume create /mysql/log    #创建子卷,而不是子目录
Create subvolume ‘/mysql/log‘
[[email protected] ~]# mount -o subvol=log /dev/sda5 /mnt/   挂载子卷到/mnt
[[email protected] ~]# ls /mnt/
[[email protected] ~]# cp /etc/se
securetty      security/      selinux/       services       sestatus.conf  
[[email protected] ~]# cp /etc/services /mnt/
[[email protected] ~]# btrfs subvolume show /mnt/  查看子卷信息
/mnt
Name: log
uuid: 3f81dd45-b049-084d-828f-59b39ca6318f
Parent uuid: -
Creation time: 2015-08-30 13:41:20
Object ID: 267
Generation (Gen): 109
Gen at creation: 106
Parent: 5
Top Level: 5
Flags: -
Snapshot(s):
[[email protected] ~]# umount /mnt/
[[email protected] ~]# mount /dev/sda5 /mysql/  #挂载父卷依然能看到自己的数据,相反是不行的
[[email protected] ~]# ls /mysql/log
services
[[email protected] ~]# btrfs subvolume delete /mysql/log2  #删除子卷
Transaction commit: none (default)
Delete subvolume ‘/mysql/log2‘
[[email protected] ~]# ls /mysql/
abc.txt  log

创建快照

[[email protected] ~]# btrfs subvolume create  /mysql/log3  #先创建一个子卷
Create subvolume ‘/mysql/log3‘
[[email protected] ~]# btrfs subvolume snapshot /mysql/log3/ /mysql/log3_snapshot  #创建快照
Create a snapshot of ‘/mysql/log3/‘ in ‘/mysql/log3_snapshot‘
[[email protected] ~]# btrfs subvolume delete /mydata/log3_snapshot   #删除快照卷

把ext系列的文件系统改成btrfs

[[email protected] ~]# btrfs device delete /dev/sda7 /mysql/ #先卸载一个分区(我没有去创建一个新分区)
[[email protected] mysql]# mke2fs -t ext4 -L mydata /dev/sda7  #格式化成ext4文件格式
[[email protected] ~]# mount /dev/sda7 /mydata/  #挂载
[[email protected] mysql]# cp /etc/services /mydata/  #写的数据进去
[[email protected] ~]# umount /mydata/   #改btrfs前先卸载分区 
[[email protected] ~]# fsck -f /dev/sda7   #强制修复
[[email protected] ~]# btrfs-convert /dev/sd7  #把ext系列的文件系统改成btrfs
[[email protected] ~]# btrfs filesystem show   #显示已改成btrfs文件系统
Label: ‘mydata‘  uuid: 4483a0bc-7fa1-4691-b976-a1a98ebf448c
Total devices 2 FS bytes used 1.77MiB
devid    1 size 7.00GiB used 1.28GiB path /dev/sda5
devid    2 size 10.00GiB used 1.28GiB path /dev/sda6
Label: ‘mydata‘  uuid: 69d2e02d-4c41-4e58-a186-0202b73d326a
Total devices 1 FS bytes used 326.20MiB
devid    1 size 10.00GiB used 10.00GiB path /dev/sda7
[[email protected] ~]# ls /mydata/    #数据依然还在
ext2_saved  lost+found  services
时间: 2024-10-22 13:42:52

btrfs文件系统初识及应用的相关文章

btrfs文件系统的管理及使用

Btrfs简介 文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3,ext 文件系统以其卓越的稳定性成为了事实上的 Linux 标准文件系统.近年来 ext2/3 暴露出了一些扩展性问题,于是便催生了 ext4 .在 2008 年发布的 Linux2.6.19 内核中集成了 ext4 的 dev 版本. 2.6.28 内核发布时,ext4 结束了开发版,开始接受用户的使用.似乎 ext 就将成为 Linux 文件系统的代名词.然而当您阅读很多有关 ext4 的文章时,会发现都

btrfs文件系统学习

btrfs文件系统由Oracle开发,btrfs设计目标为取代早期ext文件系统. 核心特性: 1.多物理卷支持:btrfs可由多个底层物理卷组成,支持RAID,以联机"添加"."移除"."修改". 2.写时复制更新机(COW):复制.更新及替换指针,而非就地修改更新. 3.数据及元数据效验码(checksum). 4.支持子卷(sub_volume). 5.快照及快照的快照. 6.透明压缩,支持两种压缩算法lzo和zlib通过命令mount -

centos7之btrfs文件系统

btrfs文件系统 一.Btrfs(B-tree,butter FS,better FS) btrfs是centos7默认支持的文件系统,btrfs有着ext系列文件系统之外的众多功能,可是说功能非常强大: 特性 1. 支持跨物理设备(磁盘及分区)创建,数据和元数据分别支持RAID,可在线添加.移除.修改等操作 其支持诸多RAID,譬如数据支持raid0,raid1 raid5,raid6,raid10,single 元数据支持raid0, raid1, raid5, raid6, raid10

Btrfs文件系统

一.Btrfs简介 Btrfs(B-tree,Butter FS,Better FS)是Oracle公司在2007年左右开始研发的一个开源文件系统,由GPL授权.该文件系统最重要的特性就是支持写时复制,写时复制在修复文件数据方面比传统就地修改的文件系统有着极大的优势,其目的是用来取代Linux早些年来一直使用的ext系列文件系统,ext系列文件系统的反删除功能一直不太好.Btrfs能够支持非常大的单个文件大小和总大小,并且有文件检查功能,快照功能.还能做累积性快照(快照的快照),能实现和增量备份

Linux学习笔记——Btrfs文件系统的管理及应用

Btrfs Btrfs(B-tree 文件系统, 通常念成 Butter FS,Better FS 或 B-tree FS),一种支持写入时复制(COW)的文件系统,可以由多个底层物理卷组成.另外该文件系统支持RAID,数据及元数据校验码(checksum),子卷,快照和透明压缩功能. 文件系统创建 创建完磁盘分区后对相应分区进行磁盘格式化   # mkfs.btrfs /dev/sda5    # mkdir /btrfsdisk    # mount -t btrfs /dev/sda5 /

Linux初学之btrfs文件系统及磁盘配额

btrfs Technical Preview, 技术预览版 BtrFS(B-tree文件系统,又称为Butter FS或Better FS),2007由oracle开源后,得到了IBM.intel等厂商的大力支持,其目标计划是替代linux目前的ext3/4,成为下一代linux标准的文件系统. btrfs的特性: 1.可扩展性: 1) ext系列文件系统使用块位图来保存每个块空闲与否的信息(每个块用一个位来表示是否空闲),当容量扩展时,块位图所占的空间会线性的增加,试想一下如果快位图变得很大

#12 btrfs文件系统

btrfs Technical Preview, 技术预览版 BtrFS(B-tree文件系统,又称为Butter FS或Better FS),2007由oracle开源后,得到了IBM.intel等厂商的大力支持,其目标计划是替代linux目前的ext3/4,成为下一代linux标准的文件系统. 运行在linux上,并遵循GPL协议的强大文件系统.在2014年8月发布了稳定版. btrfs的特性: 1.可扩展性: 1) ext系列文件系统使用块位图来保存每个块空闲与否的信息(每个块用一个位来表

LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理

逻辑卷缩减 缩减的时候要注意缩减的空间不要超过文件系统的空间,不然缩减的时候会损坏文件系统. 第一步要先取消挂载(必须) 第二部检查文件完整性(必须) e2fsck -f /dev/vg0/lv0 第三部文件系统缩减,先缩减文件系统. resize2fs /dev/vg0/lv0 10G  (缩减到剩下10G) 第四步逻辑卷组的缩减 lvreduce -L 10G /dev/vg0/lv0 lvreduce -r -L 10G /dev/vg0/lv0 可以一步连上面的文件系统一起缩小. 第五步

btrfs文件系统的简单管理及应用

一.btrfs的命令选项 mkfs.btrfs -L 'LABEL' 指定卷标 -d <type>: raid0,raid1, raid5, raid6, raid10, single   指明数据存储类型 -m <profile>: raid0,raid1, raid5, raid6, raid10, single, dup  指明源数据存储的机制 -O <feature> 指明在格式化时使用的特性 -O list-all: 列出支持的所有feature man bt