一:概述
1.1簡介
Btrfs被稱為是下一代Linux文件系統。通常念成 Butter FS,Better FS 或B-tree FS。它采用了很多先進的文件系統設計,不僅解決了 ext2/3的擴展性問題,支持寫時拷貝(copy-on-write),支持高效的snapshot和clone,使用b-tree作為存儲的數據結構。讓人們看到了下一代文件系統所具有的許多其他特性。
1.2原理及特性
擴展性相關特性
B-Tree:btrfs文件系統中所有的metadata都由BTree管理。使用 BTree 的主要好處在于查找,插入和刪除操作都很高效。
基于Extent的文件存儲:Extent就是一些連續的block,一個extent由起始的block加上長度進行指定,故Extent 能有效地減少元數據開銷。
動態inode分配:每一個inode只是BTree中的一個節點,用戶可以無限制地任意插入新的inode,其物理存儲位置是動態分配的。所以btrfs沒有對文件個數的限制。
SSD優化支持:Btrfs文件系統針對SSD的分布寫操作技術特性做優化,不僅能提高SSD的使用壽命,而且能提高讀寫性能。
數據一致性相關特性
COW(copy-on-write):即每次寫磁盤數據時,先將更新數據寫入一個新的“塊”,當新數據寫入成功之后,再更新相關的數據結構指向新 “塊”。
Checksum技術:保證了數據的可靠性,避免silent corruption現象。因硬件原因,從磁盤上讀出的數據會出錯,而且這樣的錯誤是不會被上層軟件所察覺。解決這個問題的方法是保存數據的校驗和,在讀取數據后檢查校驗和。如果不符合,便知道數據出現了錯誤。
多設備管理特性
Subvolume(子卷管理):采用subvolume技術,可以將一個大的文件系統可以被劃分為多個子文件系統,這些子文件系統共享底層的設備空間,在需要磁盤空間時便從底層設備中分配。
Snapshot(快照管理):快照是對文件系統某一時刻的完全備份。建立快照之后,對文件系統的修改不會影響快照中的內容。
軟件RAID:基于多物理磁盤設備的前提條件下,Btrfs對metadata及date支持軟件RAID技術,使其數據安全性及冗余性更高。默認情況下對metadata實施RAID1。
二:命令指令
2.1操作系統環境&軟件版本信息
# cat /proc/version Linux version 3.10.0-327.13.1.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Mar 31 16:04:38 UTC 2016 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) #Minimal # btrfs version btrfs-progs v3.19.1 # mkfs.btrfs -V mkfs.btrfs, part of btrfs-progs v3.19.1
2.2安裝
Centos_7.2系統默認集成Btrfs及相關工具
2.3命令說明
mkfs.btrfs [options] <device> [<device>...] #用于創建Btrfs文件系統 常用選項: -d PROFILE #data存儲級別:raid0, raid1, raid5, raid6, raid10, dup or single -f #強制覆蓋已存在的文件系統 -L LABEL #設置磁盤卷表 -m PROFILE #metadata存儲級別:raid0, raid1, raid5, raid6, raid10, dup or single -n SIZE #設置nodesize大小 -O LIST #設置或者羅列文件系統特性 -U UUID #指定UUID設備號
btrfs <command> [<args>] #對Btrfs文件系統進行管理及控制 常用子命令: balance #磁盤數據分布平衡操作 check #btrfs磁盤掃描&校驗 device #磁盤物理設備管理及控制 filesystem #文件系統的信息查詢及修改 subvolume #子卷管理&快照管理
btrfs-convert #將ext2文件系統轉換成btrfs文件系統 常用選項: -r #將btrfs文件系統還原回ext2文件系統
三:使用教程
前期準備工作:為虛擬機添加4塊磁盤
# fdisk -l Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdd: 2147 MB, 2147483648 bytes, 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sde: 2147 MB, 2147483648 bytes, 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdc: 2147 MB, 2147483648 bytes, 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000187db Device Boot Start End Blocks Id System /dev/sda1 * 2048 1026047 512000 83 Linux /dev/sda2 1026048 3123199 1048576 82 Linux swap / Solaris /dev/sda3 3123200 83886079 40381440 83 Linux
3.1創建btrfs文件系統
# mkfs.btrfs -L mybtrfs -d raid5 -m raid5 /dev/sdb /dev/sdc /dev/sdd 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 'raid56': raid56 extended format 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 6.00GiB
創建btrfs文件系統,指定卷標為 mybtrfs,并指定matadata與data數據存儲級別為raid5(PS:需要3盤磁盤支持,raid10需要4塊,raid1&raid0需要2塊)
3.2查看btrfs文件系統相關信息
# btrfs filesystem show Label: 'mybtrfs' uuid: b8557848-3dde-41b7-8025-056e8e7d2938 Total devices 3 FS bytes used 112.00KiB devid 1 size 2.00GiB used 437.50MiB path /dev/sdb devid 2 size 2.00GiB used 417.50MiB path /dev/sdc devid 3 size 2.00GiB used 417.50MiB path /dev/sdd # blkid /dev/sdb /dev/sdc /dev/sdd /dev/sdb: LABEL="mybtrfs" UUID="b8557848-3dde-41b7-8025-056e8e7d2938" UUID_SUB="ba10169d-0487-41cd-a27c-0c4f3c175be3" TYPE="btrfs" /dev/sdc: LABEL="mybtrfs" UUID="b8557848-3dde-41b7-8025-056e8e7d2938" UUID_SUB="666ffc52-9c45-40e5-aaf9-869746ae5d7c" TYPE="btrfs" /dev/sdd: LABEL="mybtrfs" UUID="b8557848-3dde-41b7-8025-056e8e7d2938" UUID_SUB="d2927b8d-ac87-4191-8edf-c19658b67245" TYPE="btrfs"
3.3掛載并使用btrfs文件系統
# mount -t btrfs LABEL=mybtrfs /mnt # mount -t btrfs -o SSD LABEL=mybtrfs /mnt #SSD 優化選項 # mount /dev/sdb on /mnt type btrfs (rw,relatime,seclabel,space_cache) # umount /mnt/
3.4掛載設備磁盤空間的增加及減少(邏輯空間的收縮及擴張)
# btrfs filesystem resize -1G /mnt #掛載空間縮小1G空間 Resize '/mnt' of '-1G' # df -Th /dev/sdb btrfs 5.0G 17M 4.2G 1% /mnt # btrfs filesystem resize max /mnt #空間增長還原至邏輯空間最大值 Resize '/mnt' of 'max' # df -Th /dev/sdb btrfs 6.0G 17M 5.2G 1% /mnt
3.5磁盤空間的增加及減少(物理磁盤設備的增加及減少)
# btrfs device add /dev/sde /mnt #添加新物理磁盤到現有btrfs文件系統中 # btrfs filesystem show Label: 'mybtrfs' uuid: b8557848-3dde-41b7-8025-056e8e7d2938 Total devices 4 FS bytes used 256.00KiB devid 1 size 2.00GiB used 437.50MiB path /dev/sdb devid 2 size 2.00GiB used 417.50MiB path /dev/sdc devid 3 size 2.00GiB used 417.50MiB path /dev/sdd devid 4 size 2.00GiB used 0.00B path /dev/sde # btrfs balance start /mnt #新添加進的磁盤空間利用率為0,為使數據平均分布在各個磁盤,使用balance子命令平衡數據分布 Done, had to relocate 6 out of 6 chunks # btrfs filesystem show Label: 'mybtrfs' uuid: b8557848-3dde-41b7-8025-056e8e7d2938 Total devices 4 FS bytes used 384.00KiB devid 1 size 2.00GiB used 416.00MiB path /dev/sdb devid 2 size 2.00GiB used 416.00MiB path /dev/sdc devid 3 size 2.00GiB used 416.00MiB path /dev/sdd devid 4 size 2.00GiB used 416.00MiB path /dev/sde # btrfs device delete /dev/sde /mnt #刪除新物理磁盤到現有btrfs文件系統中 # btrfs filesystem show Label: 'mybtrfs' uuid: b8557848-3dde-41b7-8025-056e8e7d2938 Total devices 3 FS bytes used 320.00KiB devid 1 size 2.00GiB used 480.00MiB path /dev/sdb devid 2 size 2.00GiB used 480.00MiB path /dev/sdc devid 3 size 2.00GiB used 480.00MiB path /dev/sdd #PS:刪除物理磁盤時,切記要檢查原btrfs文件系統中文件總容量大小。確保 # (磁盤刪除前磁盤空間總容量) - (磁盤刪除后磁盤空間總容量) > (磁盤刪除前磁盤文件總容量)
3.6子卷創建管理&快照管理
btrfs子卷即可理解成linux文件系統"根"目錄及下掛節點目錄,可以把btrfs子卷與根的概念理解成獨立的文件目錄系統結構。
“根”節點即是btrfs磁盤系統最上層掛載點,下掛文件目錄節點既可理解成是btrfs子卷。
子卷可以被單獨掛載使用,但是如果上級目錄或頂層節點被掛載使用后,其子卷自動被掛載。
btrfs快照功能實則是子卷管理的一種衍生應用,即對需快照文件夾創建一個具備映射功能的子卷
# btrfs subvolume create /mnt/test_sub #創建子卷,該子卷可獨立掛載在其他目錄節點上 Create subvolume '/mnt/test_sub' # ll /mnt/ total 0 drwxr-xr-x. 1 root root 0 Apr 15 14:58 test_sub # btrfs subvolume delete /mnt/test_sub #刪除子卷
# ll /mnt/ #原文件系統文件列表 total 4 -rw-r--r--. 1 root root 501 Apr 15 15:06 fstab # btrfs subvolume snapshot /mnt /mnt/snapshot_dir/ #創建/mnt文件夾的快照文件夾/mnt/snapshot_dir/ Create a snapshot of '/mnt' in '/mnt/snapshot_dir' #可通過修改/mnt/fstab文件查看快照功能的實現 # btrfs subvolume delete snapshot_dir #刪除快照
3.7btrfs & ext2fs 格式轉換
# btrfs-convert /dev/sda3 #ext2 --> btrfs # btrfs-convert -r /dev/sda3 #btrfs --> ext2
四:項目拓展
編撰ing~~~
原創文章,作者:蘇門答臘,如若轉載,請注明出處:http://www.www58058.com/14770