在Linux操作系統(tǒng)中,有許多文件系統(tǒng),例如常見(jiàn)的ext3、ext4、xfs等,考慮到這些文件系統(tǒng)的限制,一種全新的文件系統(tǒng)被設(shè)計(jì)出來(lái)——btrfs
一、btrfs文件系統(tǒng)簡(jiǎn)介
btrfs通常解釋為b-tree filesystem、better filesystem等,目標(biāo)是用來(lái)解決 ext3文件系統(tǒng)的一些缺陷,例如單一文件系統(tǒng)的限制、總文件系統(tǒng)的限制。btrfs加入了一些核心特性:
核心特性:
1、可由底層多個(gè)物理卷進(jìn)行支持
2、數(shù)據(jù)存儲(chǔ)形式支持RAID,同時(shí)在聯(lián)機(jī)的情況下進(jìn)行“添加硬盤(pán)”、“移除硬盤(pán)”、“修改文件系統(tǒng)的大小”
3、支持寫(xiě)時(shí)復(fù)制更新機(jī)制,即當(dāng)我們修改文件時(shí),btrfs先復(fù)制一份原文件,對(duì)新文件進(jìn)行修改,結(jié)束時(shí),原文件名指向新文件。
4、快照,支持卷的快照和快照的快照
5、透明壓縮,即當(dāng)文件系統(tǒng)存儲(chǔ)文件時(shí),文件系統(tǒng)會(huì)自動(dòng)將文件進(jìn)行壓縮再存儲(chǔ),當(dāng)提取時(shí),文件系統(tǒng)自動(dòng)進(jìn)行解壓縮,但是用戶(hù)看不到此過(guò)程。
6、子卷和校驗(yàn)碼
二、btrfs文件系統(tǒng)的創(chuàng)建
工具:
1、redhat 7以上默認(rèn)支持btrfs文件系統(tǒng),7以下,需要重新編譯內(nèi)核。
2、/dev/sdb 、/dev/sdc、/dev/sdd 二塊20G硬盤(pán),一塊10G
#mkfs.btrfs -L 'test' /dev/sd[b-c] ==>對(duì)前2塊硬盤(pán)進(jìn)行格式化
#btrfs filesystem show ==>查看所有的btrfs文件系統(tǒng)
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 ==>掛載文件系統(tǒng),2塊盤(pán)只需掛載一個(gè)即可,因?yàn)槎际莃trfs 。/mydata是自己所創(chuàng)建
#btrfs filesystem df /mydata ==> 查看掛載的文件系統(tǒng)具體內(nèi)容
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
可以看出數(shù)據(jù)和原數(shù)據(jù)的組織方式
當(dāng)我們需要使用btrfs的透明壓縮時(shí)
#mount -o compress={ lzo | zlib } /dev/sdb MOUNT_POINT
壓縮格式有l(wèi)zo和zlib
當(dāng)我們需要對(duì)文件系統(tǒng)的大小進(jìn)行變化時(shí),我們可以用
btrfs filesystem resize [+|-]#G MOUNT_POINT ==>調(diào)節(jié)大小
btrfs filesystem resize max MOUNT_POINT ==>調(diào)整為邏輯最大
調(diào)節(jié)后,可以使用df -h進(jìn)行查看
當(dāng)我們需要添加新磁盤(pán)時(shí)
btrfs device add 【option】/dev/sdd /mydata ==>在原文件里加入新的設(shè)備,option可使用-f進(jìn)行強(qiáng)制添加

image.png
添加新的硬盤(pán)后,若想進(jìn)行硬盤(pán)間的數(shù)據(jù)平衡
開(kāi)始數(shù)據(jù)平衡:
#btrfs balance start MOUNT_POINT
執(zhí)行數(shù)據(jù)平衡中,查看數(shù)據(jù)狀態(tài):
#btrfs balance status MOUNT_POINT
數(shù)據(jù)平衡中若要暫停:
#btrfs balance pause MOUNT_POINT
數(shù)據(jù)平衡暫停后要重新開(kāi)啟:
#btrfs balance resume MOUNT_POINT

image.png
若想重新改變數(shù)據(jù)和原數(shù)據(jù)的組織方式,可使用命令
btrfs balance start -dconvert=raid2 MOUNT_POINT
===>修改數(shù)據(jù)的組織方式為raid2
btrfs balance start -mconvert=raid2 MOUNT_POINT
===>修改原數(shù)據(jù)的組織方式為raid2
PS:此處需注意,RAID類(lèi)型和其需要的硬盤(pán)數(shù),例如RAID5,需要最少3塊硬盤(pán),否則會(huì)報(bào)錯(cuò)。

image.png
當(dāng)我們要移除設(shè)備時(shí)
btrfs device delete DEVICE_NAME MOUNT_POINT
==> 從文件系統(tǒng)中移除設(shè)備,可使用`df -h`查看
三、子卷的管理
創(chuàng)建子卷
btrfs subvolume create MOUNT_POINT/sub_name
===> 自動(dòng)在父卷的掛載目錄下創(chuàng)建一個(gè)子卷目錄,名為su b_name
btrfs subvolume list MOUNT_POINT
==>列出掛載的文件系統(tǒng)下的子卷

image.png
掛載子卷
mount -o subvol=子卷名 /dev/sdb /mnt
==> /dev/sdb中的子卷"xx"掛載到/mnt目錄中
PS:當(dāng)掛載父卷時(shí),子卷默認(rèn)被掛載;若只想掛載子卷,則使用
查看子卷和刪除
btrfs subvolume show /mnt
==>查看子卷的信息
btrfs subvolume delete MOUNT_POINT/sub_name
==>刪除子卷
快照的創(chuàng)建和刪除
btrfs subvolume snapshot /MOUNT_POINT/snap_name
==> 創(chuàng)建快照
btrfs subvolume delete /MOUNT_POINT/DIR_snap
==>刪除快照
四、格式的轉(zhuǎn)換
ext4文件系統(tǒng)如何轉(zhuǎn)換為btrfs?,如何轉(zhuǎn)回來(lái)?
此處對(duì)已經(jīng)移除的硬盤(pán)進(jìn)行操作,命令
btrfs-convert DEVICE_1
==>轉(zhuǎn)換為btrfs
btrfs-convert -r DEVICE_1
==>轉(zhuǎn)換回來(lái)
如圖所示:

images.png