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
下一篇 2016-05-23

相关推荐

  • CentOS上配置rsyslog客户端用以远程记录日志

    rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器。rsyslog的另外一个用法,就是可以配置为客户端,用来过滤和发送内部日志消息到本地文件…

    Linux干货 2015-02-14
  • Linux安全和加解密

    概述:     所有业务的正常运转,离不开一个安全的运行环境,系统安全性直接关系到业务稳定、可靠、以及可用性,本章就介绍一些系统安全相关的话题,具体包括:        1、加密基础概念     2、CA和证书的基础概念  &nb…

    Linux干货 2016-09-23
  • linux rpm包管理

    一、概要     RPM:RPM Package Manager(rpm软件包管理器)的缩写。它能将编译好的程序打包一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询等功能。 二、rpm软件包管理 rpm包的命名格式:name-version-relase.arch.rpm 例如:bash-1.1.0-5.el…

    Linux干货 2015-04-27
  • AIX 6.1 硬件基本管理

    查看整体的硬件信息:          # prtconf #将所有系统信息输出到屏幕上显示          # lsdev -C #查看硬件设备信息及其工作状态 注:硬件的设备通常为2 种状态,"availiable"表示设备可用,de…

    Linux干货 2015-10-18
  • 内核相关

    内核两大流派单内核微内核 grub分为三个阶段:1阶段 1.5阶段 2阶段 内核阶段 通过/proc/cmdline找到根并挂载2阶段内容是放在/boot/grub目录下Centos6 实验:丢失除grub.conf外所有文件没有修复过的时候/boot/grub下文件是放在磁盘上某个位置的修复过一次后/boot/grub下文件就起作用了,一旦执行过grub-…

    Linux干货 2018-01-03