Linux運維*一.Linux基礎---15、btrfs文件系統

一、btrfs文件系統簡介

btrfs(B-tree,Butter FS,Better FS):由GPL授權,Oracle在2007年左右開始研發,支持寫時複製(CoW),是ext的取代產品,centos6不支持btrfs

 

btrfs核心特徵:

1、多物理卷支持:

btrfs可由多個底層物理卷組成

支持RAID、以聯機“添加”、“移除”、“修改”

2、支持寫時複製跟新機制(CoW):

修改文件時,不直接修改原文件,而是修改快照複製出那份文件

修改完成後將文件名指向重源文件改爲指向修改的複製文件上;

工作模式爲:複製、更新、替換指針;

可實現文件的快速修復及恢復。

3、支持數據及元數據校驗碼:checksum

4、支持子卷:sub_volume

5、支持快照及增量快照:即支持給快照進行快照

6、透明壓縮:

將數據存儲到btrfs文件系統時,能實現自動壓縮;

讀取時有能實現自動解壓縮,節約存儲空間

 

二、btrfs文件系統管理工具

[root@localhost ~]# btrfs

btrfs               btrfs-debug-tree    btrfs-map-logical   btrfstune          

btrfsck             btrfs-find-root     btrfs-select-super  btrfs-zero-log     

btrfs-convert       btrfs-image         btrfs-show-super 

 

[root@localhost ~]# btrfs --help

 

mkfs.btrfs /dev/塊設備 # 將指定設備格式化爲btrfs

 

mkfs.btrfs -L 卷標名 /dev/塊設備 # 將指定設備格式化爲btrfs,並指明卷標

[root@localhost /]# mkfs.btrfs -L MyData /dev/sdb /dev/sdc

btrfs-progs v3.19.1

See http://btrfs.wiki.kernel.org for more information.

 

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536

Turning ON incompat feature 'skinny-metadata': reduced-size metadata extent refs

adding device /dev/sdc id 2

fs created label MyData on /dev/sdb

nodesize 16384 leafsize 16384 sectorsize 4096 size 40.00GiB

 

mkfs.btrfs -m {raid0|raid1|…} 卷標名 /dev/塊設備 # 指明元原數據如何存放

raid0 | raid1 | raid5 | raid6 | raid10|single(單獨存放)|dup(冗餘存放)

 

mkfs.btrfs -d {raid0|raid1|…} /dev/塊設備

指明輸入如何存放(如何跨多設備存放)

raid0 | raid1 | raid5 | raid6 | raid10 | single

 

mkfs.btrfs -O list-all # 查看btrfs特新選項

[root@localhost ~]# mkfs.btrfs -O list-all

Filesystem features available at mkfs time:

mixed-bg            - mixed data and metadata block groups (0x4)

extref              - increased hardlink limit per file to 65536 (0x40, default)

raid56              - raid56 extended format (0x80)

skinny-metadata     - reduced-size metadata extent refs (0x100, default)

no-holes            - no explicit hole extents for files (0x200)

 

mount -t btrfs /dev/sdb /Mydata # 將創建好的sdb掛載Mydata(同時自動掛載子卷)

[root@localhost /]# mkdir /Mydata

[root@localhost /]# mount -t btrfs /dev/sdb /Mydata

[root@localhost /]# mount

/dev/sdb on /Mydata type btrfs (rw,relatime,seclabel,space_cache)

 

umount /塊設備 #進行卸載

 

mount -o compress={lzo|zlib} /塊設備 /掛載點 #掛載時,開啓透明壓縮機制支持壓縮解壓縮lzo和zlib

[root@localhost /]# mount -o compress=lzo /dev/sdb /Mydata

 

三、UUID查看

使用blkid查看sdc和sdb,因爲被創建爲一個文件系統,所以UUID相同,但是子卷UUID_SUB不同

[root@localhost /]# blkid /dev/sdb

/dev/sdb: LABEL="MyData" UUID="9a4159df-9556-4087-aec0-ff43e954e0b7" UUID_SUB="b176c983-38ea-4287-a14a-048441d7be33" TYPE="btrfs"

 

[root@localhost /]# blkid /dev/sdc

/dev/sdc: LABEL="MyData" UUID="9a4159df-9556-4087-aec0-ff43e954e0b7" UUID_SUB="263c080b-3439-4ef6-b9d0-c7368c860f6f" TYPE="btrfs"

 

四、btrfs filesystem

btrfs filesystem show #查看創建好的btrfs文件系統

[root@localhost /]# btrfs filesystem show

Label: 'MyData' uuid: 9a4159df-9556-4087-aec0-ff43e954e0b7

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 filesystem lable /dev/塊設備 #查看指定塊設備所屬btrfs系統的卷標

[root@localhost /]# btrfs filesystem label /dev/sdb

MyData

 

btrfs filesystem resize {+n單位|-n單位|max} /Mydata #將掛載好的btrfs文件系統擴5G(+5G)

或者縮減5G(-5G)

或者調整至最大邏輯邊界(等於物理空間大小)

[root@localhost /]# df -lh

文件系統        容量  已用  可用 已用% 掛載點

/dev/sdb         40G   17M   38G    1% /Mydata

[root@localhost /]# btrfs filesystem resize -10G /Mydata

Resize '/Mydata' of '-10G'

[root@localhost /]# df -lh

文件系統        容量  已用  可用 已用% 掛載點

/dev/sdb         30G   17M   18G    1% /Mydata

 

 

btrfs filesystem df /掛載的文件系統 #查看掛載好的btrfs文件系統的空間使用信息

[root@localhost /]# btrfs filesystem df /Mydata/

Data, RAID0: total=2.00GiB, used=768.00KiB

System, RAID1: total=8.00MiB, used=16.00KiB

System, single: total=4.00MiB, used=0.00B

Metadata, RAID1: total=1.00GiB, used=112.00KiB

Metadata, single: total=8.00MiB, used=0.00B

GlobalReserve, single: total=16.00MiB, used=0.00B

 

五、btrfs device

btrfs device add /塊設備 /掛載點

# 將指定的塊設備添加到指定的btrfs文件系統掛載點(會自動掛載及自動擴展)

補充:拆除磁盤時需要將磁盤的數據組織形式、原數據組織形式、文件系統組織形式改爲single或者raid1

[root@localhost /]# df -lh

文件系統        容量  已用  可用 已用% 掛載點

/dev/sdb         40G   17M   18G    1% /Mydata

[root@localhost /]# btrfs device add /dev/sdd /Mydata

[root@localhost /]# df -lh

文件系統        容量  已用  可用 已用% 掛載點

/dev/sdb         60G   17M   56G    1% /Mydata

 

btrfs device delete /塊設備 /掛載點

將指定的塊設備從指定的btrfs文件系統掛載點移除(會自動移動塊設備的數據到其它設備後再移除塊設備)

[root@localhost /]# btrfs device delete /dev/sdd /Mydata/

 

六、btrfs blance

btrfs balance state /掛載點 #將多個塊設備儲存的數據平衡均分儲存到各個塊設備

 

btrfs balance status /掛載點 #顯示balance均分狀態

 

btrfs balance pause /掛載點 #暫停balance均分

 

btrfs balance resume /掛載點 #繼續balance均分

 

btrfs balance cancel /掛載點 #取消balance均分

 

btrfs balance start -dconvert={raid1raid5|…} /掛載點 #修改數據的組織機制

如修改Raid級別{raid0|raid1|raid10|raid5|raid6|single|dup}

[root@localhost /]# btrfs filesystem df /Mydata/

Data, RAID0: total=2.00GiB, used=768.00KiB

System, RAID1: total=8.00MiB, used=16.00KiB

System, single: total=4.00MiB, used=0.00B

Metadata, RAID1: total=1.00GiB, used=112.00KiB

Metadata, single: total=8.00MiB, used=0.00B

GlobalReserve, single: total=16.00MiB, used=0.00B

[root@localhost /]# btrfs balance start -dconvert=raid5 /Mydata

Done, had to relocate 1 out of 5 chunks

[root@localhost /]# btrfs filesystem df /Mydata

Data, RAID5: total=2.00GiB, used=768.00KiB

System, RAID5: total=64.00MiB, used=16.00KiB

Metadata, RAID5: total=1.00GiB, used=112.00KiB

GlobalReserve, single: total=16.00MiB, used=0.00B

 

btrfs balance start -mconvert={raid1raid5|…} /掛載點 #修改元數據的組織機制

[root@localhost /]# btrfs filesystem df /Mydata/

Data, RAID0: total=2.00GiB, used=768.00KiB

System, RAID1: total=8.00MiB, used=16.00KiB

System, single: total=4.00MiB, used=0.00B

Metadata, RAID1: total=1.00GiB, used=112.00KiB

Metadata, single: total=8.00MiB, used=0.00B

GlobalReserve, single: total=16.00MiB, used=0.00B

[root@localhost /]# btrfs balance start -mconvert=raid5 /Mydata

Done, had to relocate 4 out of 5 chunks

[root@localhost /]# btrfs filesystem df /Mydata

Data, RAID5: total=2.00GiB, used=768.00KiB

System, RAID5: total=64.00MiB, used=16.00KiB

Metadata, RAID5: total=1.00GiB, used=112.00KiB

GlobalReserve, single: total=16.00MiB, used=0.00B

 

 

btrfs balance start -sconvert={raid1raid5|…} /掛載點 #修改文件系統的組織機制

[root@localhost /]# btrfs filesystem df /Mydata/

Data, RAID0: total=2.00GiB, used=768.00KiB

System, RAID1: total=8.00MiB, used=16.00KiB

System, single: total=4.00MiB, used=0.00B

Metadata, RAID1: total=1.00GiB, used=112.00KiB

Metadata, single: total=8.00MiB, used=0.00B

GlobalReserve, single: total=16.00MiB, used=0.00B

[root@localhost /]# btrfs balance start -sconvert=raid5 /Mydata

Refusing to explicitly operate on system chunks.

Pass --force if you really want to do that.

[root@localhost /]# btrfs filesystem df /Mydata

Data, RAID5: total=2.00GiB, used=768.00KiB

System, RAID5: total=64.00MiB, used=16.00KiB

Metadata, RAID5: total=1.00GiB, used=112.00KiB

GlobalReserve, single: total=16.00MiB, used=0.00B

 

 

七、btrfs subvolume子卷命令

btrfs subvolume create /掛載點/子卷名 #在指定掛載點創建btrfs子卷

[root@localhost /]# btrfs subvolume create /Mydata/mydata1

Create subvolume '/Mydata/mydata1'

 

btrfs subvolume list /掛載點 # 查看指定掛載點下的子卷

[root@localhost /]# btrfs subvolume list /Mydata

ID 260 gen 39 top level 5 path mydata1

mount -o subvol=子卷名 /dev/塊設備 /掛載點 # 單獨將子卷掛載到指定掛載點

[root@localhost /]# mkdir Mydata1

[root@localhost /]# mount -o subvol=mydata1 /dev/sdb /Mydata1

 

mount -o subvolid=子卷ID /dev/塊設備 /掛載點 # 使用子卷ID單獨將子卷掛載到指定掛載點

[root@localhost /]# mount -o subvolid=260 /dev/sdb /Mydata1

 

btrfs subvolume show /子卷掛載點 # 查看子卷信息

[root@localhost /]# btrfs subvolume show /Mydata1

/Mydata1

Name: mydata1

uuid: e660ee38-4086-244a-8bb4-9de481cf35fb

Parent uuid: -

Creation time: 2018-01-16 20:32:22

Object ID: 260

Generation (Gen): 39

Gen at creation: 39

Parent: 5

Top Level: 5

Flags: -

Snapshot(s):

 

btrfs subvolume delete /掛載點/子卷名 # 通過路徑刪除子卷

[root@localhost /]# btrfs subvolume delete /Mydata/mydata1

 

btrfs subvolume snapshot /父卷掛載點/子卷名 /父卷掛載點/快照子卷名 #創建子卷快照

補充:因爲快照卷必須在原卷同一卷組下,所以子卷快照卷必須在其父卷下

[root@localhost /]# btrfs subvolume snapshot /Mydata/mydata1 /Mydata/mydata1_snap

 

 

八、對文件進行快照

cp --reflink 文件1 文件1快照卷

[root@localhost /]# cp --reflink passwd passwd_snap

 

九、將塊設備自動轉換爲btrfs文件系統

1、將舊設備組織形式改爲single或raid1

2、btrfs device delete拆除塊設備

3、umount卸載舊設備掛載點

4、fsck -f /塊設備 進行強制檢測

5、btrfs-convert /塊設備,將塊設備自動轉換爲btrfs文件系統

6、mount進行掛載

7、5、btrfs-convert -r /塊設備 ,將塊設備回滾爲原來系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章