Btrfs(一般念成ButterFS),由Oracle於2007年宣佈並進行中的COW(copy-on-write式)文件系統。目標是取代Linux目前的ext3文件系統,改善ext3的限制,特別是單一文件大小的限制,總文件系統大小限制以及加入文件校驗和特性。加入目前ext3/4未支持的一些功能,例如可寫的磁盤快照(snapshots),以及支持遞歸的快照(snapshots of snapshots),內建磁盤陣列(RAID)支持,支持子卷(Subvolumes)的概念,容許在線調整文件系統大小node
核心特性:ide
(1)多物理卷支持:btrfs可由多個底層物理卷組成;支持RAID,以聯機「添加」、「移除」,「修改」;ui
(2)寫時複製更新機制(CoW):複製、更新及替換指針,而非「就地」更新;(寫時複製:就是在修改或者加入內容時,不在原文件中修改,而是複製一份到新空間進行操做,完成後文件名指向新的空間)spa
(3)數據及元數據校驗碼:checksum3d
(4)子卷:sub_volume指針
(5)快照:支持快照的快照;htm
(6)透明壓縮:blog
(7)Btrfs 還可以方便的管理多個物理設備,使得傳統的卷管理軟件變得多餘。遞歸
btrfs文件系統在CentOS中沒有,須要從新編譯和更新內核,或者使用CentOS7進行操做:get
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(特性);
掛載文件系統:
btrfs filesystem show [--mounted|--all-devices|<path>|<uuid>|<device>|<label>]
btrfs filesystem show :查看btrfs文件系統的信息,默認所有的btrfs信息還能夠指定
上面的選項來進行
子命令還有df resize等
btrfs filesystem還有其餘選項可使用,若是想了解更多使用 man 8 btrfs filesystem
查看就能夠了
btrfs 還有子命令:filesystem, device, balance, subvolume
btrfs device add /dev/sdd :增長一個設備到btrfs系統中
btrfs device delete /dev/sdd mydata/:移除設備
btrfs balance [...] :實現均衡操做的,就是你新加入一個硬盤,把之前的硬盤中的數據平分到新的設備中
btrfs subvolume [create|delete|list|...] :建立和管理子卷的
透明壓縮機制:就是掛載後,在裏面存放的文件都是壓縮後的
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
下面以CentOS7爲例,演示一下從頭開始構建btrfs:
如下操做在VM虛擬機中的CentOS7中操做的,如使用的版本不一樣,僅供參考
一、首先加幾個虛擬硬盤進來
在VM主頁中點擊「編輯此虛擬機」,而後在彈出的窗口中點擊「添加」,
而後選擇硬盤,後面根據提示作就好了,添加三塊虛擬硬盤,大小爲20G,
添加完成後,啓動虛擬機就好了
二、而後建立btrfs
a、首先使用 fdisk -l 查看下硬盤是否正常加載,
/dev/sdb,/dev/sdc,/dev/sdd,這三個設備是咱們新添加的硬盤,
/dev/sda這個是原有硬盤
b、而後使用 mkfs.btrfs 命令把/dev/sdb,/dev/sdc這兩個設備建立成btrfs
這就算建立成功了,使用btrfs filesystem show 命令查看下
c、掛載
建立mydata/目錄,並掛載,查看(因截圖太大,就直接把信息複製上來了)
[root@localhost ~]# mount -t btrfs /dev/sdb mydata/
[root@localhost ~]# mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
...
/dev/sdb on /root/mydata type btrfs(rw,relatime,seclabel,space_cache)
看到上面的字段就能夠看到,掛載成功了,進入mydata目錄就能夠在裏面進行
操做了
d、調整文件系統的大小
先查看下
使用命令btrfs filesystem resize -10G mydata/ 給文件系統減小並查看
能夠看到size變成30G了,說明操做成功了
也可使用df -lh進行查看
使用命令btrfs filesystem resize +5G mydata/ ,在這裏就不演示了
e、增長設備到剛建立的btrfs中
使用命令btrfs device add /dev/sdd,並查看
要使用btrfs的均衡分配,須要先打開balance功能
使用btrfs balance start mydata/
btrfs balance還有其餘子命令,若是使用到的話,
使用man btrfs-balance查看便可
移除設備,使用btrfs device delete /dev/sdd mydata/
能夠看到移除成功了,從新加進來
指定元數據的存儲格式, btrfs balance start -mconvert=raid5 mydata/
指定數據的存儲格式, btrfs balance start -dconvert=raid5 mydata/
可是你要肯定你的btrfs裏有三塊硬盤,要否則改不成raid5,會報錯的,
f、建立子卷
使用btrfs subvolume create mydata/logs 建立一個叫logs的子卷
使用btrfs subvolume list mydata/ 查看btrfs中的全部子卷的列表信息
掛載子卷,若是掛載的是父卷,裏面的子卷都會被掛載,
若是隻想掛載子卷不掛載父卷,
首先把父卷卸載,而後使用mount -o subvol=logs /dev/sdb /mnt掛載子卷,
而後複製進去一個文件,檢測下可否正常使用
能查看出來,證實能夠正常訪問
把子卷卸載,掛載父卷看是否能正常訪問
能查看到,證實能正常訪問
btrfs subvolume delete mydata/logs 刪除子卷的命令
建立快照btrfs subvolume snapshot mydata/logs mydata/logs2