btrfs(Btree FS)文件系统

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文件系统:

[[email protected] ~]# 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文件系统:

[[email protected] ~]# 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文件系统的查看命令

[[email protected] ~]# 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]来查看:

[[email protected] ~]# 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文件系统了

[[email protected] ~]# mkdir /mydata#创建一个挂载点
[[email protected] ~]# mount -t btrfs /dev/sdb /mydata/#挂载btrfs文件系统
[[email protected] ~]# 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文件系统大小

[[email protected] ~]# 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
[[email protected] ~]# 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文件系统创建完成后我们进入目录创建文件测试是否成功:

[[email protected] ~]# cd /mydata/ 
[[email protected] mydata]# ls
[[email protected] mydata]# touch a.txt
[[email protected] mydata]# cp /etc/grub2.cfg ./
[[email protected] mydata]# ls #可以添加文件,btrfs正常使用
a.txt  grub2.cfg

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

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

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

[[email protected] ~]# umount /dev/sdb
[[email protected] ~]# mount -o compress=lzo /dev/sdb /mydata/
[[email protected] ~]# cp /etc/rc.d/init.d/functions /mydata/
[[email protected] ~]# cd /mydata/
[[email protected] 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]

[[email protected] mydata]# btrfs filesystem resize -10G /mydata/
Resize ‘/mydata/‘ of ‘-10G‘#这样原来的btrfs文件系统大小减少10G大小
[[email protected] 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
[[email protected] 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和创建的文件是不会受到影响的,前提是有空余的空间存放数据

[[email protected] mydata]# ls
a.txt  functions  grub2.cfg
[[email protected] 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

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

[[email protected] mydata]# btrfs filesystem resize +10G /mydata/
Resize ‘/mydata/‘ of ‘+10G‘#这里我们增加10G大小
[[email protected] mydata]# 
[[email protected] 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
[[email protected] 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
[[email protected] mydata]# df -lh /mydata/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb         40G  1.1M   38G    1% /mydata#这样又为原来的40G
[[email protected] mydata]# btrfs filesystem resize max /mydata/
Resize ‘/mydata/‘ of ‘max‘#指定扩展为最大容量

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

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

btrfs device add [DIVICE] [MOUNT_POINT]

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

[[email protected] mydata]# btrfs device add /dev/sdd /mydata/#直接加载
[[email protected] 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:状态

[[email protected] mydata]# btrfs balance start /mydata/
Done, had to relocate 6 out of 6 chunks#迁移出6个chunks
[[email protected] mydata]# btrfs balance status /mydata/
No balance found on ‘/mydata/‘

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

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

[[email protected] mydata]# btrfs subvolume create 使用/mydata/logs#创建子卷
Create subvolume ‘/mydata/logs‘
[[email protected] mydata]# btrfs subvolume list /mydata/#列出子卷信息
ID 260 gen 52 top level 5 path logs

挂载子卷:

[[email protected] ~]# umount /mydata/#需要先卸载挂载点
[[email protected] ~]# mount -o subvol=logs /dev/sdb /mnt/#挂载子卷
[[email protected] ~]# ls /mnt/ #logs没有文件        
[[email protected] ~]# cp /var/log/messages /mnt/#cp文件到子卷可以
[[email protected] ~]# ls /mnt/
messages
[[email protected] ~]# 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

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

[[email protected] ~]# btrfs subvolume snapshot /mydata/logs /mydata/logs_snapshot

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

时间: 2024-08-11 07:41:10

btrfs(Btree FS)文件系统的相关文章

nodeJS之fs文件系统

前面的话 fs文件系统用于对系统文件及目录进行读写操作,本文将详细介绍js文件系统 概述 文件 I/O 是由简单封装的标准 POSIX 函数提供的. 通过 require('fs') 使用该模块. 所有的方法都有异步和同步的形式. 异步形式始终以完成回调作为它最后一个参数. 传给完成回调的参数取决于具体方法,但第一个参数总是留给异常. 如果操作成功完成,则第一个参数会是 null 或 undefined //异步示例 var fs = require('fs'); fs.unlink('/tmp

node.js模块之fs文件系统

fs 模块是文件操作的封装,它提供了文件的读取.写入.更名.删除.遍历目录.链接等 POSIX 文件系统操作.与其他模块不同的是,fs 模块中所有的操作都提供了异步的和同步的两个版本, 例如读取文件内容的函数有异步的 fs.readFile() 和同步的fs.readFileSync().我们以几个函数为代表,介绍 fs 常用的功能,并列出 fs 所有函数的定义和功能. fs.readFile(filename,[encoding],[callback(err,data)])是最简单的读取文件的

fs - 文件系统

fs 模块提供了一些 API,用于以一种类似标准 POSIX 函数的方式与文件系统进行交互. 用法如下: const fs = require('fs'); 所有的文件系统操作都有异步和同步两种形式. 异步形式的最后一个参数都是完成时回调函数. 传给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常. 如果操作成功完成,则第一个参数会是 null 或 undefined. const fs = require('fs'); fs.unlink('/tmp/hello', (err

initramfs fs文件系统突然断电问题修复 fsck -t ext4 -y 文件系统路径

原文地址:https://www.cnblogs.com/ruiy/p/12367639.html

新一代 Linux 文件系统 btrfs 简介 【转载】

Btrfs 被称为是下一代 Linux 文件系统.近年来 ext2/3 遇到越来越多的扩展性问题,在期待 ext4 的同时,人们发现了 btrfs,据说它采用了很多先进的文件系统设计,不仅解决了 ext2/3 的扩展性问题,还让人们看到了下一代文件系统所具有的许多其他特性.这一切都让人不禁心生好奇,btrfs 究竟提供了哪些特性?它是如何实现的?本文便围绕这些问题展开探讨,首先研究了 btrfs 所提供的新特性,并简要介绍了 btrfs 内部实现这些特性的原理:然后演示了 btrfs 的常用命令

&lt;资料收集&gt;新一代 Linux 文件系统 btrfs 简介

来自: http://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/ Btrfs 简介 文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3,ext 文件系统以其卓越的稳定性成为了事实上的 Linux 标准文件系统.近年来 ext2/3 暴露出了一些扩展性问题,于是便催生了 ext4 .在 2008 年发布的 Linux2.6.19 内核中集成了 ext4 的 dev 版本. 2.6.28 内核发布时,ext4 结束了开发版,开始

btrfs的介绍与使用

源文献:http://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/index.html#ibm-pcon 简单看了一下这篇文章,对其中一些机制的实现还不是很明白,还需要研究,在此做个记号. Btrfs 简介 文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3,ext 文件系统以其卓越的稳定性成为了事实上的 Linux 标准文件系统.近年来 ext2/3 暴露出了一些扩展性问题,于是便催生了 ext4 .在 2008 年发布的

磁盘及文件系统管理-小结

回顾:磁盘,磁盘分区,fs Centos6,7:/dev/sd[a-z[# 管理分区:fdisk,parted,sfdisk 创建文件系统: Linux fs类型:ext2,ext3,ext4,xfs,reiserfsf,iso9660,swap 文件系统的组织结构中的术语: block groups,block,inode table,inode,inode bitmap,block bitmap block groups:内部分为元数据区和数据区 block groups包括blocks,

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 /