BTRFS文件系統
核心特性
-
支持將多個底層物理設備組合成同一個設備使用,即多物理卷支持。btrfs可由多個底層物理卷組成:支持RAID,以連擊“添加”、“移除”、“修改”
-
寫時復制,在修改文件時,先將文件復制一份,然后在新文件上進行修改,最后將文件名的指針指向新文件,所以原文件還是存在的。
-
數據及元數據校驗碼:checksum
-
子卷:在一個卷上創建子卷,每一個卷都可單獨使用。
-
快照:獨特之處在于它支持快照的快照。
-
透明壓縮:在存放文件是會自動壓縮,在查看文件是會自動解壓縮,但缺點是會消耗更多的CPU的時鐘周期
btrfs的命令的特點是將多個命令結合到一個命令用短選項實現。
文件系統創建
只有在centos7中才能使用mkfs.btrfs命令來創建
-L ’LABEL' : 指明卷標 -b:指明數據是如何跨設備存放。single,raid0,1,5,6,10 -m:指明元數據是如何跨設備存放.single,raid0,1,5,6,10 #所以我們可以知道btrfs自身就支持RAID。
注意:在一塊磁盤上組合不同分區除了將多個分區組合成一個大分區并無什么其余的意義,所以建議使用不同的磁盤做btrfs。
[root@localhost ~]# mkfs.btrfs -L mydata /dev/sdb /dev/sdc # -L :指明卷標為mydata 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 [root@localhost ~]# btrfs filesystem show Label: 'centos' uuid: 6a9ca299-dcff-4702-9af7-c2af565bd318 Total devices 1 FS bytes used 4.06GiB devid 1 size 38.00GiB used 6.04GiB path /dev/sda1 Label: 'mydata' uuid: 6fbf4564-23cd-467e-b8e8-6b6e93567987 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-progs v3.19.1
屬性查看:
[root@localhost ~]# btrfs filesystem show /dev/sdb #查看指定文件系統的屬信息 [root@localhost ~]# btrfs filesystem show --all-devices #查看所有文件系統的信息 [root@localhost ~]# btrfs filesystem show --mounted #查看以掛載的文件系統的信息
查看卷標:
[root@localhost ~]# btrfs filesystem label /dev/sdb
掛載文件系統:
[root@localhost ~]# mount -t btrfs /dev/sdb /mydata [root@localhost ~]# mount -o compress=lzo /dev/sdb /mydata/ #使用壓縮算法存放文件
調整文件系統大小
[root@localhost ~]# btrfs filesystem resize max /mydata/ #將文件系統大小調整至最大,也可使用+#G指明增加多大空間,但增加的孔家不能查過最大空間大小 [root@localhost ~]# btrfs filesystem resize -17G /mydata/ Resize '/mydata/' of '-17G' [root@localhost ~]# btrfs filesystem resize -18G /mydata/ Resize '/mydata/' of '-18G' ERROR: unable to resize '/mydata/' - No space left on device [root@localhost ~]# btrfs filesystem show /mydata Total devices 2 FS bytes used 904.00KiB devid 1 size 3.00GiB used 2.02GiB path /dev/sdb devid 2 size 20.00GiB used 2.01GiB path /dev/sdc #在這里我們可以看到在20G磁盤空間的情況下我們最多減小17G的空間大小,并且是作用在一個磁盤上。所以在此猜測,在每一塊磁盤上都以一段空間存放其固有的信息。
添加磁盤
[root@localhost ~]# btrfs device add /dev/sdd /mydata [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sdb 60G 18M 56G 1% /mydata #此時文件系統大小以增大了20G
均衡文件系統
[root@localhost ~]# btrfs balance start /mydata/ Done, had to relocate 5 out of 5 chunks #將文件均衡進新增加的磁盤中
改變元數據級別的組織形式: [root@localhost ~]# btrfs balance start -mconvert=raid5 /mydata Done, had to relocate 2 out of 3 chunks #注意:要有足夠磁盤數量。
拆除硬盤:btrfs可聯機拆除磁盤,它會自動在拆除是現將要拆除的磁盤中的文件轉移至其他磁盤中,所以不會損壞數據。
[root@localhost ~]# btrfs device delete /dev/sdd /mydata [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sdb 40G 18M 40G 1% /mydata #此時文件系統已經減小了20G了。
創建子卷:
[root@localhost ~]# btrfs subvolume create /mydata/logs Create subvolume '/mydata/logs' [root@localhost ~]# btrfs subvolume list /mydata/ ID 263 gen 86 top level 5 path logs
掛載父卷時,子卷會自動掛載。現在如果只想掛載一個子卷。
[root@localhost ~]# mount -o subvol=logs /dev/sdc /mnt #這是根據子卷名來掛載子卷。 我們亦可以基于子卷ID來掛載子卷。 [root@localhost ~]# btrfs subvolume list /mydata ID 263 gen 91 top level 5 path logs #獲取子卷ID為263 [root@localhost ~]# mount -o subvolid=263 /dev/sdc /mnt #利用子卷ID來掛載子卷。
刪除子卷
[root@localhost ~]# btrfs subvolume delete /mydata/logs
創建子卷的快照:
子卷的快照必須要與子卷在同一父卷中。
[root@localhost ~]# btrfs subvolume snapshot /mydata/logs /mydata/logs_snopshot
對文件系統內的單個文件做快照:
[root@localhost mydata]# cp --reflink grub2.cfg grub2.cfg.2
實現btrfs和ext4文件系統之間的轉換
[root@localhost ~]# btrfs-convert /dev/sdd1 #將ext4文件系統轉換成btrfs文件系統 [root@localhost ~]# btrfs-convert -r /dev/sdd1 #將btrfs文件系統轉換成ext4文件系統
原創文章,作者:21期-揚州-藍,如若轉載,請注明出處:http://www.www58058.com/24281
寫的很好,排版也很漂亮,加油