设为首页 收藏本站
查看: 706|回复: 0

[经验分享] btrfs(Btree FS)文件系统

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-6 14:54:27 | 显示全部楼层 |阅读模式
Btrfs (Btree FS)文件系统:
    是由Oracle(甲骨文)公司在2007年开发的一个写时复制(copy to write)文件系统,以解决文件系统中缺少池,快照,校验及跨多设备访问的一些问题而实现大规模化储存。

Btrfs特点:
    1.btrfs可由多个底层物理卷组成;支持RAID,以联机“添加、“移除”,“修改”
    2.写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;
    3.扩展性:扩展后的整体性能不会随系统容量增加而降低
    4.数据一致性:btrfs采用了COW机制,支持checksum,保证了数据的完整性而坚决了突发的硬件故障导致损失   
    5.子卷:sub_volume#
    6,快照和克隆:支持快照的快照;基于子卷的一个副本,相当于VMware里的快照
    7.透明压缩:自动把数据压缩存放,非用户交互,查看时自动解压缩


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;


首先我们新添加几块硬盘用来做btree文件系统:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[iyunv@localhost ~]# fdisk -l
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f09eb
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节



  这里我们使用sdb和sdc两块磁盘直接格式化为btrfs文件系统:


1
2
3
4
5
6
7
[iyunv@localhost ~]# mkfs.btrfs -L mybtrfs /dev/sdb /dev/sdc
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
adding device /dev/sdc id 2
fs created label mybtrfs on /dev/sdb#卷标创建在sdb上为“mybtrfs"
    nodesize 16384 leafsize 16384 sectorsize 4096 size 40.00GiB#空间总大小为40G



这样btrfs文件系统创建完成,是不是很简单?


既然创建已经完成,接下来我们查看一下btrfs具体信息:

btrfs filesystem show  #btrfs文件系统的查看命令


1
2
3
4
5
6
[iyunv@localhost ~]# btrfs filesystem show
Label: 'mybtrfs'  uuid: 1c74225e-a36b-46b2-8bde-bef50d0f89fb
    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 v3.16.2



同样我们还可以使用blkid [/dev/device]来查看:


1
2
3
[iyunv@localhost ~]# blkid /dev/sdb /dev/sdc#查看一下两块磁盘信息
/dev/sdb: LABEL="mybtrfs" UUID="1c74225e-a36b-46b2-8bde-bef50d0f89fb" UUID_SUB="87045ae0-ae5f-4e56-811c-1b246532047c" TYPE="btrfs"
/dev/sdc: LABEL="mybtrfs" UUID="1c74225e-a36b-46b2-8bde-bef50d0f89fb" UUID_SUB="6c491f79-b13e-44c3-94e0-ad7e895b7613" TYPE="btrfs"



#包括卷标名LABLE,UUID,TYPE类型等信息,还有我们注意到没,两块磁盘的UUID是相同的,因为两块磁盘属于同一个btrfs系统,而子卷是不同的,btrfs可支持多块子卷

接下来我们就可以挂载btrfs文件系统了


1
2
3
4
5
6
7
8
[iyunv@localhost ~]# mkdir /mydata#创建一个挂载点
[iyunv@localhost ~]# mount -t btrfs /dev/sdb /mydata/#挂载btrfs文件系统
[iyunv@localhost ~]# mount | tail -n 5  #mount查看最后一个挂载成功
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sr0 on /media/cdrom type iso9660 (ro,relatime)
/dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache)



注: mount挂载时因为是两块磁盘做为btrfs,所以只挂载两块磁盘的任意一块即可

btrfs filesystem:
    show查看信息
    show --all-devices:查看所有设备
     [DeVICE]  查看指定设备的btrfs
     df: 已挂载的btrfs文件系统的使用率
     resize: 修改btrfs文件系统大小



1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@localhost ~]# btrfs filesystem show --all-devices
Label: 'mybtrfs'  uuid: 1c74225e-a36b-46b2-8bde-bef50d0f89fb
    Total devices 2 FS bytes used 896.00KiB
    devid    1 size 20.00GiB used 2.03GiB path /dev/sdb
    devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
Btrfs v3.16.2
[iyunv@localhost ~]# btrfs filesystem show /dev/sdc
failed to open /dev/fd0: No such device or address
Label: 'mybtrfs'  uuid: 1c74225e-a36b-46b2-8bde-bef50d0f89fb
    Total devices 2 FS bytes used 896.00KiB
    devid    1 size 20.00GiB used 2.03GiB path /dev/sdb
    devid    2 size 20.00GiB used 2.01GiB path /dev/sdc



Btrfs v3.16.2  #因为属于同一个文件系统,所以查看一个就显示出全部


btrfs文件系统创建完成后我们进入目录创建文件测试是否成功:


1
2
3
4
5
6
[iyunv@localhost ~]# cd /mydata/
[iyunv@localhost mydata]# ls
[iyunv@localhost mydata]# touch a.txt
[iyunv@localhost mydata]# cp /etc/grub2.cfg ./
[iyunv@localhost mydata]# ls #可以添加文件,btrfs正常使用
a.txt  grub2.cfg




卸载我们可以使用umount [/dev/sd#]  即可卸载

我们在挂载文件系统时还可以用btrfs内置的透明压缩机制,用户无需参与即可完成:
   
    mount -o compress={lzo|zlib} [DEVICE] [MOUNT_POINT]
    支持lzo和zlib两种压缩算法

设置这个参数以后我们往btrfs文件系统存放数据时会自动通过lzo或者zlib压缩机制压缩后存放,即透明压缩


1
2
3
4
5
6
7
[iyunv@localhost ~]# umount /dev/sdb
[iyunv@localhost ~]# mount -o compress=lzo /dev/sdb /mydata/
[iyunv@localhost ~]# cp /etc/rc.d/init.d/functions /mydata/
[iyunv@localhost ~]# cd /mydata/
[iyunv@localhost mydata]# ll -h functions /etc/rc.d/init.d/functions
-rw-r--r--. 1 root root 14K 1月  15 2015 /etc/rc.d/init.d/functions
-rw-r--r--. 1 root root 14K 9月   3 15:21 functions



这里由于functions文件太小,所以我们看到大小并没有改变,大文件则可以看出压缩后的大小

btrfs还可以在线增加减少文件系统大小,则通过:
   
    btrfs filesystem resize +大小 [MOUNT_POINT]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[iyunv@localhost mydata]# btrfs filesystem resize -10G /mydata/
Resize '/mydata/' of '-10G'#这样原来的btrfs文件系统大小减少10G大小
[iyunv@localhost mydata]# btrfs filesystem df /mydata#查看btrfs使用率
Data, RAID0: total=2.00GiB, used=776.00KiB
Data, single: total=8.00MiB, used=0.00
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00
GlobalReserve, single: total=16.00MiB, used=0.00
[iyunv@localhost mydata]# df -lh
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   18G  4.2G   14G   24% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M   72K  490M    1% /dev/shm
tmpfs                    490M   14M  477M    3% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  125M  373M   25% /boot
/dev/sr0                 7.1G  7.1G     0  100% /media/cdrom
/dev/sdb                  30G  1.1M   18G    1% /mydata#现在为30G



这样btrfs在线由原来的40G减少为30G大小,而我们前边cp和创建的文件是不会受到影响的,前提是有空余的空间存放数据


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[iyunv@localhost mydata]# ls
a.txt  functions  grub2.cfg
[iyunv@localhost mydata]# cat grub2.cfg #文件照样可以查看
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set pager=1
if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else




既然可以减少空间大小,那我们试着增加一下它的大小呢


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@localhost mydata]# btrfs filesystem resize +10G /mydata/
Resize '/mydata/' of '+10G'#这里我们增加10G大小
[iyunv@localhost mydata]#
[iyunv@localhost mydata]# btrfs filesystem show
Label: 'mybtrfs'  uuid: 1c74225e-a36b-46b2-8bde-bef50d0f89fb
    Total devices 2 FS bytes used 904.00KiB
    devid    1 size 20.00GiB used 2.03GiB path /dev/sdb
    devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
Btrfs v3.16.2
[iyunv@localhost mydata]# ll -lh
总用量 20K
-rw-r--r--. 1 root root    0 9月   3 15:00 a.txt
-rw-r--r--. 1 root root  14K 9月   3 15:21 functions
-rw-r--r--. 1 root root 4.0K 9月   3 15:00 grub2.cfg
[iyunv@localhost mydata]# df -lh /mydata/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb         40G  1.1M   38G    1% /mydata#这样又为原来的40G



1
2
[iyunv@localhost mydata]# btrfs filesystem resize max /mydata/
Resize '/mydata/' of 'max'#指定扩展为最大容量



btrfs支持在线增加减少已有容量大小,但是如果已加载磁盘容量不够时怎么办??

btrfs文件系统还支持直接添加磁盘设备到文件系统:

    btrfs device add [DIVICE] [MOUNT_POINT]

这里我们还有一块预留磁盘sdd,我们看一下效果:


1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@localhost mydata]# btrfs device add /dev/sdd /mydata/#直接加载
[iyunv@localhost mydata]# df -lh
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   18G  4.2G   14G   24% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M   72K  490M    1% /dev/shm
tmpfs                    490M   14M  477M    3% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  125M  373M   25% /boot
/dev/sr0                 7.1G  7.1G     0  100% /media/cdrom
/dev/sdb                  60G  1.1M   56G    1% /mydata
#我们看到加载后由原来的40G大小增加为60G大小



btrfs文件系统还支持数据文件均衡操作:(一般很少操作)
    btrfs balance start [MOUNT_POINT]
        pause:暂停
        cancel:取消
        resume:继续
        status:状态


1
2
3
4
[iyunv@localhost mydata]# btrfs balance start /mydata/
Done, had to relocate 6 out of 6 chunks#迁移出6个chunks
[iyunv@localhost mydata]# btrfs balance status /mydata/
No balance found on '/mydata/'



#状态信息由于文件很小,执行已经结束,查看只能在迁移过程中才能看到,大文件则可以。

创建子卷:
    btrfs subvolume create [MOUNT_POINT]/[FILES]


1
2
3
4
[iyunv@localhost mydata]# btrfs subvolume create 使用/mydata/logs#创建子卷
Create subvolume '/mydata/logs'
[iyunv@localhost mydata]# btrfs subvolume list /mydata/#列出子卷信息
ID 260 gen 52 top level 5 path logs



挂载子卷:


1
2
3
4
5
6
[iyunv@localhost ~]# umount /mydata/#需要先卸载挂载点
[iyunv@localhost ~]# mount -o subvol=logs /dev/sdb /mnt/#挂载子卷
[iyunv@localhost ~]# ls /mnt/ #logs没有文件        
[iyunv@localhost ~]# cp /var/log/messages /mnt/#cp文件到子卷可以
[iyunv@localhost ~]# ls /mnt/
messages



1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@localhost ~]# btrfs subvolume show /mnt/#查看子卷详细信息
/mnt
    Name:             logs
    uuid:             cb76840f-56df-db4e-8077-2faf03a8351a
    Parent uuid:         -
    Creation time:         2015-09-03 16:37:54
    Object ID:         260
    Generation (Gen):     55
    Gen at creation:     52
    Parent:         5
    Top Level:         5
    Flags:             -
    Snapshot(s):



删除子卷使用:btrfs subvolume delete /mydata/logs


下边还有创建子卷快照,不写具体操作了。。


1
[iyunv@localhost ~]# btrfs subvolume snapshot /mydata/logs /mydata/logs_snapshot




我们的btrfs文件系统就介绍到这里,如哪里有问题还望各位大神指出,谢谢!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-110229-1-1.html 上篇帖子: 文件查找及find命令详解 下篇帖子: centos6系统启动流程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表