1. 程式人生 > >Btrfs學習筆記

Btrfs學習筆記

news zab filters profile ani 操作 發布 point raid

一、Btrfs文件系統

Btrfs(B-tree, Butter FS, Better FS), Oracle從2007年開始研發的一種新的文件系統, 目標是用於取代ext3和ext4文件系統, 2014年8月發布穩定版本; 采用GPL授權.

1.1 Btrfs文件系統特性

  • 多物理卷支持: Btrfs可由多個底層物理卷組成; 支持RAID, 以聯機“添加”、“移除”和“修改”操作;
  • 寫時復制更新機制(CoW): 復制、更新及替換指針, 而非就地修改源文件;
  • 數據及元數據校驗碼: checksum
  • 子卷: sub_volume
  • 快照: 支持快照的快照
  • 透明壓縮:

二、Btrfs文件系統的使用

2.1 Btrfs命令使用

# Btrfs命令的用法: btrfs <command> [<args>]
# command: 子命令; args: 參數

# 創建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
[root@zabbix ~]# mkfs.btrfs -O list-all
Filesystem features available at mkfs time:
mixed-bg            - mixed data and metadata block groups (0x4)
extref              - increased hardlink limit per file to 65536 (0x40, default)
raid56              - raid56 extended format (0x80)
skinny-metadata     - reduced-size metadata extent refs (0x100, default)
no-holes            - no explicit hole extents for files (0x200)

# 創建一個btrfs
[root@zabbix ~]# mkfs.btrfs -L ‘mydata00‘ /dev/sdb /dev/sdc 
btrfs-progs v3.19.1
See http://btrfs.wiki.kernel.org for more information.

Turning ON incompat feature ‘extref‘: increased hardlink limit per file to 65536
Turning ON incompat feature ‘skinny-metadata‘: reduced-size metadata extent refs
adding device /dev/sdc id 2
fs created label mydata00 on /dev/sdb
        nodesize 16384 leafsize 16384 sectorsize 4096 size 4.00GiB

# 查看當前系統btrfs的結構信息: 
# btrfs filesystem show [--mounted|--all-devices|<path>|<uuid>|<device>|<label>]
# 默認顯示所有的btrfs信息
[root@zabbix ~]# btrfs filesystem show
Label: ‘mydata00‘  uuid: 609254ef-9665-4856-94f4-081643231507
        Total devices 2 FS bytes used 112.00KiB
        devid    1 size 2.00GiB used 437.50MiB path /dev/sdb
        devid    2 size 2.00GiB used 417.50MiB path /dev/sdc

btrfs-progs v3.19.1

# 更改或者查看btrfs文件系統的label:
# btrfs filesystem label [<device>|<mount_point>] [<newlabel>]
[root@zabbix ~]# btrfs filesystem label /dev/sdb
mydata00

[root@zabbix ~]# btrfs filesystem label /dev/sdb ‘mydata01‘
[root@zabbix ~]# btrfs filesystem label /dev/sdb
mydata01
[root@zabbix ~]# btrfs filesystem label /dev/sdc
mydata01

# 掛載文件系統:
# mount -t btrfs /dev/btrfs_device MOUNT_POINT

# 掛載時透明壓縮機制
# mount -o compress={lzo|zlib} -t btrfs /dev/btrfs_device MOUNT_POINT

# 修改btrfs的size
# btrfs filesystem resize [devid:][+/-]<newsize>[kKmMgGtTpPeE]|[devid:]max <path>
[root@zabbix ~]# btrfs filesystem show /mydata
Label: ‘mydata01‘  uuid: 609254ef-9665-4856-94f4-081643231507
        Total devices 2 FS bytes used 256.00KiB
        devid    1 size 2.00GiB used 429.50MiB path /dev/sdb
        devid    2 size 2.00GiB used 417.50MiB path /dev/sdc

btrfs-progs v3.19.1

[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
...
/dev/sdb                                 4.0G   17M  3.6G   1% /mydata

[root@zabbix ~]# btrfs filesystem resize -1G /mydata   
Resize ‘/mydata‘ of ‘-1G‘

[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
...
/dev/sdb                                 3.0G   17M  1.6G   2% /mydata

[root@zabbix ~]# btrfs filesystem resize +500M /mydata
Resize ‘/mydata‘ of ‘+500M‘
[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
...
/dev/sdb                                 3.5G   17M  2.6G   1% /mydata

[root@zabbix ~]# btrfs filesystem resize max /mydata  
Resize ‘/mydata‘ of ‘max‘
[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
...
/dev/sdb                                 4.0G   17M  3.6G   1% /mydata

# 添加一個磁盤到現有的btrfs中
# btrfs device add [options] <device> [<device>...] <path>
[root@zabbix ~]# btrfs device add /dev/sdd /mydata
[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
...
/dev/sdb                                 6.0G   17M  5.2G   1% /mydata

# btrfs中的chunk平衡, 用於將已使用的chunk平均的分布在所有的btrfs設備中
# 開啟balance
# btrfs balance start [options] <path>
[root@zabbix ~]# btrfs balance start /mydata
Done, had to relocate 5 out of 5 chunks

# 暫停balance
# btrfs balance pause <path>

# 取消balance
# btrfs balance cancel <path>

# 重新開始balance
# btrfs balance resume <path>

# 顯示正在運行中或暫停的balance狀態
# btrfs balance status [-v] <path>

# 從btrfs中移除一塊磁盤
# btrfs device delete <device> [<device>...] <path>
[root@zabbix ~]# btrfs device delete /dev/sdd /mydata
[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
...
/dev/sdb                                 4.0G   17M  3.5G   1% /mydata
[root@zabbix ~]# btrfs filesystem show /mydata
Label: ‘mydata01‘  uuid: 609254ef-9665-4856-94f4-081643231507
        Total devices 2 FS bytes used 392.00KiB
        devid    1 size 2.00GiB used 496.00MiB path /dev/sdb
        devid    2 size 2.00GiB used 496.00MiB path /dev/sdc

btrfs-progs v3.19.1

# 修改數據的raid級別; 不同的raid級別需要的設備數量不同
# btrfs balance start -d[<filters>] <path>
[root@zabbix ~]# btrfs balance start -dconvert=raid1 /mydata/
Done, had to relocate 1 out of 3 chunks
[root@zabbix ~]# btrfs balance start -dconvert=raid0 /mydata/
Done, had to relocate 1 out of 3 chunks

# 修改元數據raid級別; 不同的raid級別需要的設備數量不同
# btrfs balance start -m[<filters>] <path>

# 子卷管理
# 創建子卷:
# btrfs subvolume create [-i <qgroupid>] [<dest>/]<name>
[root@zabbix ~]# btrfs subvolume create /mydata/logs
Create subvolume ‘/mydata/logs‘

# 列出子卷和快照:
# btrfs subvolume list [options] [-G [+|-]value] [-C [+|-]value] [--sort=gen,ogen,rootid,path] <path>
[root@zabbix ~]# btrfs subvolume list /mydata       
ID 264 gen 84 top level 5 path logs

# 掛載子卷
# mount -o subvol=subvol_name device /MOUNT_POINT
[root@zabbix ~]# umount /mydata/
[root@zabbix ~]# mount -o subvol=logs /dev/sdb /mnt/logs
[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
...
/dev/sdb                                 4.0G   17M  3.5G   1% /mnt/logs

# 顯示子卷的信息
# btrfs subvolume show <subvol-path>
[root@zabbix ~]# btrfs subvolume show /mnt/logs/
/mnt/logs
        Name:                   logs
        uuid:                   efd3a0ab-5af9-bf43-85bc-0efa369c8795
        Parent uuid:            -
        Creation time:          2018-01-10 15:28:54
        Object ID:              264
        Generation (Gen):       87
        Gen at creation:        84
        Parent:                 5
        Top Level:              5
        Flags:                  -
        Snapshot(s):

# 刪除子卷
# btrfs subvolume delete [options] <subvolume> [<subvolume>...]

# 創建快照
# btrfs subvolume snapshot [-r] [-i <qgroupid>] <source> <dest>|[<dest>/]<name>
[root@zabbix /]# btrfs subvolume snapshot /mydata/logs /mydata/logs-snapshot
Create a snapshot of ‘/mydata/logs‘ in ‘/mydata/logs-snapshot‘
[root@zabbix /]# btrfs subvolume list /mydata
ID 264 gen 89 top level 5 path logs
ID 265 gen 89 top level 5 path logs-snapshot

# 刪除快照卷方法同刪除子卷一樣

# 將ext3或者ext4文件系統轉換成btrfs
[root@zabbix ~]# fsck -f /dev/sdd1
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdd1: 11/131072 files (0.0% non-contiguous), 17964/524032 blocks
[root@zabbix ~]# btrfs-convert /dev/sdd1 
creating btrfs metadata.
copy inodes [o] [         0/        11]
creating ext2fs image file.
cleaning up system chunk.
conversion complete.
[root@zabbix ~]# btrfs filesystem show
Label: ‘mydata01‘  uuid: 609254ef-9665-4856-94f4-081643231507
        Total devices 2 FS bytes used 456.00KiB
        devid    1 size 2.00GiB used 496.00MiB path /dev/sdb
        devid    2 size 2.00GiB used 496.00MiB path /dev/sdc

Label: none  uuid: a6a7705f-efa7-4cb6-bc96-0024ea49a6b2
        Total devices 1 FS bytes used 70.30MiB
        devid    1 size 2.00GiB used 2.00GiB path /dev/sdd1

btrfs-progs v3.19.1

Btrfs學習筆記