Btrfs(通常念成ButterFS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入目前ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小
核心特性:
(1)多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”,“修改”;
(2)写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;(写时复制:就是在修改或者加入内容时,不在原文件中修改,而是复制一份到新空间进行操作,完成后文件名指向新的空间)
(3)数据及元数据校验码:checksum
(4)子卷:sub_volume
(5)快照:支持快照的快照;
(6)透明压缩:
(7)Btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。
btrfs文件系统在CentOS中没有,需要重新编译和更新内核,或者使用CentOS7进行操作:
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(特性);
挂载文件系统:
btrfs filesystem show [--mounted|--all-devices|<path>|<uuid>|<device>|<label>]
btrfs filesystem show :查看btrfs文件系统的信息,默认全部的btrfs信息还可以指定
上面的选项来进行
子命令还有df resize等
btrfs filesystem还有其他选项可以使用,如果想了解更多使用 man 8 btrfs filesystem
查看就可以了
btrfs 还有子命令:filesystem, device, balance, subvolume
btrfs device add /dev/sdd :增加一个设备到btrfs系统中
btrfs device delete /dev/sdd mydata/:移除设备
btrfs balance [...] :实现均衡操作的,就是你新加入一个硬盘,把以前的硬盘中的数据平分到新的设备中
btrfs subvolume [create|delete|list|...] :创建和管理子卷的
透明压缩机制:就是挂载后,在里面存放的文件都是压缩后的
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
下面以CentOS7为例,演示一下从头开始构建btrfs:
以下操作在VM虚拟机中的CentOS7中操作的,如使用的版本不同,仅供参考
1、首先加几个虚拟硬盘进来
在VM主页中点击“编辑此虚拟机”,然后在弹出的窗口中点击“添加”,
然后选择硬盘,后面根据提示做就行了,添加三块虚拟硬盘,大小为20G,
添加完成后,启动虚拟机就行了
2、然后创建btrfs
a、首先使用 fdisk -l 查看下硬盘是否正常加载,
/dev/sdb,/dev/sdc,/dev/sdd,这三个设备是我们新添加的硬盘,
/dev/sda这个是原有硬盘
b、然后使用 mkfs.btrfs 命令把/dev/sdb,/dev/sdc这两个设备创建成btrfs
这就算创建成功了,使用btrfs filesystem show 命令查看下
c、挂载
创建mydata/目录,并挂载,查看(因截图太大,就直接把信息复制上来了)
[root@localhost ~]# mount -t btrfs /dev/sdb mydata/
[root@localhost ~]# mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
...
/dev/sdb on /root/mydata type btrfs(rw,relatime,seclabel,space_cache)
看到上面的字段就可以看到,挂载成功了,进入mydata目录就可以在里面进行
操作了
d、调整文件系统的大小
先查看下
使用命令btrfs filesystem resize -10G mydata/ 给文件系统减少并查看
可以看到size变成30G了,说明操作成功了
也可以使用df -lh进行查看
扩大文件系统的操作和减少一样,
使用命令btrfs filesystem resize +5G mydata/ ,在这里就不演示了
e、增加设备到刚创建的btrfs中
使用命令btrfs device add /dev/sdd,并查看
要使用btrfs的均衡分配,需要先打开balance功能
使用btrfs balance start mydata/
btrfs balance还有其他子命令,如果使用到的话,
使用man btrfs-balance查看即可
移除设备,使用btrfs device delete /dev/sdd mydata/
可以看到移除成功了,重新加进来
指定元数据的存储格式, btrfs balance start -mconvert=raid5 mydata/
指定数据的存储格式, btrfs balance start -dconvert=raid5 mydata/
但是你要确定你的btrfs里有三块硬盘,要不然改不成raid5,会报错的,
f、创建子卷
使用btrfs subvolume create mydata/logs 创建一个叫logs的子卷
使用btrfs subvolume list mydata/ 查看btrfs中的所有子卷的列表信息
挂载子卷,如果挂载的是父卷,里面的子卷都会被挂载,
如果只想挂载子卷不挂载父卷,
首先把父卷卸载,然后使用mount -o subvol=logs /dev/sdb /mnt挂载子卷,
然后复制进去一个文件,检测下能否正常使用
能查看出来,证明可以正常访问
把子卷卸载,挂载父卷看是否能正常访问
能查看到,证明能正常访问
btrfs subvolume delete mydata/logs 删除子卷的命令
创建快照btrfs subvolume snapshot mydata/logs mydata/logs2