VDO会按以下顺序对数据实施三个阶段的处理,以减少存储设备上的空间占用:
1.零块消除将过滤掉仅包含零(0)的数据块,且仅在元数据中记录这些块的信息。非零数据块隨即被传递到下一个处理阶段。该阶段将启用VDO设备中的精简配置功能。(整块为0的会被元数据记录下来,这个可以用水杯里面的水和沙子混合的例子来解释,使用滤纸(零块排除),把沙子(非零空间)给过滤出来,然后就是下一个阶段的处理重复数据删除:)
2.重复数据删除将去除冗余的数据块。在创建相同数据的多个副本时,VDO 会检测重复数据块并更新元数据,以便使用这些重复块来引用原始数据块,而不会创建冗余数据块。通用重复数据删除服务(UDS)内核模块将通过其维护的元数据来检查数据的冗余。该内核模块是作为VDO的一部分而提供的。
3.最后一个阶段是压缩。 kvdo 内核模块使用LZ4压缩对块进行压缩,并以4 KB块进行分组。
使用vdo删除重复数据
创建VDO卷(磁盘sdd大小5G,比例3:1)
1.安装vdo:yum install kmod-kvdo -y
2.创建vdo卷:
[root@localhost ~]# vdo create --name=vdo1 --device=/dev/sdd --vdoLogicalSize=15G
3.分析vdo1卷(deduplication重复删除数据 compression压缩)
[root@localhost ~]# vdo status --name=vdo1
[root@localhost ~]# vdo status --name=vdo1 | grep Deduplication
[root@localhost ~]# vdo status --name=vdo1 | grep Compression
这里看到 Deduplication(删除重复数据)和Compression(压缩存储)功能是激活状态的
4.给vdo1一个xfs文件系统
[root@localhost ~]# mkfs.xfs -K /dev/mapper/vdo1(-K选项可防止立即丢弃文件系统中文使用的块,从而使命令返回更快)
5.使用udevadm命令注册新设备节点
[root@localhost ~]# udevadm settle
6.创建挂载目录并挂载使用
[root@localhost ~]# mkdir /mnt/vdo1
[root@localhost ~]# mount /dev/mapper/vdo1 /mnt/vdo1/
7.使用vdostats命令查看卷的初始统计信息和状态
[root@localhost ~]# vdostats --human-readable
8.将一个文件复制到挂载点中,查看结果
[root@localhost ~]# cp /run/media/root/RHEL-8-0-0-BaseOS-x86_64/images/install.img /mnt/vdo1/
[root@localhost ~]# vdostats --human-readable
**9.在重新复制一遍,再次查看结果(在挂载目录下创建一个子目录,将复制的文件放在挂载目录下的一个子目录中)
[root@localhost ~]# cp /run/media/root/RHEL-8-0-0-BaseOS-x86_64/images/install.img /mnt/vdo1/1
[root@localhost ~]# vdostats --human-readable
这里能看到复制相同数据,并不会再次占用空间,这就是使用了VDO的删除重复数据功能
需要删除vdo卷时需要先取消挂载,在删除vdo卷:
[root@localhost ~]# umount /mnt/vdo1
[root@localhost ~]# vdo remove --name=vdo1
分层存储Stratis
是一个卷管理文件系统volume-managing filesystem(VMF)
Stratis是本地存储管理器,Stratis 有三个概念:blockdevs、池和文件系统。 Blockdevs 是组成池的块设备,例如磁盘或磁盘分区,优点:
- 管理快照和精简配置
- 根据需要自动增加文件系统的大小
- 维护文件系统
案例:通过分层存储创建文件系统,确保文件可以正常存放文件
1.安装Stratis:yum install stratisd stratis-cli
2.重启stratisd:systemctl restart stratisd
3.创建存储池
[root@localhost ~]# stratis pool create pool2 /dev/sdd
4.查看存储池
[root@localhost ~]# stratis pool list
5.给存储池创建文件系统
[root@localhost ~]# stratis filesystem create pool2 fs2
6.再次查看存储池
[root@localhost ~]# stratis fs list
7.创建挂载目录并挂载使用
[root@localhost ~]# mkdir /test/pool2
[root@localhost ~]# mount /stratis/pool2/fs2 /test/pool2/
8.将系统日志同步到当前存储池中
[root@localhost ~]# cp /var/log/* /test/pool2/
9.摧毁池,首先需要取消挂载,在摧毁文件系统,最后才能摧毁存储池
[root@localhost ~]# umount /test/pool2
[root@localhost ~]# stratis fs destroy pool2 fs2
[root@localhost ~]# stratis pool destroy pool2
可以看到取消挂载后,先摧毁文件系统查看存储池状态,新创建的fs2不在了,在执行摧毁存储池命令后,新创建的pool2存储池不在了。