btrfs初步应用

前言

一种技术要知其然,还要知其所以然。

Btrfs文件系统

Btrfs(B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS),一种支持写入时复制(COW)的文件系统,运行在Linux操作系统,采用GPL授权。Oracle于2007年对外宣布这项计划,并发布源代码,在2014年8月发布稳定版目标是替换Linux目前的ext3文件系统,改善ext3的限制,特别是单个文件的大小,总文件系统大小或文件检查和加入ext3未支持的功能,像是可写快照(writable snapshots)、快照的快照(snapshots of snapshots)、内建磁盘阵列(RAID),以及子卷(subvolumes)。Btrfs也宣称专注在“容错、修复及易于管理”。

引用于(https://zh.wikipedia.org/wiki/Btrfs

Btrfs文件系统的核心特性

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

2.写时复制更新机制(CoW): 所谓 COW,即每次写磁盘数据时,先将更新数据写入一个新的 block,当新数据写入成功之后,再更新相关的数据结构指向新 block 。复制、更新及替换指针,而非“就地”更新; ”就地“更新是指地址指针指向。

3.数据及元数据校验码(checksum):btrfs在读取数据的同时会读取其相应的 checksum 。如果最终从磁盘读取出来的数据和 checksum 不相同,btrfs 会首先尝试读取数据的镜像备份,如果数据没有镜像备份,btrfs 将返回错误。写入磁盘数据之前,btrfs 计算数据的 checksum 。然后将 checksum 和数据同时写入磁盘。

4.子卷:Subvolume 是很优雅的一个概念。即把文件系统的一部分配置为一个完整的子文件系统,称之为 subvolume 。 采用 subvolume,一个大的文件系统可以被划分为多个子文件系统,这些子文件系统共享底层的设备空间,在需要磁盘空间时便从底层设备中分配,类似应用程序调用 malloc() 分配内存一样。可以称之为存储池。这种模型有很多优点,比如可以充分利用 disk 的带宽,可以简化磁盘空间的管理等

5.快照:支持快照的快照;可以在快照中在做快照

6.透明压缩:在用户写入数据时系统会自动进行压缩,而用户调用数据的过程是一个解压缩的过程,但是这个过程,对用户来说是透明的,是自动进行的。

7.多设备管理:Btrfs 支持动态添加设备。用户在系统中增加新的磁盘之后,可以使用 btrfs 的命令将该设备添加到文件系统中。为了灵活利用设备空间,Btrfs 将磁盘空间划分为多个 chunk 。每个 chunk 可以使用不同的磁盘空间分配策略。比如某些 chunk 只存放 metadata,某些 chunk 只存放数据。一些 chunk 可以配置为 mirror,而另一些 chunk 则可以配置为 stripe 。这为用户提供了非常灵活的配置可能性。

引用于(http://lirui213.blog.51cto.com/4449582/1689754) 进行了一点修改

Btrfs的应用和管理常用的命令

Btrfs文件系统创建需要用到的命令:

mkfs.btrfs -L 'LABEL':建立卷标。

-d : raid0, raid1, raid5, raid6, raid10, single指明确文件系统的类型

-m : raid0, raid1, raid5, raid6, raid10, single, dup指明类型

-O 指明格式化是,启动的特性 -O list-all: 列出支持的所有feature;

Btrfs的文件挂载和管理

属性查看:

btrfs filesystem show

挂载文件系统:

mount -t btrfs /dev/sdb MOUNT_POINT

透明压缩机制:

mount -o compress={lzo|zlib} DEVICE MOUNT_POINT 常用的子命令 1.subvolume
<–子卷管理命令,可以man btrfs-subvolume查看器详细信息; btrfs初步应用

btrfs subvolume create /PATH/subvolumename:创建子卷 此路径必须在btrfs文件系统的挂载目录下

btrfs subvolume delete 删除子卷

btrfs subvolume list:列出所有子卷

btrfs subvolume snapshot

| :创建快照

btrfs subvolume get-default:默认卷

btrfs subvolume set-default:设置默认卷

btrfs subvolume show:用来查看子卷的详细信息

2.filesystem 
<–用来管理btrfs文件系统,可以man btrfs-filesystem查看详细信息; btrfs初步应用

btrfs filesystem show:显示详细信息

btrfs filesystem show –mounted:显示已经挂载的文件系统的详细信息

btrfs filesystem show –all-device:显示所有文件系统的详细信息

btrfs filesystem show /PATH: 显示指定的文件系统的详细

btrfs filesystem label:显示文件系统的label

btrfs filesystem resize:缩减或者增大文件系统的容量

btrfs filesystem df:显示已经挂载的文件系统的信息

btrfs filesystem sync同步操作

3.balance <–用来均衡各物理卷直接的数据量,man btrfs-balance; btrfs初步应用

btrfs balance start:开始均衡文件系统

btrfs balance start -dconvert:修改数据的组织机制,即raid级别

btrfs balance start -mconvert修改元数据的组织机制,即raid级别

btrfs balance start -sconvert:修改系统的组织机制,即raid级别

btrfs balance pause:停止

btrfs balance cancel取消

btrfs balance resume继续

btrfs balance status 查看均衡状态

4.device <–管理物理设备的命令,man btrfs-device;

btrfs初步应用

btrfs device add :添加设备

btrfs device delete :从文件系统中移除或者去除设备

btrfs device ready :

btrfs device stats [-z] |:

实验

实验环境:centos 7 实验材料:3块10G的硬盘

第一步:先用VMware来创建3个虚拟硬盘, btrfs初步应用

第二步:mkfs.btrfs -L experiment /dev/sdb /dev/sdc:就是把sdb和sdc两块硬盘格式化成以卷标为experiment的文件系统 btrfs初步应用

第三步: mount /dev/sdb 或者/dev/sdc都可以挂载 将两块硬盘挂载到/mnt/experiment btrfs初步应用

第四步: btrfs filesystem df /mnt blkid /dev/sdb blkid /dev/sdc btrfs初步应用blkid命令 获取文件系统类型、UUID 发现父UUID都是一样的,但是子UUID是不一样的,可以看出它是支持多卷的。

第五步: 对btrfs文件的size缩小和增大 btrfs初步应用

第6步: 对btrfs文件添加硬盘 btrfs初步应用 btrfs device add :添加设备 btrfs device delete :从文件系统中移除或者去除设备

第七步: 刚加进来的硬盘数据时0,想要让后加进来的硬盘有数据,那就得进行数据均衡,数据均衡就要用到 btrfs balance

btrfs初步应用

第八步: 对btrfs文件系统的硬盘卸载 btrfs初步应用 btrfs初步应用 发现数据会自动移动 还未卸载的硬盘上 数据没有丢失,

第八步: 对btrfs文件系统进行子卷操作

 [root@localhost experiment]# btrfs subvolume create /mnt/experiment/subvolume
 Create subvolume '/mnt/experiment/subvolume'
  #创建子卷subvolume

[root@localhost experiment]# btrfs subvolume list /mnt/experiment/subvolume/
  ID 262 gen 62 top level 5 path subvolume 
    #ID 是这个子卷的ID可以此ID进行挂载
    #查看子卷信息

[root@localhost experiment]# btrfs subvolume show /mnt/experiment/subvolume/
/mnt/experiment/subvolume
Name:           subvolume
uuid:           39fc0341-19d0-1a43-9a0b-64ea90b29ab5
Parent uuid:        -
Creation time:      2016-05-22 21:27:29
Object ID:      262
Generation (Gen):   62
Gen at creation:    62
Parent:         5
Top Level:      5
Flags:          -
Snapshot(s):

 [root@localhost tmp]# mount -o subvol=subvolume /dev/sdb /tmp/subvolume
 #进行挂载

Note: 我忘了mount的这个用法,就重新在看看。

            -o options:(挂载文件系统的选项)
            async:异步模式;一般使用异步模式
            sync:同步模式;
            atime/noatime:包含目录和文件的访问时间戳;默认情况下使用
            diratime/nodiratime:目录的访问时间戳
            auto/noauto:是否支持自动挂载
            exec/noexec:是否支持将文件系统上应用程序运行为进程
            dev/nodev:是否支持在此文件系统上使用设备文件;
            suid/nosuid:是否支持suid
            remount:重新挂载
            ro:表示只读
            rw: 表示读写
            user/nouser:是否允许普通用户挂载此设备
            acl:启用此文件系统上的acl功能  acl访问控制列表

[root@localhost tmp]# ls /tmp/subvolume/

[root@localhost tmp]# btrfs subvolume show /tmp/subvolume
/tmp/subvolume
Name:           subvolume
uuid:           39fc0341-19d0-1a43-9a0b-64ea90b29ab5
Parent uuid:        -
Creation time:      2016-05-22 21:27:29
Object ID:      262
Generation (Gen):   62
Gen at creation:    62
Parent:         5
Top Level:      5
Flags:          -
Snapshot(s):

查看子卷

[root@localhost tmp]# cp /var/log/messages /tmp/subvolume/

复制数据到子卷

 [root@localhost tmp]# ls /tmp/subvolume/
 messages
 [root@localhost tmp]# ls /mnt/experiment/
grub2.cfg  issue      subvolume/ 
[root@localhost tmp]# ls /mnt/experiment/subvolume/
messages
[root@localhost tmp]# umount /tmp/subvolume/
[root@localhost tmp]# mkdi
mkdict  mkdir   
[root@localhost tmp]# mkdir /tmp/test
[root@localhost tmp]# mount /dev/sdb /tmp/test/
[root@localhost tmp]# ls /tmp/test/
grub2.cfg  issue  subvolume
[root@localhost tmp]# ls /tmp/test/subvolume/
messages

Note:子卷中的内容是可见,所以一旦父卷挂载,子卷就被自动被挂载了 如果只有单单挂载了子卷,父卷内容是不会自动挂载的,其内容是不可见的。

第九步:删除子卷 [root@localhost tmp]# umount /tmp/test/

[root@localhost tmp]# btrfs subvolume delete /mnt/experiment/subvolume/
Delete subvolume (no-commit): '/mnt/experiment/subvolume'
    #删除子卷
[root@localhost tmp]# btrfs subvolume list /mnt/experiment/
grub2.cfg  issue   
    #子卷信息没了

总结 还有很多操作还没做,以后有时间在更新,还有子卷快照,ext文件系统和btrfs文件系统互转等等

原创文章,作者:N19_king,如若转载,请注明出处:http://www.178linux.com/16503

(1)
N19_kingN19_king
上一篇 2016-05-21 11:18
下一篇 2016-05-23 09:20

相关推荐

  • ansible配置与应用

    无法上传图片 一、程序主要文件: ansible ansible-playbook ansible-doc 二、程序发布: 要求: 1.不能影响用户体验 2.系统不能停机 3.不能导致系统故障或造成系统完全不可用。 发布路径: /webapps/tuangou /webapps/tuangou-1.1 /webapps/tuangou-1.2. 在调度器上下…

    Linux干货 2016-11-14
  • 什么是CA??

       数字证书认证机构(英语:Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。 介绍     CA中心为每个使用公开密钥的用户发放一个…

    Linux干货 2017-07-17
  • 运维练习题

     1、简述TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态。TCP三次握手:客户端向服务器发送SYN包,客户端进入syn_SEND状态服务端收到客户端的发送的包返回ACK+SYN包,服务器端进入SYN_RECV状态客户端收到服务器端返回的包再发ACK包,客户端进入ESTABLISHED状态,服务器收到包也进入ESTABLISHED状态客户…

    Linux干货 2016-06-12
  • 实时获取MySQL的TPS、QPS(输出到屏幕)

    这个脚本挺好用的,例如我们在主库执行了一个大事务,结果导致从库的show slave status\G 一直卡在 system lock状态,我们用下面这个脚本就能知道到底是hang住了,还是只是执行缓慢(反应在脚本执行结果里面就是qps\tps是不停变动的)。 当然,从库一直处于system lock 状态,一般是因为我们从库也设置双1导致,只要…

    Linux干货 2017-05-07
  • btrfs文件系统管理与应用

    btrfs(b-tree、butter fs、better fs),oracle公司研发的替代ext系列的cow机制的文件系统;GPL 核心特性: 多物理卷支持;btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”、“修改”; 写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新; 数据及元数据校验码:checksum 子卷…

    Linux干货 2017-12-18
  • MongoDB-index

    索引:特殊的数据结构,存储表的数据的一小部分以实现快速查询 优点:     1、大大减少了服务器需要扫描的数据量     2、索引可以帮助服务器避免排序或使用临时表     3、索引可以将随机io转换为顺序io 索引评估:三星(非常好) 一…

    Linux干货 2016-11-27