天天看点

Btrfs入门(一)

一、LVS和btrfs

    btrfs自己就支持动态扩展,所以不必建立lvm

    1.LVS

        pv-->vg--->lv

            PE:由PE指定,划分为lv后,变为LE

            LV中的PE叫做LE

        快照卷的大小:取决于快照要存活多长时间

        dd:复制

    2.Btrfs (B-tree,Butter FS,Better FS),GPL //oracle 2007年后开始研发,最主要的特性:支持写时复制

            //BTREE稳定性不够,支持快照,可以对快照进行快照

            //可以对单个文件进行快照

        //主要是用来取代ext3,4,Centos上出现了另外一种方案,xfs

        //xfs以前是unix上使用的,后期开源了,支持

        //ext文件系统的反删除功能不是特别好

        //可以实现组织多个硬盘为一个

        核心特性:

            1.支持将多个物理设备组织成一个设备来使用,多物理卷支持,支持raid。以联机“添加”,“移除”,“修改“

            2.写时复制更新机制(coW)

                //对文件进行修改的时候,复制一份,对附件进行操作,完成后,把文件名的指针指向附件,原有数据还在,便于恢复

                //复制更新,及替换指针,而非就地更新源文件

            3.数据和元数据校验机制;//是否修复,以及自动修复,保证数据的安全性

            4.子卷:sub_volume,每个子卷可以单独使用和挂载

            5.快照:子卷的一个副本而已,非完全复制,基于coW机制,

                支持快照的快照:类似于增量的快照

            6.透明压缩,存储的数据自动压缩,在使用的时候,自动解压缩

                但是会消耗更多的cpu时钟周期 //用时间换取空间

二、使用

    btrfs//现在大多的命令都使用,很多子命令,和主命令结合使用

        //例如lvcreate,lvdisplay 等

    btrfs-convert :将ext动态转换为btrfs,也能降级为ext

    btrfsck :自动检测

    btrfs --help //帮助

    1.mkfs.btrfs 

        -L 卷标

        -m {raid0,1,5,6,10,single}元数据如何存放

            //元数据是如何跨多设备存放的

        -d data数据是如何跨多设备存放的

            //raid0,1,5,6,10,single

        -O 指定特性,在格式化时启用的特性    

            mkfs.btrfs -O list-all //查看所有特性

        -U 指定uuid

    //可以使用多块硬盘直接组织成btrfs文件系统

    关闭虚拟机,添加3块硬盘,都是20G,sdb,c,d

    mkfs.btrfs -L mydata /dev/sdb /dev/sdc

    btrfs filesystem show //

    blkid /dev/sd{b,c} //UUID是一样的,但是UUID_SUB子卷UUID是不一样的

    man btrfs //btrfs有很多子命令,

    btrfs filesystem show --all-device

    btrfs filesystem show --mounted    

    2.btrfs filesystem : 

                    df  //查看空间挂载空间使用情况,-k,m,g,h

                    show --mounted/--all-devices

                    sync //同步到磁盘

                    defragment //碎片整理,为...整理碎片

                    resize //调整代销

                    label //指定或者显示卷标

                        btrfs filesystem   label /dev/sdb

        //创建btrfs之后,就可以直接挂载

        //mount -t btrfs /dev/sdb /test ,可以不指定fs,只需要指定其中一个成员即可

        //umount /dev/sdb

        2.1 resize 

            btrfs filesystem resize -10G /mydata/  //直接减小,联机进行,已经挂载,df 查看

            btrfs filesystem resize +5G /mydata

            btrfs filesystem df -h /mydata //查看

            btrfs filesystem resize max /mydata/   //使用所有可用空间

    3.透明压缩机制

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

        mount -o compress=lzo /dev/sdb /mydata

    4.btrfs device 

        add //自动执行扩展,此前的数据不会存储到新加的硬盘

             btrfs device add /dev/sdd /mydata

        delete    //拆除一个屋里设备,在线执行,他可以自动移动数据,然后拆除

                //btrfs device delete /dev/sdd /mydata

        ready 转为备用状态

        scan

        stats  IO统计数据

        usage

    5.balance //实现均衡操作,均衡数据在多块硬盘上

        cancel //取消

        pause //暂停

        start

        status

        resume 重新开始,pause之后

        btrfs balance status /mydata

        btrfs balance start /mydata

        //修改meta data和data的级别,也是在balance中修改

        start 

            -d 修改data chunks

            -m 修改medata chunks

            -s 修改system chunks 

                convert {raid0,1,5,6,single}

                btrfs balance start -dconvert=raid5 /mydata

                //设备如果不够的话,raid级别是不支持的,两块硬盘是不能做raid5的

三、创建子卷

    man btrfs-subvolume

        create     

            //只需要指定名字即可,其实就是在父卷上创建一个子卷目录名而已

            //btrfs subvolume create /mydata/logs

            btrfs subvolume create /mydata/catch //创建2个子卷

            // btrfs subvolume list /mydata/   查看子卷

            //挂载的话,假如挂载了顶级卷,他的所有的卷都会自动挂载,也可以指定挂载单个子卷

            //mount -o subvol=logs /dev/sdb /mydata/ 只挂载子卷

            cp /var/log/messages /mydata //复制文件到子目录

            btrfs subvolume show /mydata/  //查看子卷详细信息

            卸载logs子卷,然后挂载父卷

            ls /mydata/messages 可以查看

            btrfs subvolume delete /mydata/logs //删除子卷

        delete

        list

        snapshot //子卷的快照必须与子卷在同一个父卷中

                btrfs subvolume snapshot /mydata/catch /mydata/catch_snapshot

                //修改/mydata/catchs/messages原有的文件的数据,校验快照是否起作用

                //查看/mydata/catchs_snapshot 中的文件没有发生改变

                btrfs subvolume delete /mydata/catch_snapshot/

        get-default 

        set-default

        list 

        show  //查看子卷相信信息

            btrfs subvolume list /mydata/  查看subvolid ,

四、对文件进行快照

    cp --reflink grub2.cfg grub2.cfg_snapshot //另外一个地方最好在当前卷上的一个目录上

    是因为写时复制机制导致的 

五、转换ext为btrfs

    btrfs balance start -dconvert=single /mydata

    btrfs balance start -mconvert=raid1 /mydata

    btrfs device delete /dev/sdd /mydata   //拆除sdd

        //sdd新建一个分区,5G,mkfs.ext4

        //mount /dev/sdd1 /mnt 

        //cp /etc/fstab /mnt/

    转换格式:

        umount /mnt

        fsck /dev/sdd1 -f //强制检测,为了安全起见

        btrfs-convert /dev/sdd1

            btrfs-convert -r /dev/sdd1 回滚

        umount /mnt 

        blkid /dev/sdd1 //查看类型

六、ext&xfs&btrfs对比        

    ext3,ext4,xfs和btrfs文件系统性能对比

    Btrfs文件系统的趋势:https://www.chiphell.com/thread-1431457-1-1.html 

     raid:level

        能够保证,硬件损坏时,业务不会终止

        建议以后做存储,放在有容错级别的raid上

    LVM:volume //多个物理设备组织成一个逻辑设备

        需要内核中的驱动模块支持

        |_______lv______|__lv2__|.....|

        |_________________vg__________|

        |disk1  | disk2, | ....          |

        //假如底层硬件设备损坏,会影响上层的数据    

        snapshot:主要是为了让备份操作更流畅

            因为直接进行复制的话,很有可能数据会不一致//在复制的时候,也在发生改变

            //在复制的过程中,是不允许file的最近一次修改的时间戳不一致的

    btrfs:了解即可  

本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1950137,如需转载请自行联系原作者