一:概述
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.178linux.com/14770