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)
上一篇 2016-05-21 11:18
下一篇 2016-05-23 09:20

相关推荐

  • Linux初认识

    1、计算机的五大部件 CUP: CUP中包含了两大部件分别是运算器、控制器。其中运算器主要是进行数学运算、逻辑运算等各种运算的。除了两大部件以外CUP内部还有寄存器、缓存,它们是提升CUP性能的辅助性工具。 存储器: 内存RAM(Random Access Memory)。 输入设备Input: 输入设备用来下指令,提供数据等。输入设备有键盘,鼠标,麦克风等…

    Linux干货 2017-07-09
  • Linux命令格式及常用命令详解

    Linux命令格式及常用命令详解 Linux的命令格式 COMMAND OPTIONS ARGUMENTS COMMAND 表示要执行的命令 OPTIONS 表示命令的运行特性 RGUMENTS 命令的作用对象,有时可以包含多个对象,空格隔开 常用命令详解 ifconfig 功能描述:获取网络接口配置信息或配置网络接口 命令格式: ifconfig [-a]…

    Linux干货 2017-07-02
  • LVS负载均衡集群详解

    一、LVS概述  1.LVS:Linux Virtual Server          四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法);      …

    系统运维 2016-04-30
  • sed详解

    sed命令:    文本处理三剑客:        grep, egrep,fgrep: 文本过滤器        sed :Stream EDitor, 流编辑器,行        awk: 文本格式工具,报告生成器 …

    Linux干货 2016-12-13
  • bash脚本编程实例

    bash脚本编程实例 1.写一个脚本 接受一个以上文件路径作为参数 显示每个文件拥有的行数 总结说明本次共为几个文件统计了其行数 #!/bin/bash # read -p “please input some paths:” paths if [ -z $paths ];then echo “There are not any paths inputtin…

    Linux干货 2017-08-14
  • Nginx之ngx_http_proxy_module模块详解

    一、正反向代理简介       1、正向代理:局域网内的机器借助于代理服务器访问局域网外的网站          这时正向代理的功能:         &nbs…

    2017-06-25