Btrfs,也可稱為B-tree,Butter FS,Better FS,是CentOS7中一種新型的文件系統。
核心特性:
1.多物理卷支持,可由多個物理卷(pv)組成,支持raid,以聯機添加刪除
2.支持寫實復制(Copy on Write,Cow)
復制一份修改,改好之后用指針替換,出錯時指回原本文件。而不是就地修改
3.數據及元數據校驗碼:checksum
4.子卷:Sub_volume
5.快照,基于寫實復制,支持快照的快照,能實現增量快照
6.透明壓縮
格式化:
mkfs.btrfs -L LABEL /dev/device1 /dev/device2
mkfs.btrfs -L #label -d <type> #date,數據保存的類型,raid0,raid5,raid6,raid10,single -m,metadata #元數據保存類型 raid0,raid5,raid6,raid10,single,dup(冗余) -O #功能選項,特性,在格式化時生效 mkfsbtrfs -O list-all查看支持的格式化選項。 由于不同版本內核可能功能不一樣,所以用這個命令查看
用blkid /dev/device1和device2查看信息的時候,兩個硬盤的pv的主uuid一樣,副uuid不一樣
注意:雖然這兩個設備是放在一起格式化了,但是并不是子卷的關系。只是將兩個硬盤設備格式化成一個btrfs設備
btrfs的子命令以及詳細用法介紹
1.filesystem 管理命令
btrfs filesystem show #顯示詳細信息 btrfs filesystem df <掛載點> #已掛載分區使用狀況 btrfs filesystem resize [+?G|max] <掛載點> #增減容量 btrfs filesystem defragment #碎片整理
2.device #添加到已有的掛載點上使用add之后,第二個被添加的就會綁定在一起。
#下一次掛載的時候依然是綁定的,所以要用delete來拆除設備才能分開。
btrfs device add <需要添加的設備> <掛載點> btrfs device delete <需要添加的設備> <掛載點>
在這里我們可以看見這兩塊硬盤是獨自的btrfs。
我們可以通過device子命令來添加,將兩個空的btrfs硬盤合并成一個
合并之后,他們的主uuid一樣,副uuid不一樣。
容量為兩個20G硬盤合并的40G。
3.balance 均衡
btrfs balance start <掛載點> #開始 -mconvert=raid[0,1,5,10] BTRFS_LABEL metadata -dconvert=raid[0,1,5,10] BTRFS_LABEL data #convert之類的選項,可以通過man文檔中的filter字段查到 btrfs balance pause #暫停 btrfs balance status #狀態
使用device子命令增加容量后,再使用balance子命令。
可以把文件轉移一部分到新的pv上,能為其他硬盤減少讀寫壓力。
假如在格式化的時候沒有指定數據和元數據的raid類型,也可以通過balance來修改。
4.subvolume 子卷命令
#子卷是什么?舉個簡單的例子,我們可以想象根目錄是一個主卷。而下面的/usr,/bin,/sbin等文件夾都能設置成子卷。 #而需要的時候,可以只掛載子卷。但是如果掛載了主卷,下面的子卷都會全部掛載 #想要單獨掛載子卷,而不掛載上級卷的話,要指定id或者label
btrfs volume create 主卷下的掛載點 btrfs volume delete 主卷下的掛載點
snapshot
#注意:創建快照,是對創建快照一個瞬間的狀態進行定格。 #也就是說,sub1里面沒有文件的時候創建快照的。用快照還原的話,sub1就是個空分區。 #如果sub1里面有一個文件。在創建快照之后,沒修改的那一份保留在sub1_snapshot中 #往后如果sub1中的文件遭到多次修改,sub1_snapshot中的數據也不會改變,因為我們做的快照只是這一瞬間的。 #第二次修改的那個瞬間就不管。
例如:我們給空的sub1創建一個sub1_snapshot快照,我們復制進去一個conf配置文件。snapshot子卷下面一點變化也沒有
#而我們復制一個issue文件進去,再創建一個快照2的時候,snapshot2里面就會有一個issue文件。 #而這個時候,我們怎么修改sub1內的issue文件,snapshot2的issue文件也不會改變。 #因為快照只對那一瞬間的issue進行了定格。
list BTRFS_LABEL_NAME 列出指定btrfs下的子卷及其id
[root@localhost ~]# btrfs subvolume list /media/btrfs/ ID 261 gen 54 top level 5 path sub1 ID 262 gen 53 top level 5 path sub2 ID 263 gen 54 top level 5 path sub1_snapshot
只掛載子卷(假如操作系統是btrfs,如brtfs的/下的子卷是/usr/,/lib等)
mount -o subvolid=ID MOUNT_POINT
對單獨文件創建快照
cp –reflink
轉換
btrfs-convert EXT4_DEVICEext4轉換成btrfs btrfs-convert -r BTRFS_DEVICE此前為ext4的btrfs轉換回ext4
透明壓縮機制:
mount -o compress=[lzo|zlib] DEVICE /MOUNT_POINT
由于讀寫的時候都要壓縮,所以要占用CPU來壓縮和解壓
原創文章,作者:菠菜,如若轉載,請注明出處:http://www.www58058.com/13386