Btrfs(一般念成ButterFS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入目前ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,容许在线调整文件系统大小node
核心特性:ide
(1)多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”,“修改”;ui
(2)写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;(写时复制:就是在修改或者加入内容时,不在原文件中修改,而是复制一份到新空间进行操做,完成后文件名指向新的空间)spa
(3)数据及元数据校验码:checksum3d
(4)子卷:sub_volume指针
(5)快照:支持快照的快照;htm
(6)透明压缩:blog
(7)Btrfs 还可以方便的管理多个物理设备,使得传统的卷管理软件变得多余。递归
btrfs文件系统在CentOS中没有,须要从新编译和更新内核,或者使用CentOS7进行操做:get
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中操做的,如使用的版本不一样,仅供参考
一、首先加几个虚拟硬盘进来
在VM主页中点击“编辑此虚拟机”,而后在弹出的窗口中点击“添加”,
而后选择硬盘,后面根据提示作就好了,添加三块虚拟硬盘,大小为20G,
添加完成后,启动虚拟机就好了
二、而后建立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