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.178linux.com/15556