一、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:了解即可