Btrfs(我們稱之為Butter FS或者B-tree FS)被稱為新一代的linux文件系統。一直以來,EXT文件系統以其卓越的穩定性成為linux標準的文件系統。但近年來,EXT3暴露出一些擴展性的問題(如單一文件大小限制、總文件系統大小限制等),于是便催生了EXT4。但同時,Btrfs向人們展現出諸多優秀的功能。目前很多廠商都投入到Btrfs文件系統的研發,諸多新的發行版也開始在新版本中支持此文件系統。
一、btrfs文件系統的特性
1、多物理卷支持:btrfs可以又多個底層物理卷組成,支持raid,可以聯機“添加”“刪除”“修改”;
2、寫時復制更新機制(CoW):對數據的修改是遵循復制、修改和替換指針。當我們修改某文件時,不是直接修改源文件,而是先復制一份進行修改,修改完成后將源文件指針指向修改后的文件。
3、數據及元數據校驗碼:存儲文件時會把數據和元數據的校驗碼通過文件某些擴展保存下來,在讀取文件時快速校驗文件是否損壞,如果損壞會自動嘗試修復文件。
4、子卷(sub_volume):每個子卷可以單獨掛載。
5、支持快照功能snapshot。
6、透明壓縮:自動通過占用cpu時鐘周期的方式對數據自動進行壓縮,讀取的時候自動解壓縮。
二、btrfs文件系統的管理
btrfs在centos7以上版本中已經默認支持,對于7以下的版本,需要重新編譯及更新內核,并安裝相關的管理工具才可以使用。
為了更好的演示btrfs文件系統的相關功能,我們使用centos7系統,并單獨添加一塊硬盤,并劃分三個獨立分區sdb1、sdb2、sdb3。
1、創建btrfs
使用mkfs.btrfs命令創建btrfs
mkfs.btrfs [OPTIONS] '<device>' ['<device>'…]
常用選項:
-L|–label <name> 指明卷標
-m|–metadata <profile> 指明元數據存放機制,Valid values are raid0, raid1, raid5, raid6, raid10, single or dup.
-d|–data <type>指明數據存放機制,Valid values are raid0, raid1, raid5, raid6, raid10 or single.
-O|–features <feature1>[,<feature2>…]文件系統特性開關
可以通過mkfs.btrfs -O list-all查看支持哪些特性
我們將sdb1和sdb2作為底層卷一起創建卷標為mybtrfs的文件系統,且label被掛在sdb1上,大小為兩個分區大小之和。
通過mount可以直接掛載使用該文件系統:
通過blkid查看兩個分區的文件系統信息:
可以看到兩個分區的LABEL和UUID是一樣的,說明兩個分區屬于一個文件系統卷,但是子卷id是不一樣的。
2、btrfs文件系統的查看和設置
btrfs filesystem show 查看
–mounted 查看所有掛載的btrfs
–all-devices 查看所有的btrfs,默認。
btrfs filesystem sync 將掛載的文件系統在內存中的數據同步到硬盤
btrfs filesystem df /PATH 查看已掛載文件系統的數據及元數據使用率情況。
btrfs filesystem label [<dev>|<mountpoint>] [<newlabel>]
查看或修改設備或掛載點的卷標
btrfs filesystem resize resize [<devid>:]<size>[gkm]|[<devid>:]max <path> 調整文件系統大小
下面演示的是先減少500m空間然后還原。
3、btrfs設備的查看和設置
btrfs device add [-Kf] <dev> [<dev>…] <path>
將分區sdb3加入到文件系統中,可以看到剛加入時候顯示分區用量是0, 這是由于系統沒有做數據均衡(balance),如果分區原來有別的文件系 統,可以用-f參數強制加入。
btrfs device delete <dev> [<dev>…] <path>
刪除一個設備,刪除是要保證文件系統容量大于文件總大小,系統會自動 將要刪除設備中的文件移動到其他設備中。
btrfs device scan [(–all-devices|-d)|<device> [<device>…]]
掃描btrfs文件系統設備
btrfs device stats [-z] <path>|<device>
查看文件系統I/O狀態
4、btrfs數據均衡
對于新加入的底層設備,可以通過balance子命令進行將數據均衡到各個設備中。
btrfs balance start <path>開始數據均衡
btrfs balance pause <path>暫停數據均衡,在數據量大且系統繁忙時
btrfs balance resume <path>繼續暫停的數據均衡
btrfs balance cancle <path>取消在進行的或暫停的數據均衡
btrfs balance status <path>查看正在進行或暫停的數據均衡狀態
通過balance子命令,還可以對數據和元數據的存放機制進行調整
btrfs balance -dconvert={raid#,single}調整數據存放機制
btrfs balance -mconvert={raid#,dup,single}調整元數據存放機制
5、btrfs子卷(sub_volume)管理
子卷(subvolume)是Btrfs的一個內部概念,每一個子卷構成一個子卷樹。子卷相當于一個子文件系統,子卷中存儲著在文件的元數據信息。這點需要區別于目錄。通過subvolume子命令,可以創建、刪除、查看子卷及快照卷
btrfs subvolume create [-i <qgroupid>] [<dest>/]<name>
創建子卷,如果dest不指定就指子卷會被創建在當前目錄中
btrfs subvolume delete [options] <subvolume> [<subvolume>…]
刪除子卷
btrfs subvolume list [options] [-G [+|-]value] [-C [+|-]value] [–sort=gen,ogen,rootid,path] <path>查看子卷
-G +表示>=,-表示<=,不標注表示=
創建新的子卷后,如果父卷已經掛載,子卷會自動掛載。如果要單獨掛載子卷,需要先卸載附卷。
快照(Snapshots)其實就是一種特殊的子卷, 它能記錄下在創建它的那一刻,它所在的父子卷(parent subvolume)的所有內容。 如果想要創建一個文件或系統的備份, 那么就可以通過創建快照來快速實現。
btrfs subvolume snapshot [-r] <source> <dest>|[<dest>/]<name>
創建快照卷
可以看到快照卷創建完成后自動完成了對于源目錄的備份,當前文件系統有兩個子卷
btrfs subvolume show <subvol-path>查看子卷的詳細信息
6、將其他文件系統轉換為btrfs
卸載掛載的文件系統
強制檢查文件系統 fsck -f dev
使用btrfs-convert dev裝換
查看是否轉換成功并掛載看是否正常
可以使用btrfs-convert -r dev回滾
可以看到轉換后文件系統可以正常掛載且原來文件都保持正常。
btrfs文件系統目前已經得到了各大linux發行版的支持,雖然目前或者將來很久一段時間EXT文件系統仍然是linux文件系統的主流。但是一個事物必定有自己的生命周期,讓我們對btrfs拭目以待。
原創文章,作者:frameboy,如若轉載,請注明出處:http://www.www58058.com/11476
已置頂