btrfs及压缩工具

part1.btrfs文件系统介绍

      Btrfs(B-tree 文件系统,通常念成 Butter FS,Better FS或B-tree FS),一种支持写入时复制(COW)的文件系统,运行在 Linux 操作系统上,采用 GPL 授权。Oracle 于 2007 年对外宣布这项计划,并发布源代码,2014 年 8 月发布稳定版。目标是取代 Linux 当时主流的 ext3 文件系统,摆脱 ext3 的一些限制,特別是单文件大小,文件系统总大小和文件校验,并加入 ext3 不支持的一些功能,比如可写快照(writable snapshots)、快照的快照(snapshots of snapshots)、内建磁盘阵列(RAID),以及子卷(subvolumes)。Btrfs 也宣称专注于容错、修复及易于管理。

可以这样理解,btrfs文件系统本来是打算替换掉ext3,4文件系统的,但是它本身是由oracle研发的,所以呢,redhat不乐意,就引用了unix开源给linux的xfs文件系统,来抗衡oralce对linux的侵入。

核心特性:

多物理卷支持,可以同时将sda,sdb等硬盘格式化为文件系统,支持raid,以及联机“添加”“移除”“修改”;

写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;数据及元数校验码checksum,子卷:sub_volume;快照:支持快照的快照,透明压缩。

文件系统的创建

mkfs.btrfs

-L 'LABEL' 指明文件系统的LABEL

-d  <type>:raid0 raid1 raid5,raid10 single 指定文件系统的级别

-m  <profile>raid0 raid1 raid5,raid10 single dup

-O  <feature>  格式化时就需要指明的特性

-O list-all 列出支持的所有feature

属性查看

btrfs filesystem show

btrfs  --help可以查看btrfs的帮助

挂载文件系统

mount -t btrfs /dev/sdb  MOUNT_POINT

指定任何一个设备即可,再指明挂载点

透明压缩机制

mount -o  compress -{lzo|zlib} DEVICE MOUNT_POINT

查看btrfs诸多选项

[root@ad1 ~]# mkfs.btrfs -O list-all


查看btrfs的帮助

[root@ad1 ~]# man btrfs-filesystem


part2.创建btrfs文件系统

创建btrfs文件系统,指明卷标为mydata,使用db,dc,dd三块磁盘

[root@ad1 ~]# mkfs.btrfs -L mydata /dev/sdb /dev/sdc /dev/sdd


显示B-Tree文件系统

属性查看

[root@ad1 ~]# btrfs filesystem show /dev/sdb


blkid  device  也可以用来查看设备的详细信息的

[root@ad1 ~]# blkid /dev/sdb /dev/sdc /dev/sdd


创建目录并挂载

[root@ad1 ~]# mkdir /mydata
[root@ad1 ~]# mount -t btrfs /dev/sdb /mydata
[root@ad1 ~]# mount
/dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache,subvolid=5,subvol=/)


将数据压缩之后进行存放,这种行为对用户来讲是透明的,所以用户无法感知

[root@ad1 ~]# mount -o compress=lzo /dev/sdb /mydata


将文件系统减少并查看

[root@ad1 ~]# btrfs filesystem resize -10G  /mydata
[root@ad1 ~]# btrfs filesystem df /mydata


给文件系统扩展一个设备,并查看

[root@ad1 ~]# btrfs device add /dev/sde /mydata
[root@ad1 ~]# btrfs filesystem show /mydata


如何将原先盘的数据均衡到新加设备上

开始数据均衡

[root@ad1 ~]# btrfs balance start  /mydata


移除sde硬盘,并查看

[root@ad1 ~]# btrfs device  delete /dev/sde /mydata
[root@ad1 ~]# btrfs filesystem show /mydata


修改数据的raid级别

[root@ad1 ~]# btrfs balance start -mconvert=raid5 /mydata


part3.btrfs文件系统还支持子卷

创建子卷

[root@ad1 mydata]# btrfs subvolume create /mydata/logs
[root@ad1 mydata]# btrfs subvolume create /mydata/cache


查看子卷

[root@ad1 mydata]# btrfs subvolume list /mydata
ID 264 gen 66 top level 5 path logs
ID 265 gen 67 top level 5 path cache


挂载卷时,如果挂载的是顶级卷,那么所有的卷都会自动挂载

[root@ad1 ~]# umount /mydata                       ##卸载文件系统
[root@ad1 ~]# mount -o subvol=logs /dev/sdb /mnt   ##挂载子卷


显示某个子卷文件系统的详细信息

[root@ad1 ~]# btrfs subvolume show /mnt
/mnt
        Name:                   logs
        UUID:                   1fe8d9d3-0033-0941-a14a-18036ea187fe
        Parent UUID:            -
        Received UUID:          -
        Creation time:          2018-02-27 20:17:19 -0500
        Subvolume ID:           264
        Generation:             66
        Gen at creation:        66
        Parent ID:              5
        Top level ID:           5
        Flags:                  -
        Snapshot(s):


拷贝文件到/mnt下,然后卸载子卷,挂载btrfs文件系统至/mydata,查看数据是否存在

[root@ad1 ~]# cp /var/log/messages  /mnt
[root@ad1 ~]# umount /mnt
[root@ad1 ~]# mount /dev/sdb /mydata
[root@ad1 ~]# ls /mydata/logs
messages


可以看到,btrfs文件系统中存在了此数据

我们还可以使用卷ID的形式挂载子卷

[root@ad1 ~]# mount /dev/sdb /mydata
[root@ad1 ~]# btrfs subvolume list /mydata
ID 264 gen 69 top level 5 path logs
ID 265 gen 67 top level 5 path cache
[root@ad1 ~]# mount -o subvolid=265 /dev/sdb /mnt   ##卷ID形式挂载子卷
[root@ad1 ~]# cd /mnt


子卷的删除,并查看

[root@ad1 ~]# btrfs subvolume delete /mydata/logs
Delete subvolume (no-commit): '/mydata/logs'
[root@ad1 ~]#  btrfs subvolume list /mydata
ID 265 gen 67 top level 5 path cache