一、btrfs文件系統簡介
btrfs(B-tree,Butter FS,Better FS):由GPL授權,Oracle在2007年左右開始研發,支持寫時複製(CoW),是ext的取代產品,centos6不支持btrfs
btrfs核心特徵:
1、多物理卷支持:
btrfs可由多個底層物理卷組成
支持RAID、以聯機“添加”、“移除”、“修改”
2、支持寫時複製跟新機制(CoW):
修改文件時,不直接修改原文件,而是修改快照複製出那份文件
修改完成後將文件名指向重源文件改爲指向修改的複製文件上;
工作模式爲:複製、更新、替換指針;
可實現文件的快速修復及恢復。
3、支持數據及元數據校驗碼:checksum
4、支持子卷:sub_volume
5、支持快照及增量快照:即支持給快照進行快照
6、透明壓縮:
將數據存儲到btrfs文件系統時,能實現自動壓縮;
讀取時有能實現自動解壓縮,節約存儲空間
二、btrfs文件系統管理工具
[root@localhost ~]# btrfs
btrfs btrfs-debug-tree btrfs-map-logical btrfstune
btrfsck btrfs-find-root btrfs-select-super btrfs-zero-log
btrfs-convert btrfs-image btrfs-show-super
[root@localhost ~]# btrfs --help
mkfs.btrfs /dev/塊設備 # 將指定設備格式化爲btrfs
mkfs.btrfs -L 卷標名 /dev/塊設備 # 將指定設備格式化爲btrfs,並指明卷標
[root@localhost /]# mkfs.btrfs -L MyData /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 MyData on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 40.00GiB
mkfs.btrfs -m {raid0|raid1|…} 卷標名 /dev/塊設備 # 指明元原數據如何存放
raid0 | raid1 | raid5 | raid6 | raid10|single(單獨存放)|dup(冗餘存放)
mkfs.btrfs -d {raid0|raid1|…} /dev/塊設備
指明輸入如何存放(如何跨多設備存放)
raid0 | raid1 | raid5 | raid6 | raid10 | single
mkfs.btrfs -O list-all # 查看btrfs特新選項
[root@localhost ~]# 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)
mount -t btrfs /dev/sdb /Mydata # 將創建好的sdb掛載Mydata(同時自動掛載子卷)
[root@localhost /]# mkdir /Mydata
[root@localhost /]# mount -t btrfs /dev/sdb /Mydata
[root@localhost /]# mount
/dev/sdb on /Mydata type btrfs (rw,relatime,seclabel,space_cache)
umount /塊設備 #進行卸載
mount -o compress={lzo|zlib} /塊設備 /掛載點 #掛載時,開啓透明壓縮機制支持壓縮解壓縮lzo和zlib
[root@localhost /]# mount -o compress=lzo /dev/sdb /Mydata
三、UUID查看
使用blkid查看sdc和sdb,因爲被創建爲一個文件系統,所以UUID相同,但是子卷UUID_SUB不同
[root@localhost /]# blkid /dev/sdb
/dev/sdb: LABEL="MyData" UUID="9a4159df-9556-4087-aec0-ff43e954e0b7" UUID_SUB="b176c983-38ea-4287-a14a-048441d7be33" TYPE="btrfs"
[root@localhost /]# blkid /dev/sdc
/dev/sdc: LABEL="MyData" UUID="9a4159df-9556-4087-aec0-ff43e954e0b7" UUID_SUB="263c080b-3439-4ef6-b9d0-c7368c860f6f" TYPE="btrfs"
四、btrfs filesystem
btrfs filesystem show #查看創建好的btrfs文件系統
[root@localhost /]# btrfs filesystem show
Label: 'MyData' uuid: 9a4159df-9556-4087-aec0-ff43e954e0b7
Total devices 2 FS bytes used 112.00KiB
devid 1 size 20.00GiB used 2.03GiB path /dev/sdb
devid 2 size 20.00GiB used 2.01GiB path /dev/sdc
btrfs filesystem lable /dev/塊設備 #查看指定塊設備所屬btrfs系統的卷標
[root@localhost /]# btrfs filesystem label /dev/sdb
MyData
btrfs filesystem resize {+n單位|-n單位|max} /Mydata #將掛載好的btrfs文件系統擴5G(+5G)
或者縮減5G(-5G)
或者調整至最大邏輯邊界(等於物理空間大小)
[root@localhost /]# df -lh
文件系統 容量 已用 可用 已用% 掛載點
/dev/sdb 40G 17M 38G 1% /Mydata
[root@localhost /]# btrfs filesystem resize -10G /Mydata
Resize '/Mydata' of '-10G'
[root@localhost /]# df -lh
文件系統 容量 已用 可用 已用% 掛載點
/dev/sdb 30G 17M 18G 1% /Mydata
btrfs filesystem df /掛載的文件系統 #查看掛載好的btrfs文件系統的空間使用信息
[root@localhost /]# btrfs filesystem df /Mydata/
Data, RAID0: total=2.00GiB, used=768.00KiB
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
五、btrfs device
btrfs device add /塊設備 /掛載點
# 將指定的塊設備添加到指定的btrfs文件系統掛載點(會自動掛載及自動擴展)
補充:拆除磁盤時需要將磁盤的數據組織形式、原數據組織形式、文件系統組織形式改爲single或者raid1
[root@localhost /]# df -lh
文件系統 容量 已用 可用 已用% 掛載點
/dev/sdb 40G 17M 18G 1% /Mydata
[root@localhost /]# btrfs device add /dev/sdd /Mydata
[root@localhost /]# df -lh
文件系統 容量 已用 可用 已用% 掛載點
/dev/sdb 60G 17M 56G 1% /Mydata
btrfs device delete /塊設備 /掛載點
將指定的塊設備從指定的btrfs文件系統掛載點移除(會自動移動塊設備的數據到其它設備後再移除塊設備)
[root@localhost /]# btrfs device delete /dev/sdd /Mydata/
六、btrfs blance
btrfs balance state /掛載點 #將多個塊設備儲存的數據平衡均分儲存到各個塊設備
btrfs balance status /掛載點 #顯示balance均分狀態
btrfs balance pause /掛載點 #暫停balance均分
btrfs balance resume /掛載點 #繼續balance均分
btrfs balance cancel /掛載點 #取消balance均分
btrfs balance start -dconvert={raid1raid5|…} /掛載點 #修改數據的組織機制
如修改Raid級別{raid0|raid1|raid10|raid5|raid6|single|dup}
[root@localhost /]# btrfs filesystem df /Mydata/
Data, RAID0: total=2.00GiB, used=768.00KiB
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@localhost /]# btrfs balance start -dconvert=raid5 /Mydata
Done, had to relocate 1 out of 5 chunks
[root@localhost /]# btrfs filesystem df /Mydata
Data, RAID5: total=2.00GiB, used=768.00KiB
System, RAID5: total=64.00MiB, used=16.00KiB
Metadata, RAID5: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
btrfs balance start -mconvert={raid1raid5|…} /掛載點 #修改元數據的組織機制
[root@localhost /]# btrfs filesystem df /Mydata/
Data, RAID0: total=2.00GiB, used=768.00KiB
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@localhost /]# btrfs balance start -mconvert=raid5 /Mydata
Done, had to relocate 4 out of 5 chunks
[root@localhost /]# btrfs filesystem df /Mydata
Data, RAID5: total=2.00GiB, used=768.00KiB
System, RAID5: total=64.00MiB, used=16.00KiB
Metadata, RAID5: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
btrfs balance start -sconvert={raid1raid5|…} /掛載點 #修改文件系統的組織機制
[root@localhost /]# btrfs filesystem df /Mydata/
Data, RAID0: total=2.00GiB, used=768.00KiB
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@localhost /]# btrfs balance start -sconvert=raid5 /Mydata
Refusing to explicitly operate on system chunks.
Pass --force if you really want to do that.
[root@localhost /]# btrfs filesystem df /Mydata
Data, RAID5: total=2.00GiB, used=768.00KiB
System, RAID5: total=64.00MiB, used=16.00KiB
Metadata, RAID5: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
七、btrfs subvolume子卷命令
btrfs subvolume create /掛載點/子卷名 #在指定掛載點創建btrfs子卷
[root@localhost /]# btrfs subvolume create /Mydata/mydata1
Create subvolume '/Mydata/mydata1'
btrfs subvolume list /掛載點 # 查看指定掛載點下的子卷
[root@localhost /]# btrfs subvolume list /Mydata
ID 260 gen 39 top level 5 path mydata1
mount -o subvol=子卷名 /dev/塊設備 /掛載點 # 單獨將子卷掛載到指定掛載點
[root@localhost /]# mkdir Mydata1
[root@localhost /]# mount -o subvol=mydata1 /dev/sdb /Mydata1
mount -o subvolid=子卷ID /dev/塊設備 /掛載點 # 使用子卷ID單獨將子卷掛載到指定掛載點
[root@localhost /]# mount -o subvolid=260 /dev/sdb /Mydata1
btrfs subvolume show /子卷掛載點 # 查看子卷信息
[root@localhost /]# btrfs subvolume show /Mydata1
/Mydata1
Name: mydata1
uuid: e660ee38-4086-244a-8bb4-9de481cf35fb
Parent uuid: -
Creation time: 2018-01-16 20:32:22
Object ID: 260
Generation (Gen): 39
Gen at creation: 39
Parent: 5
Top Level: 5
Flags: -
Snapshot(s):
btrfs subvolume delete /掛載點/子卷名 # 通過路徑刪除子卷
[root@localhost /]# btrfs subvolume delete /Mydata/mydata1
btrfs subvolume snapshot /父卷掛載點/子卷名 /父卷掛載點/快照子卷名 #創建子卷快照
補充:因爲快照卷必須在原卷同一卷組下,所以子卷快照卷必須在其父卷下
[root@localhost /]# btrfs subvolume snapshot /Mydata/mydata1 /Mydata/mydata1_snap
八、對文件進行快照
cp --reflink 文件1 文件1快照卷
[root@localhost /]# cp --reflink passwd passwd_snap
九、將塊設備自動轉換爲btrfs文件系統
1、將舊設備組織形式改爲single或raid1
2、btrfs device delete拆除塊設備
3、umount卸載舊設備掛載點
4、fsck -f /塊設備 進行強制檢測
5、btrfs-convert /塊設備,將塊設備自動轉換爲btrfs文件系統
6、mount進行掛載
7、5、btrfs-convert -r /塊設備 ,將塊設備回滾爲原來系統