btrfs文件系统

Btrfs(通常念成ButterFS),由Oracle2007年宣布并进行中的COW(copy-on-write)文件系统。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入目前ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小

核心特性:

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

2)写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;(写时复制:就是在修改或者加入内容时,不在原文件中修改,而是复制一份到新空间进行操作,完成后文件名指向新的空间)

   3)数据及元数据校验码:checksum

   4)子卷:sub_volume

   (5)快照:支持快照的快照;

   6)透明压缩:

   (7Btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。

 

btrfs文件系统在CentOS中没有,需要重新编译和更新内核,或者使用CentOS7进行操作:

btrfs文件系统的创建:

     mkfs.btrfs

       -L 'LABEL' 指明卷标

        -d <type>: raid0,raid1, raid5, raid6, raid10, single,指明数据存放时的类型

        -m <profile>: raid0,raid1, raid5, raid6, raid10, single, dup

            指明元数据的存放格式

         -O <feature>(开启指定的特性)

         -O list-all: 列出支持的所有feature(特性)

挂载文件系统:    

    btrfs filesystem show [--mounted|--all-devices|<path>|<uuid>|<device>|<label>]

    btrfs filesystem show :查看btrfs文件系统的信息,默认全部的btrfs信息还可以指定

                上面的选项来进行

        子命令还有df resize等

    btrfs filesystem还有其他选项可以使用,如果想了解更多使用 man 8 btrfs filesystem

    查看就可以了

    btrfs  还有子命令:filesystem, device, balance, subvolume

    btrfs device add /dev/sdd :增加一个设备到btrfs系统中

    btrfs device delete /dev/sdd mydata/:移除设备

    btrfs balance [...] :实现均衡操作的,就是你新加入一个硬盘,把以前的硬盘中的数据平分到新的设备中

    btrfs subvolume [create|delete|list|...] :创建和管理子卷的

  透明压缩机制:就是挂载后,在里面存放的文件都是压缩后的

mount -o compress={lzo|zlib} DEVICE MOUNT_POINT

       



下面以CentOS7为例,演示一下从头开始构建btrfs:

   以下操作在VM虚拟机中的CentOS7中操作的,如使用的版本不同,仅供参考

    1、首先加几个虚拟硬盘进来

         在VM主页中点击“编辑此虚拟机”,然后在弹出的窗口中点击“添加”,

         然后选择硬盘,后面根据提示做就行了,添加三块虚拟硬盘,大小为20G,

         添加完成后,启动虚拟机就行了

    2、然后创建btrfs

        a、首先使用 fdisk -l 查看下硬盘是否正常加载,

        wKioL1XhndXR-61jAAKJca8EuRA044.jpg

        /dev/sdb,/dev/sdc,/dev/sdd,这三个设备是我们新添加的硬盘,

        /dev/sda这个是原有硬盘

        b、然后使用 mkfs.btrfs 命令把/dev/sdb,/dev/sdc这两个设备创建成btrfs

       wKioL1Xhn5aishWtAAEtVWYAGxc175.jpg

            这就算创建成功了,使用btrfs filesystem show 命令查看下

            wKiom1XhojvQ97VXAADjOuAW1Ww249.jpg

            

        c、挂载

          创建mydata/目录,并挂载,查看(因截图太大,就直接把信息复制上来了)

          [root@localhost ~]# mount -t btrfs /dev/sdb mydata/

          [root@localhost ~]# mount

          proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

               ...

           /dev/sdb on /root/mydata type btrfs(rw,relatime,seclabel,space_cache)

           看到上面的字段就可以看到,挂载成功了,进入mydata目录就可以在里面进行

           操作了

           d、调整文件系统的大小

            先查看下

            wKiom1XhrOvAMuqOAAEK3Ue5jZ0846.jpg

            使用命令btrfs filesystem resize -10G mydata/ 给文件系统减少并查看

            wKioL1Xhr7SzCxmWAAErxsDyaY8009.jpg

            可以看到size变成30G了,说明操作成功了

            也可以使用df -lh进行查看

            wKiom1XhrjCA7iodAAFLQgEXQpU584.jpg
              扩大文件系统的操作和减少一样,

            使用命令btrfs filesystem resize +5G  mydata/ ,在这里就不演示了

            e、增加设备到刚创建的btrfs中

               使用命令btrfs device add /dev/sdd,并查看

            wKiom1XhsIuxQyBNAAFzgb-nUPs985.jpg

             要使用btrfs的均衡分配,需要先打开balance功能

            使用btrfs balance start mydata/

            wKioL1XhtByChfFWAABefrCV4Xo890.jpg

            btrfs balance还有其他子命令,如果使用到的话,

            使用man btrfs-balance查看即可

            移除设备,使用btrfs device delete /dev/sdd mydata/

            wKioL1XhtYHDbPN_AAFs8w0QQ_w548.jpg

            可以看到移除成功了,重新加进来

       指定元数据的存储格式, btrfs balance start -mconvert=raid5 mydata/

       指定数据的存储格式, btrfs balance start -dconvert=raid5 mydata/

       wKiom1XhtrXzhw7tAACvEHmvo-E623.jpg

       但是你要确定你的btrfs里有三块硬盘,要不然改不成raid5,会报错的,

       f、创建子卷

        使用btrfs subvolume create mydata/logs 创建一个叫logs的子卷

        使用btrfs subvolume list mydata/ 查看btrfs中的所有子卷的列表信息

        wKioL1Xhuyzh2QXNAACsQLHRSIY352.jpg

        挂载子卷,如果挂载的是父卷,里面的子卷都会被挂载,

        如果只想挂载子卷不挂载父卷,

        首先把父卷卸载,然后使用mount -o subvol=logs /dev/sdb /mnt挂载子卷,

        然后复制进去一个文件,检测下能否正常使用

       wKioL1XhvTqhGAANAAC0E2I6Vb0849.jpg

       能查看出来,证明可以正常访问

       把子卷卸载,挂载父卷看是否能正常访问

       wKioL1Xhvq6i-fkbAAB6aUAmtCk883.jpg

        能查看到,证明能正常访问

        btrfs subvolume delete mydata/logs 删除子卷的命令

       创建快照btrfs subvolume snapshot mydata/logs mydata/logs2

           wKioL1XhwUOCbDpxAAGJpU6c5J0799.jpg