Btrfs (Btree FS)文件系统:
是由Oracle(甲骨文)公司在2007年开发的一个写时复制(copy to write)文件系统,以解决文件系统中缺少池,快照,校验及跨多设备访问的一些问题而实现大规模化储存。
Btrfs特点:
1.btrfs可由多个底层物理卷组成;支持RAID,以联机“添加、“移除”,“修改”
2.写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;
3.扩展性:扩展后的整体性能不会随系统容量增加而降低
4.数据一致性:btrfs采用了COW机制,支持checksum,保证了数据的完整性而坚决了突发的硬件故障导致损失
5.子卷:sub_volume#
6,快照和克隆:支持快照的快照;基于子卷的一个副本,相当于VMware里的快照
7.透明压缩:自动把数据压缩存放,非用户交互,查看时自动解压缩
btrfs文件系统的创建:
mkfs.btrfs常用参数:
-L 'LABEL' #设定文件系统卷标
-d <type>: raid0, raid1, raid5, raid6, raid10, single#指明数据存储时的类型
-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup #语言数据存储机制
-O <feature>#格式化时启动的特性
-O list-all: 列出支持的所有feature;
首先我们新添加几块硬盘用来做btree文件系统:
[root@localhost ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000f09eb 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 1026047 512000 83 Linux /dev/sda2 1026048 41943039 20458496 8e Linux LVM 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节
这里我们使用sdb和sdc两块磁盘直接格式化为btrfs文件系统:
[root@localhost ~]# mkfs.btrfs -L mybtrfs /dev/sdb /dev/sdc Btrfs v3.16.2 See http://btrfs.wiki.kernel.org for more information. Turning ON incompat feature 'extref': increased hardlink limit per file to 65536 adding device /dev/sdc id 2 fs created label mybtrfs on /dev/sdb#卷标创建在sdb上为“mybtrfs" nodesize 16384 leafsize 16384 sectorsize 4096 size 40.00GiB#空间总大小为40G
这样btrfs文件系统创建完成,是不是很简单?
既然创建已经完成,接下来我们查看一下btrfs具体信息:
btrfs filesystem show #btrfs文件系统的查看命令
[root@localhost ~]# btrfs filesystem show Label: 'mybtrfs' uuid: 1c74225e-a36b-46b2-8bde-bef50d0f89fb 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 v3.16.2
同样我们还可以使用blkid [/dev/device]来查看:
[root@localhost ~]# blkid /dev/sdb /dev/sdc#查看一下两块磁盘信息 /dev/sdb: LABEL="mybtrfs" UUID="1c74225e-a36b-46b2-8bde-bef50d0f89fb" UUID_SUB="87045ae0-ae5f-4e56-811c-1b246532047c" TYPE="btrfs" /dev/sdc: LABEL="mybtrfs" UUID="1c74225e-a36b-46b2-8bde-bef50d0f89fb" UUID_SUB="6c491f79-b13e-44c3-94e0-ad7e895b7613" TYPE="btrfs"
#包括卷标名LABLE,UUID,TYPE类型等信息,还有我们注意到没,两块磁盘的UUID是相同的,因为两块磁盘属于同一个btrfs系统,而子卷是不同的,btrfs可支持多块子卷
接下来我们就可以挂载btrfs文件系统了
[root@localhost ~]# mkdir /mydata#创建一个挂载点 [root@localhost ~]# mount -t btrfs /dev/sdb /mydata/#挂载btrfs文件系统 [root@localhost ~]# mount | tail -n 5 #mount查看最后一个挂载成功 mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel) debugfs on /sys/kernel/debug type debugfs (rw,relatime) /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota) /dev/sr0 on /media/cdrom type iso9660 (ro,relatime) /dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache)
注: mount挂载时因为是两块磁盘做为btrfs,所以只挂载两块磁盘的任意一块即可
btrfs filesystem:
show查看信息
show --all-devices:查看所有设备
[DeVICE] 查看指定设备的btrfs
df: 已挂载的btrfs文件系统的使用率
resize: 修改btrfs文件系统大小
[root@localhost ~]# btrfs filesystem show --all-devices Label: 'mybtrfs' uuid: 1c74225e-a36b-46b2-8bde-bef50d0f89fb Total devices 2 FS bytes used 896.00KiB devid 1 size 20.00GiB used 2.03GiB path /dev/sdb devid 2 size 20.00GiB used 2.01GiB path /dev/sdc Btrfs v3.16.2 [root@localhost ~]# btrfs filesystem show /dev/sdc failed to open /dev/fd0: No such device or address Label: 'mybtrfs' uuid: 1c74225e-a36b-46b2-8bde-bef50d0f89fb Total devices 2 FS bytes used 896.00KiB devid 1 size 20.00GiB used 2.03GiB path /dev/sdb devid 2 size 20.00GiB used 2.01GiB path /dev/sdc
Btrfs v3.16.2 #因为属于同一个文件系统,所以查看一个就显示出全部
btrfs文件系统创建完成后我们进入目录创建文件测试是否成功:
[root@localhost ~]# cd /mydata/ [root@localhost mydata]# ls [root@localhost mydata]# touch a.txt [root@localhost mydata]# cp /etc/grub2.cfg ./ [root@localhost mydata]# ls #可以添加文件,btrfs正常使用 a.txt grub2.cfg
卸载我们可以使用umount [/dev/sd#] 即可卸载
我们在挂载文件系统时还可以用btrfs内置的透明压缩机制,用户无需参与即可完成:
mount -o compress={lzo|zlib} [DEVICE] [MOUNT_POINT]
支持lzo和zlib两种压缩算法
设置这个参数以后我们往btrfs文件系统存放数据时会自动通过lzo或者zlib压缩机制压缩后存放,即透明压缩
[root@localhost ~]# umount /dev/sdb [root@localhost ~]# mount -o compress=lzo /dev/sdb /mydata/ [root@localhost ~]# cp /etc/rc.d/init.d/functions /mydata/ [root@localhost ~]# cd /mydata/ [root@localhost mydata]# ll -h functions /etc/rc.d/init.d/functions -rw-r--r--. 1 root root 14K 1月 15 2015 /etc/rc.d/init.d/functions -rw-r--r--. 1 root root 14K 9月 3 15:21 functions
这里由于functions文件太小,所以我们看到大小并没有改变,大文件则可以看出压缩后的大小
btrfs还可以在线增加减少文件系统大小,则通过:
btrfs filesystem resize +大小 [MOUNT_POINT]
[root@localhost mydata]# btrfs filesystem resize -10G /mydata/ Resize '/mydata/' of '-10G'#这样原来的btrfs文件系统大小减少10G大小 [root@localhost mydata]# btrfs filesystem df /mydata#查看btrfs使用率 Data, RAID0: total=2.00GiB, used=776.00KiB Data, single: total=8.00MiB, used=0.00 System, RAID1: total=8.00MiB, used=16.00KiB System, single: total=4.00MiB, used=0.00 Metadata, RAID1: total=1.00GiB, used=112.00KiB Metadata, single: total=8.00MiB, used=0.00 GlobalReserve, single: total=16.00MiB, used=0.00 [root@localhost mydata]# df -lh 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 18G 4.2G 14G 24% / devtmpfs 481M 0 481M 0% /dev tmpfs 490M 72K 490M 1% /dev/shm tmpfs 490M 14M 477M 3% /run tmpfs 490M 0 490M 0% /sys/fs/cgroup /dev/sda1 497M 125M 373M 25% /boot /dev/sr0 7.1G 7.1G 0 100% /media/cdrom /dev/sdb 30G 1.1M 18G 1% /mydata#现在为30G
这样btrfs在线由原来的40G减少为30G大小,而我们前边cp和创建的文件是不会受到影响的,前提是有空余的空间存放数据
[root@localhost mydata]# ls a.txt functions grub2.cfg [root@localhost mydata]# cat grub2.cfg #文件照样可以查看 # # DO NOT EDIT THIS FILE # # It is automatically generated by grub2-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### set pager=1 if [ -s $prefix/grubenv ]; then load_env fi if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else
既然可以减少空间大小,那我们试着增加一下它的大小呢
[root@localhost mydata]# btrfs filesystem resize +10G /mydata/ Resize '/mydata/' of '+10G'#这里我们增加10G大小 [root@localhost mydata]# [root@localhost mydata]# btrfs filesystem show Label: 'mybtrfs' uuid: 1c74225e-a36b-46b2-8bde-bef50d0f89fb Total devices 2 FS bytes used 904.00KiB devid 1 size 20.00GiB used 2.03GiB path /dev/sdb devid 2 size 20.00GiB used 2.01GiB path /dev/sdc Btrfs v3.16.2 [root@localhost mydata]# ll -lh 总用量 20K -rw-r--r--. 1 root root 0 9月 3 15:00 a.txt -rw-r--r--. 1 root root 14K 9月 3 15:21 functions -rw-r--r--. 1 root root 4.0K 9月 3 15:00 grub2.cfg [root@localhost mydata]# df -lh /mydata/ 文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb 40G 1.1M 38G 1% /mydata#这样又为原来的40G
[root@localhost mydata]# btrfs filesystem resize max /mydata/ Resize '/mydata/' of 'max'#指定扩展为最大容量
btrfs支持在线增加减少已有容量大小,但是如果已加载磁盘容量不够时怎么办??
btrfs文件系统还支持直接添加磁盘设备到文件系统:
btrfs device add [DIVICE] [MOUNT_POINT]
这里我们还有一块预留磁盘sdd,我们看一下效果:
[root@localhost mydata]# btrfs device add /dev/sdd /mydata/#直接加载 [root@localhost mydata]# df -lh 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 18G 4.2G 14G 24% / devtmpfs 481M 0 481M 0% /dev tmpfs 490M 72K 490M 1% /dev/shm tmpfs 490M 14M 477M 3% /run tmpfs 490M 0 490M 0% /sys/fs/cgroup /dev/sda1 497M 125M 373M 25% /boot /dev/sr0 7.1G 7.1G 0 100% /media/cdrom /dev/sdb 60G 1.1M 56G 1% /mydata #我们看到加载后由原来的40G大小增加为60G大小
btrfs文件系统还支持数据文件均衡操作:(一般很少操作)
btrfs balance start [MOUNT_POINT]
pause:暂停
cancel:取消
resume:继续
status:状态
[root@localhost mydata]# btrfs balance start /mydata/ Done, had to relocate 6 out of 6 chunks#迁移出6个chunks [root@localhost mydata]# btrfs balance status /mydata/ No balance found on '/mydata/'
#状态信息由于文件很小,执行已经结束,查看只能在迁移过程中才能看到,大文件则可以。
创建子卷:
btrfs subvolume create [MOUNT_POINT]/[FILES]
[root@localhost mydata]# btrfs subvolume create 使用/mydata/logs#创建子卷 Create subvolume '/mydata/logs' [root@localhost mydata]# btrfs subvolume list /mydata/#列出子卷信息 ID 260 gen 52 top level 5 path logs
挂载子卷:
[root@localhost ~]# umount /mydata/#需要先卸载挂载点 [root@localhost ~]# mount -o subvol=logs /dev/sdb /mnt/#挂载子卷 [root@localhost ~]# ls /mnt/ #logs没有文件 [root@localhost ~]# cp /var/log/messages /mnt/#cp文件到子卷可以 [root@localhost ~]# ls /mnt/ messages
[root@localhost ~]# btrfs subvolume show /mnt/#查看子卷详细信息 /mnt Name: logs uuid: cb76840f-56df-db4e-8077-2faf03a8351a Parent uuid: - Creation time: 2015-09-03 16:37:54 Object ID: 260 Generation (Gen): 55 Gen at creation: 52 Parent: 5 Top Level: 5 Flags: - Snapshot(s):
删除子卷使用:btrfs subvolume delete /mydata/logs
下边还有创建子卷快照,不写具体操作了。。
[root@localhost ~]# btrfs subvolume snapshot /mydata/logs /mydata/logs_snapshot
我们的btrfs文件系统就介绍到这里,如哪里有问题还望各位大神指出,谢谢!
转载于:https://blog.51cto.com/zhaohongfei/1691126