天天看點

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,如需轉載請自行聯系原作者