btrfs文件系統簡介及CentOS7下實例

btrfs文件系統簡介及CentOS7下實例node

由Oracle於2007年宣佈並進行中的COW(copy-on-write式)文件系統。目標是取代Linux目前的ext3文件系統,改善ext3的限制,特別是單一文件大小的限制,總文件系統大小限制以及加入文件校驗和特性。加入目前ext3/4未支持的一些功能,例如可寫的磁盤快照(snapshots),以及支持遞歸的快照(snapshots of snapshots),內建磁盤陣列(RAID)支持,支持子卷(Subvolumes)的概念,容許在線調整文件系統大小。(自百度百科)bash


如下自馬哥課程筆記和CentOS7幫助文檔:ide

核心特性:
ui

        多物理卷支持:btrfs可由多個底層物理卷組成;支持RAID,以聯機「添加」、「移除」,「修改」;
        寫時複製更新機制(CoW):複製、更新及替換指針(),而非「就地」更新;
        數據及元數據校驗碼(checksum): 可以將文件和源數據和數據的校驗嗎保存下來,用於檢查文件是否損壞,若是損壞還能嘗試自動進行修復。保證了數據的可靠性;
        子卷:sub_volume,可以在一個捲上建立子卷,每一個卷均可以單獨進行掛載和使用,子卷和父卷也能夠同時掛載;
        快照:快照是子卷的一個非徹底副本,支持快照的快照,即增量快照機制;
        透明壓縮:用戶無感知壓縮,數據在存儲和讀取時自動壓縮和解壓縮,以節約存儲空間。缺點:啓用透明壓縮後會增長CPU負載。this

命令介紹:spa

    文件系統建立:指針

        mkfs.btrfsrest

        -L 'LABEL'orm

        -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>]

        or

        blkid [DEVICE]

    管理命令介紹:

        btrfs文件系統管理命令使用子命令的方式進行管理,具體了命令的功能可經過man SUBCOMMEND來查看。

        btrfs命令的經常使用子命令:filesystem, device, balance, subvolume


btrfs:

NAME

      btrfs - control a btrfs filesystem

SYNOPSIS

      btrfs <command> [<args>]

COMMANDS

    balance

       Balance btrfs filesystem chunks across single or several devices.

       See btrfs-balance(8) for details.

    check

       Do off-line check on a btrfs filesystem.

       See btrfs-check(8) for details.

    device

       Manage devices managed by btrfs, including add/delete/scan and so on.

       See btrfs-device(8) for details.

    filesystem

       Manage a btrfs filesystem, including label setting/sync and so on.

       See btrfs-filesystem(8) for details.   

    receive

       Receive subvolume data from stdin/file for restore and etc.

       See btrfs-receive(8) for details.

    replace

       Replace btrfs devices.

       See btrfs-replace(8) for details.  

    subvolume

       Create/delete/list/manage btrfs subvolume.

       See btrfs-subvolume(8) for details.          

                  

btrfs filesystem:

NAME

      btrfs-filesystem - control btrfs filesystem

SYNOPSIS

      btrfs filesystem <subcommand> <args>

SUBCOMMAND

    df [options] <path>

      Show space usage information for a mount point.

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

        Show the btrfs filesystem with some additional info.

    resize [<devid>:][+/-]<size>[kKmMgGtTpPeE]|[<devid>:]max <path>

        Resize a filesystem identified by <path> for the underlying device devid online.

        不經常使用,通常調整子卷。

    label [<dev>|<mountpoint>] [<newlabel>]

        Show or update the label of a filesystem.


btrfs device:

NAME

      btrfs-device - control btrfs devices

SYNOPSIS

      btrfs device <subcommand> <args>       

DEVICE MANAGEMENT      

    RAID level

       Btrfs filesystem supports most of the standard RAID level: 0/1/5/6/10.

    Balance

       btrfs-balance(8) subcommand can be used to balance or rebuild chunks to the desired profile.

    Device add/remove/replace

       Device can be added/removed using btrfs-replace(8) subcommand and replaced using btrfs-replace(8).

       When device is removed or replaced, btrfs will do the chunk rebuild if needed.     

SUBCOMMAND

    add [-Kf] <dev> [<dev>...] <path>

       Add device(s) to the filesystem identified by <path>.

    delete <dev> [<dev>...] <path>

       Remove device(s) from a filesystem identified by <path>.

       拆除物理卷時會自動遷移要移除的物理卷中的數據。

    ready <device>

       Check device to see if it has all of it’s devices in cache for mounting.

    scan [(--all-devices|-d)|<device> [<device>...]]

       Scan devices for a btrfs filesystem.

    stats [-z] <path>|<device>

       Read and print the device IO stats for all devices of the filesystem identified by <path> or for a single <device>.                

                      

btrfs balance:

NAME

      btrfs-balance - balance btrfs filesystem

SYNOPSIS

      btrfs balance <subcommand> <args>       

SUBCOMMAND

    cancel <path>

       Cancel running or paused balance.

    pause <path>

       Pause running balance.

    resume <path>

       Resume interrupted balance.

    start [options] <path>

       Balance chunks across the devices online.

       Options:

       -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>.

           修改元數據的組織機制。

       -s[<filters>]

           act on system chunks (only under -f). See FILTERS section for details about <filters>.

       -v

           be verbose

       -f

           force reducing of metadata integrity

    status [-v] <path>

       Show status of running or paused balance.

       If -v option is given, output will be verbose.

FILTERS

    convert

        Convert each selected block group to the given profile name identified by parameters.


btrfs subvolume:

NAME

      btrfs-subvolume - control btrfs subvolume(s)

SYNOPSIS

      btrfs subvolume <subcommand> [<args>]

DESCRIPTION

      btrfs subvolume is used to control the filesystem to create/delete/list/show subvolumes and snapshots.

SUBCOMMAND

    create [-i <qgroupid>] [<dest>]<name>

       Create a subvolume <name> in <dest>.

       If <dest> is not given, subvolume <name> will be created in the currently directory.

    Options

       -i <qgroupid>

           Add the newly created subvolume to a qgroup. This option can be given multiple times.

    delete [options] <subvolume> [<subvolume>...]

       -c|--commit-after

           wait for transaction commit at the end of the operation

       -C|--commit-each

           wait for transaction commit after delet each subvolume

    list <path>

       List the subvolumes present in the filesystem <path>.

    snapshot [-r] <source> <dest>|[<dest>/]<name>  


    掛載文件系統:

        mount -t btrfs /dev/sdb MOUNT_POINT


    啓用透明壓縮機制:

        壓縮和解壓縮自動透明運行,啓用後會增長CPU負載

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


btrfs文件系統管理實例:

    (1)、CentOS7中加載磁盤設備(多塊);

            如/dev/sd{b,c,d};


    (2)、將硬盤格式化爲btrfs文件系統;

            命令:# mkfs.btrfs -L MYDATA /dev/sd{b,c}

            查看:# btrfs filesystem show


    (3)、掛載btrfs文件系統;

            命令:# mount -t btrfs /dev/sdc /mydata/

                設備可爲任意一個btrfs設備名,如/dev/sdb或/dev/sdc

                啓用透明壓縮機制(可選):# mount -t btrfs -o compress=lzo /dev/sdc /mydata/


    (4)、在線調整btrfs文件系統空間大小;

            命令:# btrfs filesystem resize -20G /mydata/


    (5)、btrfs文件系統中添加/刪除磁盤設備;

            添加設備命令:# btrfs device add /dev/sdb /mydata/

            刪除設備命令:# btrfs device delete /dev/sdd /mydata/


    (6)、調整數據分部,使數據均衡的分部到各磁盤設備;

            啓動balance:# btrfs balance start /mydata/

            查看balance運行時的狀態:# btrfs balance status /mydata/


    (7)、動態修改磁盤設備卷的RAID級別;

            修改數據的RIAD級別爲RAID5:# btrfs balance start -dconvert=raid5 /mydata/

            修改元數據的RIAD級別爲RAID5:# btrfs balance start -mconvert=raid5 /mydata/

            檢查:# btrfs filesystem df /mydata/


    (8)、btrfs文件系統上建立和管理子卷;

            查看子卷信息:# btrfs subvolume list /mydata/

            建立子卷,結果相似於在父卷下建立子目錄:

# btrfs subvolume create /mydata/bin
ID 269 gen 133 top level 5 path bin//ID 269爲該子卷的ID號

            單獨掛載子卷,若是掛載父卷,則父卷下的全部子卷都會自動掛載:

                1) # umount /mydata///首先卸載父卷

                2) # mount -o subvol=logs /dev/sdb /mnt///使用子卷名掛載

                    or

                    # mount -o subvolid=269 /dev/sdb /mnt///使用子卷ID掛載

            查看子卷的詳細信息:

# btrfs subvolume show /mnt

            刪除子卷:

# btrfs subvolume delete /mydata/bin/


    (9)、btrfs文件系統中子卷和文件快照的管理和使用;

            建立子卷快照:# btrfs subvolume snapshot /mydata/logs/ /mydata/logs_snapshot               //子卷的快照必須和該子卷在同一父卷下。

            查看子卷是否生成:# btrfs subvolume list /mydata/

            掛載/刪除btrfs文件系統子卷快照的方法和掛載/刪除子卷一致:

                掛載子卷:

# mount -o subvolid=269 /dev/sdb /mnt/

                刪除子卷快照:

# btrfs subvolume delete /mydata/logs_snapshot/

            建立文件快照:

# cp --reflink /mydata/fstab /mydata/fstab_snap


    (10)、ext4和btrfs文件系統轉換;

            ext4 to btrfs:

                1) 首先卸載原ext4文件系統的磁盤,並強制檢測:

# umount /mnt/; fsck -f /dev/sdd1

                2) 使用btrfs-convert轉換文件系統:

# btrfs-convert /dev/sdd1 
creating btrfs metadata.
copy inodes [o] [         0/        12]
creating ext2fs image file.
cleaning up system chunk.
conversion complete.

                3) 檢查btrfs文件系統是否完成轉換:

# btrfs filesystem show

                4) 掛載使用:

# mount /dev/sdd1 /mnt/

            btrfs to ext4:

                1) 卸載文件系統:# umount /mnt/

                2)btrfs降級爲ext4:

# btrfs-convert -r /dev/sdd1 
rollback complete.

                3) 檢查:

# blkid /dev/sdd1
/dev/sdd1: UUID="af904001-4dac-4b10-87b5-8ff9c06f9e36" TYPE="ext4"


    (11)、拆除btrfs文件系統;

            1) 拆除前首先須要確認當前數據和無數據的RAID是否知足RAID的最少設備限制,若不知足修改之。若所有拆除可修改成single。

                查看當前設備卷的RAID狀態:

# btrfs filesystem df /mydata/
Data, RAID5: total=2.00GiB, used=788.00KiB
System, RAID5: total=64.00MiB, used=16.00KiB
Metadata, RAID5: total=1.00GiB, used=144.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B

                修改數據和元數據的RAID級別:

# btrfs balance start -mconvert=single /mydata/
# btrfs balance start -f -mconvert=single /mydata/

                檢查:

# btrfs filesystem df /mydata/
Data, single: total=1.00GiB, used=532.00KiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.00GiB, used=144.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B

            2) 刪除btrfs卷中的磁盤卷:

# btrfs device delete /dev/sdd /mydata/

       

    (12)、查看當前系統下掛載的全部btrfs文件系統及掛載狀況:

$ df -Th | grep -i btrfs
/dev/sdb3      btrfs     231G   79G  151G   35% /
/dev/sdb3      btrfs     231G   79G  151G   35% /home

$ sudo btrfs subvolume list /
ID 257 gen 52532 top level 5 path @
ID 258 gen 52534 top level 5 path @home

$ sudo btrfs subvolume show /
/
    Name:             @
    UUID:             2fa0d52a-e539-d84d-a51b-07accbc97d00
    Parent UUID:         -
    Received UUID:         -
    Creation time:         2018-01-07 02:32:04 +0800
    Subvolume ID:         257
    Generation:         52532
    Gen at creation:     8
    Parent ID:         5
    Top level ID:         5
    Flags:             -
    Snapshot(s):
$ sudo btrfs subvolume show /home/
/home
    Name:             @home
    UUID:             abdf02ed-2dbc-2346-8569-9ee9437fb467
    Parent UUID:         -
    Received UUID:         -
    Creation time:         2018-01-07 02:32:04 +0800
    Subvolume ID:         258
    Generation:         52534
    Gen at creation:     11
    Parent ID:         5
    Top level ID:         5
    Flags:             -
    Snapshot(s):

$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sdb3 during installation
UUID=dd132b10-bcd5-48a8-af21-792b7c1ba8dd /               btrfs   defaults,subvol=@           0       1
# /boot was on /dev/sdb1 during installation
UUID=645c2b8e-f17d-42a7-9629-882b6e28c10e /boot           ext4    defaults                    0       2
# /home was on /dev/sdb3 during installation
UUID=dd132b10-bcd5-48a8-af21-792b7c1ba8dd /home           btrfs   defaults,subvol=@home       0       2
# swap was on /dev/sdb2 during installation
UUID=d91e030b-2e6d-4670-8682-5bd82d83c2f0 none            swap    sw                          0       0
相關文章
相關標籤/搜索