Linux之btrfs详解2015082901

文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3,ext 文件系统以其卓越的稳定性成为了事实上的 Linux 标准文件系统。近年来 ext2/3 暴露出了一些扩展性问题,于是便催生了 ext4 。在 2008 年发布的 Linux2.6.19 内核中集成了 ext4 的 dev 版本。 2.6.28 内核发布时,ext4 结束了开发版,开始接受用户的使用。似乎 ext 就将成为 Linux 文件系统的代名词。然而当您阅读很多有关 ext4 的文章时,会发现都不约而同地提到了 btrfs,并认为 ext4 将是一个过渡的文件系统。 ext4 的作者 Theodore Tso 也盛赞 btrfs 并认为 btrfs 将成为下一代 Linux 标准文件系统。 Oracle,IBM, Intel 等厂商也对 btrfs 表现出了极大的关注,投入了资金和人力。

相比ext系列文件系统,btrfs新增了特性如下:

1、支持容量的动态扩展和缩减

2、支持快照功能

3、支持对快照做快照,以实现增量更新机制

4、支持COW(Copy On Write 写时复制)

所谓COW是磁盘写数据时,将新数据写入新的bolck中,数据更新完成,再将数据指针指向新的block上

5、支持对单个文件的快照功能

6、多物理卷支持 : 一个文件系统可由多个底层物理卷组成;支持RAID,以联机“增加”“移除”“修改”

7、支持子卷:sub_volume

8、透明压缩----无需用户参与

等等特性,在此便不一一列出。

在此需要说明,默认CentOS7以下版本的Linux发行版默认不支持btrfs文件系统格式。以下讲解及实验针对CentOS7

1、创建btrfs文件系统:

使用命令:mkfs.btrfs

命令格式:mkfs.btrfs [options] [device ] [device ....]

常用选项:

-L ‘LABEL‘        为文件系统指明卷标

-d type : raid0  raid5  raid6  raid10   single  数据存储方式

-m type : raid0  raid5  raid6  raid10   single 元数据存储方式

-O 特性   指明开启特性

-O list-all 列出支持的所有feature(特性)

*****-d及-m选项所指明的raid级别,只针对文件系统之上的数据储存方式,并代表底层物理卷的组织形式,此特性会从之后的实验中体现******

[[email protected] ~]# ls /dev/sd*  ##我在虚拟机上添加了3块20G的新硬盘,分别为sdb sdc sdd
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdc  /dev/sdd
[[email protected] ~]# mkfs.btrfs -f -L ‘test‘ -m raid5 -d raid5 /dev/sdb /dev/sdc /dev/sdd
Btrfs v3.16.2
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 ‘raid56‘: raid56 extended format
adding device /dev/sdc id 2
adding device /dev/sdd id 3
fs created label test on /dev/sdb
        nodesize 16384 leafsize 16384 sectorsize 4096 size 60.00GiB

ok,文件系统创建成功。

2、btrfs文件系统的管理命令:btrfs

用法:btrfs <command> [<args>]

command子命令有:

filesystem    文件系统相关

device        底层物理设备相关

balance    数据相关

subvolume    子卷相关

上面文件系统已创建成功,我们可以执行

[[email protected] ~]# btrfs filesystem show        ##查看btrfs文件系统属性
Label: ‘test‘  uuid: d7270b3e-7583-4279-8c7c-75e431e821fc
        Total devices 3 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
        devid    3 size 20.00GiB used 2.01GiB path /dev/sdd

挂载创建好的文件系统当当前系统上,可以用物理卷中的任意一个,例如:

[[email protected] ~]# mkdir /test/  ##因为当前文件系统共添加了3块设备,所以三块硬盘的任意一块挂载到系统上,都可以挂载btrfs

[[email protected] ~]# mkdir /test/

[[email protected] ~]# mount /dev/sdb  /test/

我们可以使用df命令查看当前系统各分区的容量信息

由此可见,新建的btrfs已挂在成功并可以使用。由于起初创建文件系统的时候所指定的数据存储机制为raid5,而此处3块硬盘(20G)组合成一个btrfs总容量却是60G,因此可证实前面说的,创建文件系统时所指定的raid级别只针对数据的存储机制,而非设备的组合机制。

我们对文件系统进行缩减

[[email protected] ~]# btrfs filesystem resize -10G /test/   ##调整文件系统大小减小10G
Resize ‘/test/‘ of ‘-10G‘
[[email protected] ~]# df -h   ## 由此可见,文件系统缩减有生效
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   10G  126M  9.9G   2% /
devtmpfs                 904M     0  904M   0% /dev
tmpfs                    914M     0  914M   0% /dev/shm
tmpfs                    914M  8.6M  905M   1% /run
tmpfs                    914M     0  914M   0% /sys/fs/cgroup
/dev/mapper/centos-usr    20G  1.1G   19G   6% /usr
/dev/sr0                 7.1G  7.1G     0 100% /media/cdrom
/dev/mapper/centos-home   10G   33M   10G   1% /home
/dev/sda1                197M  105M   93M  54% /boot
/dev/sdb                  50G  1.2M   46G   1% /test

此时注意:文件系统缩减的大小不能超过单个硬盘容量,否则无法完成操作。我们可再次使用show命令查看文件系统的属性信息:

[[email protected] ~]# btrfs filesystem show  ##此处看出,文件系统缩减针对的是某个物理设备,因此证实缩减的容量不可超过任意单块硬盘的容量
Label: ‘test‘  uuid: d7270b3e-7583-4279-8c7c-75e431e821fc
        Total devices 3 FS bytes used 1.12MiB
        devid    1 size 10.00GiB used 2.03GiB path /dev/sdb
        devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
        devid    3 size 20.00GiB used 2.01GiB path /dev/sdd
Btrfs v3.16.2

==================================================

[[email protected] ~]# ls /dev/sd*      ##新增一块新硬盘sde  20G
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde
[[email protected] ~]# btrfs device add /dev/sde /test/   ##添加新硬盘到现有文件系统
查看当前文件系统的属性
[[email protected] ~]# btrfs filesystem show  ##由此可知,新硬盘添加成功
Label: ‘test‘  uuid: d7270b3e-7583-4279-8c7c-75e431e821fc
        Total devices 4 FS bytes used 1.12MiB
        devid    1 size 10.00GiB used 2.03GiB path /dev/sdb
        devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
        devid    3 size 20.00GiB used 2.01GiB path /dev/sdd
        devid    4 size 20.00GiB used 0.00 path /dev/sde

执行df命令发现新增的20G硬盘空间,已自动划入当前文件系统:

##若移除硬盘,文件系统也会自动缩减相应的硬盘容量空间。

##我们知道,lvm在做pv移除之前,必须要先执行pvmove将磁盘上的已有数据移动到同一卷组的其他pv上,在这里,对btrfs进行磁盘移除,btrfs会自动移动磁盘上的数据到其他磁盘上。

##我们新增加一块硬盘到当前文件系统,若文件系统要原有很多数据,那么其他磁盘上的数据必然会很多,而新增磁盘却很空闲,这时我们需要使用balance子命令来均衡磁盘中的数据

[[email protected] ~]# btrfs balance start /test/
Done, had to relocate 6 out of 6 chunks

这里需要注意的是,如若文件系统中数据量很大,那么执行此操作势必会造成cpu资源很大的占用量,建议空闲时再进行此操作;此操作也可以将start换成pause暂停,换成cancel取消。

我们还可以在做数据均衡时对原有的raid级别进行更改,操作如下:

[[email protected] ~]# btrfs balance start -f -mconvert=raid0 -dconvert=raid1  /test/  ##具体选项意义见文档尾部命令总结
Done, had to relocate 3 out of 3 chunks

btrfs还有一个特性,就是subvolume了,我们可以在当前文件系统中创建子卷;

使用子命令    subvolume

[[email protected] ~]# btrfs subvolume create  /test/testsub 
Create subvolume ‘/test/testsub‘

这时候,我们便可以对子卷进行单独挂载使用了,命令如下:

[[email protected] ~]# mount -o subvol=testsub /dev/sdb /testsub/

即使卸载了主卷的挂载,子卷依然可以独立使用

我们拷贝一些文件到子卷挂载的目录,尝试对子卷做快照:

[[email protected] ~]# cp -r /etc/httpd/ /testsub/
[[email protected] ~]# btrfs subvolume snapshot /test/testsub/ /test/testsnap
Create a snapshot of ‘/test/testsub/‘ in ‘/test/testsnap‘
[[email protected] ~]# ls /test/testsnap   ##子卷快照创建成功
httpd

####子卷的快照需要和子卷放置在同一个卷中~

另外,ext文件系统还可以和btrfs文件系统相互转换;

[[email protected] ~]# btrfs device delete /dev/sde /test  ##首先从btrfs中移除sde
[[email protected] ~]# mkfs.ext4 /dev/sde   ##为sde创建ext文件系统
******省略过程******
Writing superblocks and filesystem accounting information: done  
[[email protected] ~]# btrfs-convert /dev/sde   ##执行转换 
creating btrfs metadata.
creating ext2fs image file.
cleaning up system chunk.
conversion complete.
[[email protected] ~]# blkid /dev/sde      ##文件系统类型变成了btrfs,转换成功
/dev/sde: UUID="8dfb210a-f5c0-4d18-bbb7-c41ed4994720" UUID_SUB="0b362342-3514-4714-8fa5-c2aa7300db8d" TYPE="btrfs" 
[[email protected] ~]# btrfs-convert -r /dev/sde    ##将文件系统转换回ext系列
rollback complete. 
[[email protected] ~]# blkid /dev/sde    ##转回成功,文件系统类型又变成了ext系列了。
/dev/sde: UUID="9c5bee0a-43b0-4b2c-8a64-d28f348ab8d2" TYPE="ext4"

btrfs文件系统管理命令总结:

子命令以及常用选项:

filesystem

show 查看btrfs文件系统属性

resize [+|-]大小 缩减文件系统   ----必须挂载后才能扩展或缩减

resize max  扩展为最大

df fs  查看文件系统的容量信息

device

add

delete /DEVICE /FILESYSTEM    自动移动要拆除设备上的数据

scan

ready转为可用状态

stat 显示I/O状态

balance

start 启用balance , 占用很大cpu资源

-dconvert=raid5 修改数据的raid级别

-mconvert=raid1 修改元数据的raid级别

status 查看balance状态

pause 暂停

resume 继续

subvolume

creat /VOLUME/SUBVOL

例如: btrfs sunvolume create /mydata/sub1

mount -o subvol=sub1 /dev/sdb /mnt   将子卷sub1挂载到mnt

-o subvolid=     可使用id挂载子卷

list /FS 查看已创建的字子卷

show 查看子卷信息

snapshot /mydata/sub1 /mydata/sun1_snapshot   给子卷创建快照,必须在一个父卷中

时间: 2024-10-09 23:34:07

Linux之btrfs详解2015082901的相关文章

Monitorix监控Linux主机图文详解

Monitorix监控Linux主机图文详解 Monitorix简介 Monitorix 是一款自由开源的轻巧型系统监视工具.使用 Monitorix你可以随时掌控 CPU 负载及温度.内存占用.活动进程.磁盘使用及温度.网络设备流量.网络服务等全方位的系统信息.Monitorix 需要 Apache Web 服务器来显示这些系统信息图表.所以它特别适合在 Linux 服务器上面使用. 下面是我安装的步骤 1.安装的环境和需要的rpm包 我是在CentOS 6.4下面安装的CentOS 5可以使

LINUX 信号概念详解

LINUX 信号概念详解 我们运行如下命令,可看到Linux支持的信号列表: # kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP

linux FTP配置详解

一.vsftpd说明: LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd. 访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式:  (1)anonymous(匿名帐号) 使用anonymous是应用广泛的一种FTP服务器.如果用户在FTP服务器上没有帐号,那么用户可以以anonymous为用户名,以自己

Linux磁盘阵列技术详解(二)--raid 1创建

我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还是以一块硬盘的不同分区为例,实际工作中应该是不同的硬盘才对. 具体分区步骤不再赘述! 分区后结果如下图所示: ② 创建raid 1 mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sdc1 /dev/sdc2 /dev/sdc3 或者 mdadm -C -v /de

linux rm 命令详解及使用方法实战【初级】

rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就提到了rm命令,现在我们来详细介绍一下linux中删除文件和目录的命令, rm命令,rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件均保持不变. 名称 rm - remove files o

Linux netstat命令详解

Linux netstat命令详解 简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等. 输出信息含义 执行netstat后,其输出结果为 Active Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address State

linux sort 命令详解

原文:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html linux sort 命令详解 sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出. [[email protected] programming]$ cat seq.txtba

红帽Linux故障定位技术详解与实例(2)

红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 3.内核故障情形及处理 (1)内核panic panic是内

红帽Linux故障定位技术详解与实例(1)

红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 红帽Linux故障定位技术详解与实例是本文要介绍的内容,主要