在Linux操作系統中,有許多文件系統,例如常見的ext3、ext4、xfs等,考慮到這些文件系統的限制,一種全新的文件系統被設計出來——btrfs
一、btrfs文件系統簡介
btrfs通常解釋爲b-tree filesystem、better filesystem等,目標是用來解決 ext3文件系統的一些缺陷,例如單一文件系統的限制、總文件系統的限制。btrfs加入了一些核心特性:
核心特性:
1、可由底層多個物理捲進行支持
2、數據存儲形式支持RAID,同時在聯機的情況下進行“添加硬盤”、“移除硬盤”、“修改文件系統的大小”
3、支持寫時複製更新機制,即當我們修改文件時,btrfs先複製一份原文件,對新文件進行修改,結束時,原文件名指向新文件。
4、快照,支持卷的快照和快照的快照
5、透明壓縮,即當文件系統存儲文件時,文件系統會自動將文件進行壓縮再存儲,當提取時,文件系統自動進行解壓縮,但是用戶看不到此過程。
6、子卷和校驗碼
二、btrfs文件系統的創建
工具:
1、redhat 7以上默認支持btrfs文件系統,7以下,需要重新編譯內核。
2、/dev/sdb 、/dev/sdc、/dev/sdd 二塊20G硬盤,一塊10G
#mkfs.btrfs -L 'test' /dev/sd[b-c] ==>對前2塊硬盤進行格式化
#btrfs filesystem show ==>查看所有的btrfs文件系統
Label: 'test' uuid: 8631412e-772e-4099-873b-e9ac9da80e54
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 v3.12
#mount /dev/sdb /mydata ==>掛載文件系統,2塊盤只需掛載一個即可,因爲都是btrfs 。/mydata是自己所創建
#btrfs filesystem df /mydata ==> 查看掛載的文件系統具體內容
Data, RAID0: total=2.00GiB, used=768.00KiB
Data, single: total=8.00MiB, used=0.00
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00
可以看出數據和原數據的組織方式
當我們需要使用btrfs的透明壓縮時
#mount -o compress={ lzo | zlib } /dev/sdb MOUNT_POINT
壓縮格式有lzo和zlib
當我們需要對文件系統的大小進行變化時,我們可以用
btrfs filesystem resize [+|-]#G MOUNT_POINT ==>調節大小
btrfs filesystem resize max MOUNT_POINT ==>調整爲邏輯最大
調節後,可以使用df -h
進行查看
當我們需要添加新磁盤時
btrfs device add 【option】/dev/sdd /mydata ==>在原文件里加入新的設備,option可使用-f進行強制添加
添加新的硬盤後,若想進行硬盤間的數據平衡
開始數據平衡:
#btrfs balance start MOUNT_POINT
執行數據平衡中,查看數據狀態:
#btrfs balance status MOUNT_POINT
數據平衡中若要暫停:
#btrfs balance pause MOUNT_POINT
數據平衡暫停後要重新開啓:
#btrfs balance resume MOUNT_POINT
若想重新改變數據和原數據的組織方式,可使用命令
btrfs balance start -dconvert=raid2 MOUNT_POINT
===>修改數據的組織方式爲raid2
btrfs balance start -mconvert=raid2 MOUNT_POINT
===>修改原數據的組織方式爲raid2
PS:此處需注意,RAID類型和其需要的硬盤數,例如RAID5,需要最少3塊硬盤,否則會報錯。
當我們要移除設備時
btrfs device delete DEVICE_NAME MOUNT_POINT
==> 從文件系統中移除設備,可使用`df -h`查看
三、子卷的管理
創建子卷
btrfs subvolume create MOUNT_POINT/sub_name
===> 自動在父卷的掛載目錄下創建一個子卷目錄,名爲su b_name
btrfs subvolume list MOUNT_POINT
==>列出掛載的文件系統下的子卷
掛載子卷
mount -o subvol=子卷名 /dev/sdb /mnt
==> /dev/sdb中的子卷"xx"掛載到/mnt目錄中
PS:當掛載父卷時,子卷默認被掛載;若只想掛載子卷,則使用
查看子卷和刪除
btrfs subvolume show /mnt
==>查看子卷的信息
btrfs subvolume delete MOUNT_POINT/sub_name
==>刪除子卷
快照的創建和刪除
btrfs subvolume snapshot /MOUNT_POINT/snap_name
==> 創建快照
btrfs subvolume delete /MOUNT_POINT/DIR_snap
==>刪除快照
四、格式的轉換
ext4文件系統如何轉換爲btrfs?,如何轉回來?
此處對已經移除的硬盤進行操作,命令
btrfs-convert DEVICE_1
==>轉換爲btrfs
btrfs-convert -r DEVICE_1
==>轉換回來
如圖所示: