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系统自动化安装和selinux

    系统自动化安装: Anaconda 安装系统分成三个阶段:  安装前配置阶段安装过程使用的语言键盘类型安装目标存储设备Basic Storage :本地磁盘特殊设备:iSCSI设定主机名配置网络接口时区管理员密码x设定分区方式及MBR 的安装位置创建一个普通用户选定要安装的程序包 创建引导光盘:#cp /media/cdrom/isoli…

    Linux干货 2017-04-06
  • 入门——计算机基础简介

    一、计算机系统 计算机系统:由硬件(Hardware)系统和软件(Software)系统俩大部分组成 二、计算机硬件 计算机(computer):是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速的处理,然后把处理结果输出的现代化电子设备。 计算机硬件组成部分 冯.诺依曼体系结构: 1946年数学家冯.诺依曼提出运算器、控制器、存储器、…

    2018-03-27
  • 第二周作业

    Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp 文件复制     常用选项:            -i:交互式        …

    Linux干货 2016-11-06
  • Linux 基础知识

    1、环境变量 2、帮助 3、时间 4、引用 5、命令历史 6、FHS 7、命令别名 8、Globbing文件名通配 9、命令,路径补全 10、快捷键 ============================================ shell:是用户和linux(或者kernel)之间的接口程序,你在提示符下输入的每个命令都先由shell解释(命令语…

    Linux干货 2016-06-09
  • N23_第六周

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;:%s/^[[:blank:]]\+.*/\0#/g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;:%s/^[[:space:]]\+/…

    Linux干货 2017-02-28
  • Linux权限管理与grep命令应用(第四周)

    第四周作业 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 [root@localhost ~]# cp -r /etc/skel/ /home/tuser1 [root@localhost ~]# ch…

    Linux干货 2016-09-15