btrfs管理及应用

一. 简介

    btrfs有着强大的功能,它支持在多个及各种物理设备(包括RAID)上创建一个文件系统,并支持动态扩展或减小,支持快照功能,甚至快照的快照,支持子卷功能。

二. 如何使用btrfs文件系统?

    我的准备材料:3块20G的硬盘

[root@localhost ~]# ls -l /dev | grep "\<[sh]d"
......
brw-rw----. 1 root disk      8,  16 Dec  6 10:33 sdb
brw-rw----. 1 root disk      8,  32 Dec  6 10:33 sdc
brw-rw----. 1 root disk      8,  48 Dec  6 10:33 sdd

    btrfs命令简介:

    btrfs本身是个文件系统名称,同时又是一个命令名,它是一个大的命令,其中有分成一些小命令,我们可以通过man btrfs看到, 常用的有:

       subvolume    <--子卷管理命令,可以man btrfs-subvolume查看器详细信息;
           Create/delete/list/manage btrfs subvolume.
           See btrfs-subvolume(8) for details.
       filesystem    <--用来管理btrfs文件系统,可以man btrfs-filesystem查看详细信息;
           Manage a btrfs filesystem, including label setting/sync and so on.
           See btrfs-filesystem(8) for details.
       balance    <--用来均衡各物理卷直接的数据量,man btrfs-balance;
           Balance btrfs filesystem chunks across single or several devices.
           See btrfs-balance(8) for details.
       device    <--管理物理设备的命令,man btrfs-device;
           Manage devices managed by btrfs, including add/delete/scan and so on.
           See btrfs-device(8) for details.

    废话少说,先创建一个btrfs文件系统看看再说吧;创建btrfs文件应使用mkfs.btrfs命令;

[root@localhost ~]# mkfs.btrfs -L T_BTRFS /dev/sdb /dev/sdc /dev/sdd
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
adding device /dev/sdd id 3
fs created label T_BTRFS on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 60.00GiB

    注: -L 后指定的是文件系统的LABEL

    查看btrfs的信息:

下面两条命令效果相同,所以“–all-devices”省去比较好

[root@localhost ~]# btrfs filesystem show
Label: 'T_BTRFS'  uuid: c99895c8-5b14-4276-80c7-ecf1c96f25c1
Total devices 3 FS bytes used 112.00KiB
devid    1 size 20.00GiB used 2.02GiB path /dev/sdb
devid    2 size 20.00GiB used 1.01GiB path /dev/sdc
devid    3 size 20.00GiB used 2.01GiB path /dev/sdd
Btrfs v3.16.2
[root@localhost ~]# btrfs filesystem show --all-devices    
# show是个“btrfs filesystem”命令下的一个小命令,其实还有其他小命令,可以自行man查看;
Label: 'T_BTRFS'  uuid: c99895c8-5b14-4276-80c7-ecf1c96f25c1
Total devices 3 FS bytes used 112.00KiB
devid    1 size 20.00GiB used 2.02GiB path /dev/sdb
devid    2 size 20.00GiB used 1.01GiB path /dev/sdc
devid    3 size 20.00GiB used 2.01GiB path /dev/sdd
Btrfs v3.16.2

    可见T_BTRFS也有自己的UUID,我们可以通过查看任意一个装置的信息来查询T_BTRFS的UUID:

[root@localhost ~]# blkid /dev/sdd
/dev/sdd: LABEL="T_BTRFS" UUID="c99895c8-5b14-4276-80c7-ecf1c96f25c1" UUID_SUB="b73a6dfa-e5b8-4621
-b92e-9c8301b71da6" TYPE="btrfs" 
[root@localhost ~]# blkid /dev/sdc
/dev/sdc: LABEL="T_BTRFS" UUID="c99895c8-5b14-4276-80c7-ecf1c96f25c1" UUID_SUB="1e96c869-f99d-461c
-8792-23bc0faa5ac4" TYPE="btrfs"

    可见btrfs的任何一个底层设备都能作为btrfs文件系统的一个入口。

    挂载文件系统有两种方式,一种是使用btrfs文件系统的LABEL,另一种是使用文件系统的任何一个底层设备:

[root@localhost ~]# mount /dev/sdc /mnt/TEST_BTRFS/
[root@localhost ~]# umount /mnt/TEST_BTRFS/
[root@localhost ~]# mount -L "T_BTRFS" /mnt/TEST_BTRFS/

    此后的很多操作时需要一个挂载点(此处是/mnt/TEST_BTRFS/)作为一个参数传递到命令中去的,所以创建好btrfs文件系统后,挂载很有必要;

    从T_BTRFS中移除一个设备:

使用的是btrfs device命令下的detect命令,其需要要移除的设备号及挂载点作为参数;

[root@localhost ~]# btrfs device delete /dev/sdd /mnt/TEST_BTRFS/
[root@localhost ~]# btrfs filesystem show
Label: 'T_BTRFS'  uuid: c99895c8-5b14-4276-80c7-ecf1c96f25c1
Total devices 2 FS bytes used 192.00KiB
devid    1 size 20.00GiB used 308.00MiB path /dev/sdb
devid    2 size 20.00GiB used 288.00MiB path /dev/sdc
Btrfs v3.16.2

    可见/dev/sdd已从T_BTRFS中移除;

    同上,只是使用了add命令;

[root@localhost ~]# btrfs device add /dev/sdd /mnt/TEST_BTRFS/
[root@localhost ~]# btrfs filesystem show
Label: 'T_BTRFS'  uuid: c99895c8-5b14-4276-80c7-ecf1c96f25c1
Total devices 3 FS bytes used 192.00KiB
devid    1 size 20.00GiB used 308.00MiB path /dev/sdb
devid    2 size 20.00GiB used 288.00MiB path /dev/sdc
devid    3 size 20.00GiB used 0.00 path /dev/sdd
Btrfs v3.16.2

    在btrfs下的各设备间均衡数据的命令:

    在各设备间均衡数据需要用到btrfs balance命令,其下有start,pause,cancel,resume,status小命令;

    start命令用于开始操作,它的下面又有一些OPTION,比较有用的有:

           -d[<filters>]
               act on data chunks. See FILTERS section for details about <filters>.
           -m[<filters>]
               act on metadata chunks. See FILTERS section for details about <filters>.
   <filters>见man btrfs-balance说明;

这两个OPTION看用于修改btrfs文件系统的RAID级别;

    pause,暂停,因为在设备间均衡数据比较消耗资源,消耗时间,所以有必要在合适的时候暂停操作;

    cancel,取消;

    resume,恢复操作;

    status,查看均衡操作执行的状态;

    先来看看start命令吧:

[root@localhost ~]# btrfs balance start /mnt/TEST_BTRFS/    <--注意传递给start的参数是挂载点
Done, had to relocate 5 out of 5 chunk

    修改RAID级别:

[root@localhost ~]#  btrfs balance start -mconvert=raid5 -dconvert=raid5 /mnt/TEST_BTRFS/
Done, had to relocate 3 out of 3 chunks

    -mconvert=raid5,修改元数据的存储方式为raid5

    -dconvert=raid5,修改数据的存储方式为raid5

    注意大小写及参数。

    创建子卷:

[root@localhost ~]# btrfs subvolume create /mnt/TEST_BTRFS/logs
Create subvolume '/mnt/TEST_BTRFS/logs'

    创建子卷就好比在父卷下创建一个目录;

    查看子卷信息:

[root@localhost ~]# btrfs subvolume list /mnt/TEST_BTRFS/
ID 263 gen 64 top level 5 path logs

    263为subvolid,挂载时有用;   

    挂载子卷:

    若想使用子卷,须umount父卷,因为要么挂载子卷要么挂载父卷,只能选其一;

[root@localhost ~]# umount /mnt/TEST_BTRFS/
[root@localhost ~]# mount -o subvol=logs /dev/sdc /mnt/logs/

    注意:挂载子卷须使用mount的-o选项的subvol,且参数是btrfs的任意底层设备和挂载目录名;

    也可以使用subvolid:

[root@localhost ~]# mount -o subvolid=263 /dev/sdc /mnt/logs/

    若在子卷中写入数据,当把子卷卸载,把父卷挂载之后,也可以通过“父卷/子卷目录”的方式访问原来存于子卷中的数据:

[root@localhost ~]# cp /etc/fstab /mnt/logs/   
[root@localhost ~]# ls /mnt/logs/
fstab
[root@localhost ~]# umount /mnt/logs/
[root@localhost ~]# mount -L "T_BTRFS" /mnt/TEST_BTRFS/
[root@localhost ~]# ls -l /mnt/TEST_BTRFS/logs/
total 4
-rw-r--r--. 1 root root 747 Dec  6 12:19 fstab

    

    使用快照:

    快照相当于创建子卷,但是它是另一个子卷的副本;

    快照使用的命令是:

    btrfs subvoloume snapshot /PATH/OT/SOURCE /PATH/TO/DEST

    可以指定-r选项,是其只读;

[root@localhost ~]# btrfs subvolume snapshot /mnt/TEST_BTRFS/logs /mnt/TEST_BTRFS/logs_bak
       COMMENTS: 创建快照;
Create a snapshot of '/mnt/TEST_BTRFS/logs' in '/mnt/TEST_BTRFS/logs_bak'
[root@localhost ~]# btrfs subvolume list /mnt/TEST_BTRFS/
ID 263 gen 68 top level 5 path logs        COMMENTS: 查看所有子卷,快照属于子卷的一类;
ID 264 gen 68 top level 5 path logs_bak
[root@localhost ~]# mkdir /mnt/logs_bak
[root@localhost ~]# umount /mnt/TEST_BTRFS/
[root@localhost ~]# mount -o subvol=logs /dev/sdc /mnt/logs    COMMENTS: 使用子卷名挂载;
[root@localhost ~]# mount -o subvolid=264 /dev/sdc /mnt/logs_bak/    COMMENTS:使用子卷ID挂载;
[root@localhost ~]# ls -l /mnt/logs
total 4
-rw-r--r--. 1 root root 747 Dec  6 12:19 fstab
[root@localhost ~]# ls -l /mnt/logs_bak/        COMMENTS: 快照中存在同样的文件;
total 4
-rw-r--r--. 1 root root 747 Dec  6 12:19 fstab
[root@localhost ~]# vim /mnt/logs/fstab 
[root@localhost ~]# cat /mnt/logs/fstab 
#
# /etc/fstab
# Created by anaconda on Sat Dec  5 19:08:23 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5a0ee49d-e4de-49c9-9ea2-ea67aad90822 /                       ext4    defaults        1 1
UUID=3ca1f6c5-90d7-4b6e-bdf1-6417bf043869 /boot                   ext4    defaults        1 2
UUID=edfb83c3-b202-462c-a2b6-6721fefceee1 /home                   ext4    defaults        1 2
/dev/mapper/centos-usr  /usr                    ext4    defaults        1 2
/dev/mapper/centos-var  /var                    ext4    defaults        1 2
UUID=b188dad5-83fa-4edb-b044-3887fa66b838 swap                    swap    defaults        0 0
NEW LINE HOW ARE YOU?        <-- COMMENTS:修改原文件,添加新行;
[root@localhost ~]# cat /mnt/logs_bak/fstab 
#
# /etc/fstab
# Created by anaconda on Sat Dec  5 19:08:23 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5a0ee49d-e4de-49c9-9ea2-ea67aad90822 /                       ext4    defaults        1 1
UUID=3ca1f6c5-90d7-4b6e-bdf1-6417bf043869 /boot                   ext4    defaults        1 2
UUID=edfb83c3-b202-462c-a2b6-6721fefceee1 /home                   ext4    defaults        1 2
/dev/mapper/centos-usr  /usr                    ext4    defaults        1 2
/dev/mapper/centos-var  /var                    ext4    defaults        1 2
UUID=b188dad5-83fa-4edb-b044-3887fa66b838 swap                    swap    defaults        0 0
    COMMENTS: 快照中的文件没有变化。

   

    我们还能在一般的文件系统和btrfs文件系统之间转换:

btrfs-convert /dev/sdd1        COMMENTS: 一般文件系统转换成btrfs文件系统;

btrfs-convert -r /dev/sdd1     COMMENTS:btrfs文件系统转换回一般文件系统。

    btrfs更详细的用法请man吧^_^。

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

(0)
上一篇 2015-12-06 20:37
下一篇 2015-12-10 11:01

相关推荐

  • N22-第一周作业

    1、描述计算机的组成及功能      计算机系统由硬件系统和软件系统组成。硬件系统(Hardware system)是计算机完成计算工作  的物质基础。软件系统(Software system):是在计算机硬件设备上运行的各种程序,是介于用户  和硬件系统之间的界面。1.1 计算机的硬件系…

    Linux干货 2016-08-22
  • 马哥教育网络21期+第三周练习博客

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f 1 | uniq 2、取出最后登录到当前系统的用户的相关信息。 [root…

    Linux干货 2016-07-26
  • 第九周

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;   1 #!/bib/bash   2 #   3 a=0   4 x=0   5 y=…

    Linux干货 2017-05-25
  • 迁移分区

          1 备份/home    2 创建分区 /dev/sdc1 10G   [root@localhost ~]# du -sh /home   52K /home   3 格式化分区   [root@localhost …

    Linux干货 2017-04-25
  • DNS基础及使用BIND搭建域名服务器

        本文主线是DNS服务相关概念和服务器搭建,在此之前了解一下域名这个东东很有其必要性,因为DNS服务就是应域名而生的。那么域名是什么哪?     域名     域名是用一串用点分开的字符串来表示的internet上的某一台或者一组计算机的名称,用于在数据传输时标识计算机的电子方位。举…

    Linux干货 2015-06-11
  • nfs服务部署wordpress

    NFS服务简介 NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。 NFS 的基本原则是“容许不同…

    2017-04-28