btrfs文件系統介紹
簡介
Btrfs(B-tree,ButterFS ,Better FS通常念成Butter FS),由Oracle于2007年宣布并進行中的COW(copy-on-write式)文件系統。繼ext3/4文件系統之后linux又有了比較強大的文件系統(btrfs文件系統),btrfs文件系統不僅可以將ext3/4系列的升級為btrfs 文件系統也可以將其降級為ext3/4的文件系統,特別是單一文件大小的限制,總文件系統大小限制以及加入文件校驗 和特性。而且btrfs文件系統還具有快照,內建磁盤陣列(RAID)支持,支持子卷等功能,允許在線調整文件系統大小,更為“囂張”的是btrfs 文件系統還支持快照的快照。突破了之前的一些文件系統。
一 btrfs核心特性
1.擴展性 (scalability) 相關的特性:btrfs最重要的設計目標是應對大型機器對文件系統的擴展性要求。Extent,B-Tree 和動態inode創建等特性保證了btrfs在大型機器上仍有卓越的表現,其整體性能而不會隨著系統容量的增加而降低。
2.數據一致性(data integrity)相關的特性寫時復制更新機制(CoW):復制、更新及替換指針,而非“就地”更新;還支持數據及元數據校驗碼(checksum)。
3.多設備管理相關的特性:btrfs可由多個底層物理卷組成;支持RAID,以聯機“添加”、“移除”,“修改”;支持快照以及快照的快照。
4.子卷(subvolume):子卷實質上是把文件系統的一部分配置為一個完整的子文件系統,采用subvolume,一個大的文件系統可以被劃分為多個子文件系統,這些子文件系統共享底層的設備空間,在需要磁盤空間時便從底層設備中分配,可以充分利用disk的帶寬,可以簡化磁盤空間的管理等,Subvolume可以作為根目錄掛載到任意掛載點。
5.透明壓縮:分區里的每個文件都被自動壓縮,不僅減小了文件的大小,還提高了性能。
6. btrfs支持在線碎片整理。
二、 btrfs 常見命令
1.文件系統創建:
命令:mkfs.btrfs
選項:-L 'LABEL' #設置卷標
-d< type>: raid0, raid1, raid5, raid6, raid10, single #設置存儲數據raid級別
-m< profile>: raid0, raid1, raid5, raid6, raid10, single, dup #設置存儲元數據raid級別
-O list-all: 列出支持的所有feature
2.掛載文件系統:
命令:mount -t btrfs /dev/sdb MOUNT_POINT
3.透明壓縮機制:
命令:mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
4.ext文件系統和btrfs文件系統之間轉換:
命令:btrfs-convert /dev/sdd1 #一般文件系統轉換成btrfs文件系統;
命令:btrfs-convert -r /dev/sdd1 #btrfs文件系統轉換回一般文件系統。
三、 btrfs 常見子命令
1.文件系統命令管理
命令:btrfs filesystem <subcommand> [argumnet]
show:屬性查看
df:查看掛載點的可使用空間
label:設置器卷標
resize:動態調整btrfs大小
sync:同步文件系統
defragment:碎片整理
usage:顯示文件系統使用詳細信息
2. 管理子卷和快照命令
命令:btrfs subvolume <subcommand> [argumnet]
Create:創建子卷
Delete:刪除子卷
List:列出子卷
show:顯示子卷的詳細信息
syn:同步內存上的數據到磁盤上
snapshot:創建快照
命令格式:btrfs subvolume snapshot [-r] <SUBVOLUME_NAME> <SUNVOLUME_SNAP_NAME>
掛載子卷:
命令格式:mount -o subvol=SUBVOLUME DEVICE /MOUNT_POIN
查看子卷信息:
命令格式:btrfs subvolume show MOUNT_POINT
3.設備管理命令
命令:btrfs device <subcommand> DEVICE /MOUNT_POIN
add:添加設備
delete:刪除設備
scan:掃描btrfs文件系統
4.平衡數據塊管理 (原有的數據移動一部分到新增的物理卷上)
命令:btrfs balance <subcommand> [options] /MOUNT_POIN
btrfs balance start -mconvert=raid5 -dconvert=raid1 /mydata ##平衡數據塊管理,并且轉換(元)數據存儲RAID級別
start:啟用balance
pause: 停止balance
cancel:取消balance
status:查看balance狀態
resume:重新開始
5.檢查卸載btrfs文件系統
btrfs check [options]
四、btrfs管理及應用
新增4塊20G磁盤 dev/sdb、/dev/sdc、/dec/sdd /dev/sde
1、Btrfs文件系統創建 [root@centos7 ~]# mkfs.btrfs -L mybtrfs /dev/sd{b,c,d} ##將sdb sdc sdd 格式化為btrfs系統,并且設置卷標為‘mybtrfs’ 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 adding device /dev/sdd id 3 fs created label mybtrfs on /dev/sdb nodesize 16384 leafsize 16384 sectorsize 4096 size 60.00GiB [root@centos7 ~]# btrfs filesystem show ##查看系統上的btrfs文件系統 Label: 'mybtrfs' uuid: 290c59ec-8741-4b7c-a542-0bc960f89064 Total devices 3 FS bytes used 112.00KiB devid 1 size 20.00GiB used 2.02GiB path /dev/sdb devid 2 size 20.00GiB used 1.01GiB path /dev/sdc devid 3 size 20.00GiB used 2.01GiB path /dev/sdd [root@centos7 ~]# blkid /dev/sdb /dev/sdc /dev/sdd ##查看設備屬性 /dev/sdb: LABEL="mybtrfs" UUID="290c59ec-8741-4b7c-a542-0bc960f89064" UUID_SUB="969b4438-e1e4-4b4a-b9f6-250ed3bfd1ff" TYPE="btrfs" /dev/sdc: LABEL="mybtrfs" UUID="290c59ec-8741-4b7c-a542-0bc960f89064" UUID_SUB="ecbea82c-8c39-4f68-b602-865d9455fd9c" TYPE="btrfs" /dev/sdd: LABEL="mybtrfs" UUID="290c59ec-8741-4b7c-a542-0bc960f89064" UUID_SUB="74e8dc21-c7c6-446a-a578-6a56331c6f0e" TYPE="btrfs" ###UUID相同,不同的UUID_SUB (子卷)
2、掛載文件系統 透明壓縮 [root@centos7 ~]# mkdir /{mydata,mycompress} ##創建掛載目錄 [root@centos7 ~]# mount -t btrfs /dev/sdb /mydata/ ##掛載文件系統 [root@centos7 ~]# mount | grep /mydata ##掛載成功 /dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache) [root@centos7 ~]# btrfs filesystem df /mydata/ ##查看文件系統掛載點空間使用信息 Data, RAID0: total=3.00GiB, used=1.00MiB 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@centos7 ~]# df -h /dev/sdb ##空間使用情況 Filesystem Size Used Avail Use% Mounted on /dev/sdb 60G 18M 57G 1% /mydata [root@centos7 ~]# btrfs filesystem usage /mydata ##詳細情況 Overall: Device size: 60.00GiB Device allocated: 5.03GiB Device unallocated: 54.97GiB Device missing: 0.00B Used: 1.25MiB Free (estimated): 57.97GiB (min: 30.49GiB) Data ratio: 1.00 Metadata ratio: 1.99 Global reserve: 16.00MiB (used: 0.00B) Data,RAID0: Size:3.00GiB, Used:1.00MiB /dev/sdb 1.00GiB /dev/sdc 1.00GiB /dev/sdd 1.00GiB Metadata,single: Size:8.00MiB, Used:0.00B /dev/sdb 8.00MiB Metadata,RAID1: Size:1.00GiB, Used:112.00KiB /dev/sdb 1.00GiB /dev/sdd 1.00GiB System,single: Size:4.00MiB, Used:0.00B /dev/sdb 4.00MiB System,RAID1: Size:8.00MiB, Used:16.00KiB /dev/sdc 8.00MiB /dev/sdd 8.00MiB ###透明壓縮機制: [root@centos7 ~]# umount /dev/sdb [root@centos7 ~]# mount -o compress=zlib /dev/sdb /mycompress/ [root@centos7 ~]# mount | grep /mycompress /dev/sdb on /mycompress type btrfs (rw,relatime,seclabel,compress=zlib,space_cache)
3、調整btrfs文件系統大小:(擴大、縮小) #####聯機縮小文件系統##### [root@centos7 ~]# btrfs filesystem resize -15G /mydata Resize '/mydata' of '-15G' [root@centos7 ~]# df -h | grep /dev/sdb Filesystem Size Used Avail Use% Mounted on /dev/sdb 45G 18M 45G 1% /mydata ##注意:縮小時,空間不能超出單塊硬盤空閑空間 #####聯機擴大文件系統##### [root@centos7 ~]# btrfs filesystem resize +10G /mydata Resize '/mydata' of '+10G' [root@centos7 ~]# df -h | grep /dev/sdb Filesystem Size Used Avail Use% Mounted on /dev/sdb 55G 18M 45G 1% /mydata
4、增大物理邊界 (增加一塊硬盤/dev/sde 20G) [root@centos7 ~]# btrfs device add /dev/sde /mydata ##增大物理邊界 [root@centos7 ~]# df -h | grep /mydata Filesystem Size Used Avail Use% Mounted on /dev/sdb 75G 18M 74G 1% /mydata [root@centos7 ~]# btrfs filesystem show ##查看信息 Label: 'mybtrfs' uuid: 290c59ec-8741-4b7c-a542-0bc960f89064 Total devices 4 FS bytes used 960.00KiB devid 1 size 15.00GiB used 1.01GiB path /dev/sdb devid 2 size 20.00GiB used 1.26GiB path /dev/sdc devid 3 size 20.00GiB used 1.26GiB path /dev/sdd devid 4 size 20.00GiB used 0.00B path /dev/sde
5、平衡btrfs文件系統 [root@centos7 ~]# btrfs balance start -mconvert=raid5 -dconvert=raid1 /mydata ##平衡數據,并且元數據存儲轉換為raid5 數據文件存儲轉換為raid1 Done, had to relocate 5 out of 5 chunks [root@centos7 ~]# btrfs filesystem show ##查看簡要信息 Label: 'mybtrfs' uuid: 290c59ec-8741-4b7c-a542-0bc960f89064 Total devices 4 FS bytes used 656.00KiB devid 1 size 15.00GiB used 384.00MiB path /dev/sdb devid 2 size 20.00GiB used 1.38GiB path /dev/sdc devid 3 size 20.00GiB used 384.00MiB path /dev/sdd devid 4 size 20.00GiB used 1.38GiB path /dev/sde [root@centos7 ~]# btrfs filesystem df /mydata Data, RAID1: total=1.00GiB, used=528.00KiB System, RAID5: total=96.00MiB, used=16.00KiB Metadata, RAID5: total=1.03GiB, used=112.00KiB GlobalReserve, single: total=16.00MiB, used=0.00B [root@centos7 ~]# btrfs filesystem usage /mydata ##查看詳細信息 WARNING: RAID56 detected, not implemented WARNING: RAID56 detected, not implemented Overall: Device size: 75.00GiB Device allocated: 2.00GiB Device unallocated: 73.00GiB Device missing: 0.00B Used: 1.03MiB Free (estimated): 37.50GiB (min: 37.50GiB) Data ratio: 2.00 Metadata ratio: 0.00 Global reserve: 16.00MiB (used: 0.00B) Data,RAID1: Size:1.00GiB, Used:528.00KiB /dev/sdc 1.00GiB /dev/sde 1.00GiB Metadata,RAID5: Size:1.03GiB, Used:112.00KiB /dev/sdb 352.00MiB /dev/sdc 352.00MiB /dev/sdd 352.00MiB /dev/sde 352.00MiB System,RAID5: Size:96.00MiB, Used:16.00KiB /dev/sdb 32.00MiB /dev/sdc 32.00MiB /dev/sdd 32.00MiB /dev/sde 32.00MiB Unallocated: /dev/sdb 14.62GiB /dev/sdc 18.62GiB /dev/sdd 19.62GiB /dev/sde 18.62GiB
6、減小物理邊界 (刪除硬盤/dev/sdc 20G) [root@centos7 ~]# btrfs device delete /dev/sdc /mydata/ ###減小物理邊界 [root@centos7 ~]# df -h | grep /mydata ##查看信息 /dev/sdb 28G 17M 20G 1% /mydata [root@centos7 ~]# btrfs filesystem usage /mydata ##查看詳細信息 WARNING: RAID56 detected, not implemented WARNING: RAID56 detected, not implemented Overall: Device size: 55.00GiB Device allocated: 2.00GiB Device unallocated: 53.00GiB Device missing: 0.00B Used: 1.03MiB Free (estimated): 27.50GiB (min: 27.50GiB) Data ratio: 2.00 Metadata ratio: 0.00 Global reserve: 16.00MiB (used: 0.00B) Data,RAID1: Size:1.00GiB, Used:528.00KiB /dev/sdd 1.00GiB /dev/sde 1.00GiB Metadata,RAID5: Size:1.00GiB, Used:112.00KiB /dev/sdb 512.00MiB /dev/sdd 512.00MiB /dev/sde 512.00MiB System,RAID5: Size:64.00MiB, Used:16.00KiB /dev/sdb 32.00MiB /dev/sdd 32.00MiB /dev/sde 32.00MiB Unallocated: /dev/sdb 14.47GiB /dev/sdd 18.47GiB /dev/sde 18.47GiB [root@centos7 ~]# cd /mydata/ ###查看數據完好 [root@centos7 mydata]# ll total 24 -rw-r--r--. 1 root root 465 Apr 26 23:18 fstab -rw-r--r--. 1 root root 13948 Apr 26 23:18 functions -rw-r--r--. 1 root root 23 Apr 26 23:18 issue [root@centos7 mydata]# cat fstab # # /etc/fstab # Created by anaconda on Tue Apr 12 13:40:11 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=ccdd0c89-e55a-4842-8168-364e7a767225 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
7、btrfs子卷管理 #####創建子卷 log 和 htdoc ##### [root@centos7 mydata]# btrfs subvolume create /mydata/log Create subvolume '/mydata/log' [root@centos7 mydata]# btrfs subvolume create /mydata/htdoc Create subvolume '/mydata/htdoc' [root@centos7 mydata]# btrfs subvolume list /mydata ##查看子卷 ID 264 gen 87 top level 5 path log # #ID 262是子卷log的ID,可以用該ID來掛載該卷 ID 265 gen 88 top level 5 path htdoc [root@centos7 ~]# ll /mydata/ ##查看在父卷下生成子卷log和htdoc total 24 -rw-r--r--. 1 root root 465 Apr 26 23:18 fstab -rw-r--r--. 1 root root 13948 Apr 26 23:18 functions drwxr-xr-x. 1 root root 0 Apr 26 23:42 htdoc -rw-r--r--. 1 root root 23 Apr 26 23:18 issue drwxr-xr-x. 1 root root 0 Apr 26 23:42 log #####掛載子卷##### [root@centos7 ~]# mount /dev/sdb /mydata/ [root@centos7 ~]# mount -o subvol=log /dev/sdc /log ##將子卷單獨掛載到/log目錄 [root@centos7 ~]# ll /log/ ##目錄為空 total 0 [root@centos7 ~]# btrfs subvolume show /log ##查看子卷信息 /log Name: log uuid: 67ef54e5-d58a-dd47-bd4a-9c64be59cfca Parent uuid: - Creation time: 2016-04-26 23:42:21 Object ID: 264 Generation (Gen): 90 Gen at creation: 87 Parent: 5 Top Level: 5 Flags: - Snapshot(s): [root@centos7 ~]# cp /var/log/messages /log ##向子卷拷貝文件 [root@centos7 ~]# ll /log total 164 -rw-------. 1 root root 164212 Apr 27 00:07 messages [root@centos7 ~]# umount /log ##卸載子卷 [root@centos7 ~]# ll /mydata/log/messages ##查看父卷 -rw-------. 1 root root 164212 Apr 27 00:07 /mydata/log/messages ##子卷卸載,但是通過父卷可以查看文件,說明掛載了父卷也就同時掛載了子卷 [root@centos7 ~]# umount /mydata ##卸載父卷 [root@centos7 ~]# mount -o subvol=log /dev/sdb /mydata ##單獨掛載子卷 [root@centos7 ~]# ll /mydata ##只能看到子卷文件,而看不到父卷文件 total 164 -rw-------. 1 root root 164212 Apr 27 00:07 messages ##子卷,父卷可以單獨掛載 #####子卷快照##### [root@centos7 ~]# mount -o subvol=log /dev/sdb /log ###單獨掛載子卷 [root@centos7 ~]# cp /etc/inittab /log/ ##拷貝文件到子卷 [root@centos7 ~]# ll /log/ total 168 -rw-r--r--. 1 root root 511 Apr 27 00:26 inittab -rw-------. 1 root root 164212 Apr 27 00:07 messages [root@centos7 ~]# btrfs subvolume snapshot /mydata/log/ /mydata/log_snapshot ###創建子卷快照log_snapshot Create a snapshot of '/mydata/log/' in '/mydata/log_snapshot' [root@centos7 ~]# btrfs subvolume list /mydata ##查看創建的子卷成功 ID 264 gen 98 top level 5 path log ID 265 gen 98 top level 5 path log_snapshot [root@centos7 ~]# ll /mydata/log_snapshot/ ##快照卷文件與子卷文件相同 total 168 -rw-r--r--. 1 root root 511 Apr 27 00:26 inittab -rw-------. 1 root root 164212 Apr 27 00:07 messages [root@centos7 ~]# cp /etc/passwd /log/ ###更新子卷文件 新增/刪除文件 [root@centos7 ~]# rm -rf /log/messages [root@centos7 ~]# ll /log/ total 8 -rw-r--r--. 1 root root 511 Apr 27 00:26 inittab -rw-r--r--. 1 root root 1341 Apr 27 00:29 passwd [root@centos7 ~]# ll /mydata/log_snapshot/ ###快照卷文件沒有變化 total 168 -rw-r--r--. 1 root root 511 Apr 27 00:26 inittab -rw-------. 1 root root 164212 Apr 27 00:07 messages #####刪除子卷##### [root@centos7 ~]# btrfs subvolume delete /mydata/htdoc ##刪除子卷htdoc Delete subvolume (no-commit): '/mydata/htdoc' [root@centos7 ~]# btrfs subvolume delete /mydata/log_snapshot/ Delete subvolume (no-commit): '/mydata/log_snapshot' [root@centos7 ~]# btrfs subvolume list /mydata ##查看信息 ID 264 gen 91 top level 5 path log
8、ext文件系統和btrfs文件系統之間轉換 ###將/dev/sde 從btrfs文件系統中移除 [root@centos7 ~]# btrfs device delete /dev/sde /mydata/ ##從btrfs中移除設備 [root@centos7 ~]# fdisk /dev/sde ##分區 [root@centos7 ~]# mkfs.ext4 /dev/sde1 ##將分區格式化為ext4文件系統 [root@centos7 ~]# mount /dev/sde1 /mnt ##掛載ext4文件系統 [root@centos7 ~]# cp /etc/fstab /mnt ##拷貝文件到ext4文件系統中 [root@centos7 ~]# ll /mnt total 20 -rw-r--r--. 1 root root 465 Apr 27 00:53 fstab drwx------. 2 root root 16384 Apr 27 00:52 lost+found ###將ext文件系統轉換為btrfs文件系統 [root@centos7 ~]# umount /mnt ##卸載,不要在線轉換 [root@centos7 ~]# btrfs-convert /dev/sde1 ##轉換文件系統 creating btrfs metadata. copy inodes [o] [ 0/ 12] creating ext2fs image file. cleaning up system chunk. conversion complete. [root@centos7 ~]# blkid /dev/sde1 ##查看信息 /dev/sde1: UUID="916f7a39-17ef-491e-b4bc-45e1b4c9eb3b" UUID_SUB="154b3bae-7fa5-4753-b357-44c63cecb24a" TYPE="btrfs" [root@centos7 ~]# mount /dev/sde1 /mnt ##重新掛載 [root@centos7 ~]# ll /mnt ##查看信息 total 20 drwxr-xr-x. 1 root root 10 Apr 27 00:56 ext2_saved -rw-r--r--. 1 root root 465 Apr 27 00:53 fstab drwx------. 1 root root 0 Apr 27 00:52 lost+found [root@centos7 ~]# cat /mnt/fstab ##查看文件完好無損 # # /etc/fstab # Created by anaconda on Tue Apr 12 13:40:11 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=ccdd0c89-e55a-4842-8168-364e7a767225 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 ###將btrfs文件系統轉換為ext文件系統 ###從上面/mnt目錄下多了個ext2_saved目錄,正是有這個目錄,btrfs文件系統才能重新轉換到ext文件系統 [root@centos7 ~]# umount /mnt [root@centos7 ~]# btrfs-convert -r /dev/sde1 rollback complete. [root@centos7 ~]# blkid /dev/sde1 /dev/sde1: UUID="832141e1-9d9d-4bc1-9189-b2685fef38f3" TYPE="ext4" [root@centos7 ~]# mount /dev/sde1 /mnt [root@centos7 ~]# ll /mnt total 20 -rw-r--r--. 1 root root 465 Apr 27 00:53 fstab drwx------. 2 root root 16384 Apr 27 00:52 lost+found [root@centos7 ~]# cat /mnt/fstab # # /etc/fstab # Created by anaconda on Tue Apr 12 13:40:11 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=ccdd0c89-e55a-4842-8168-364e7a767225 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
總結
本文總結了btrfs文件系統的簡單介紹和基本使用,水平有限,如有錯誤請指出,謝謝~~
作者: chrony
感謝: MageEdu
原創文章,作者:chrony,如若轉載,請注明出處:http://www.www58058.com/15556