RH134 使用VDO压缩存储和删除重复数据
红帽企业Linux 8包含虛拟数据优化器(VDO)驱动程序,可以优化块设备上数据的空间占用。VDO是一个Linux设备映射器驱动程序,它可以减少块设备上的磁盘空间使用,同时最大限度减少数据重复,从而节省磁盘空间,甚至提高数据吞吐量。VDO 包括两个内核模块: kvdo 模块用于以透明的方式控制数据压缩,uds 则可用于重复数据删除。
VDO层位于现有块存储设备(如 RAID设备或本地磁盘)的顶部。这些块设备也可以是加密设备。存储层(如LVM 逻辑卷和文件系统)位于VDO设备之上。下图显示了在一个由使用优化存储设备的KVM虚拟机构成的基础架构中,VDO所处的位置。
一、VDO的主要应用场景
VDO (Virtual Data Optimizer)是一款存储软件,可以作为本地文件系统、iSCSI或Ceph存储下的附加存储层使用。VDO以重复数据删除、压缩和精简配置的形式为Linux提供内联数据缩减,提高空间利用率。VDO的核心功能:
- 支持本地和远程存储
- 重复数据删除
- 压缩
- 自动精简配置
为了节省磁盘空间VDO主要应用在:
- 虚拟机存储
- BLOB(binary large object)二进制大对象块存储后端
BLOB:存储用于流式传输和存储文档,视频,图片,备份和其他非结构化文本或二进制数据。
二、安装使用测试
安装使用
1[root@serverb ~]# yum install vdo kmod-kvdo
2[root@serverb ~]# vdo create --name=vdo1 --device=/dev/vdb --vdoLogicalSize=50G
3Creating VDO vdo1
4 The VDO volume can address 2 GB in 1 data slab.
5 It can grow to address at most 16 TB of physical storage in 8192 slabs.
6 If a larger maximum size might be needed, use bigger slabs.
7Starting VDO vdo1
8Starting compression on VDO vdo1
9VDO instance 0 volume is ready at /dev/mapper/vdo1
10[root@serverb ~]# vdo status --name=vdo1
11……
12 Logical size: 50G //逻辑空间大小
13 Logical threads: 1
14 Max discard size: 4K
15 Physical size: 5G //实际盘大小
查看确认已启用了复制去重和压缩:
1[ root@serverb -]# vdo status - -name=vdo1|grep Deduplication
2Deduplication: enabled
3[root@servera ~]# vdo status --name=vdo1| grep Compression
4Compression: enabled
挂载使用
此时通过vdostats查看,会发现卷中有3 GB的空间已被占用,因为VDO卷在创建时会为自己保留3-4 GB。
1[root@serverb ~]# vdostats --human-readable
2Device Size Used Available Use% Space saving%
3/dev/mapper/vdo1 5.0G 3.0G 2.0G 60% N/A
4[root@serverb ~]# mkfs.xfs /dev/mapper/vdo1
5[root@serverb ~]# mount /dev/mapper/vdo1 /mnt/
6[root@serverb ~]# df -h
7Filesystem Size Used Avail Use% Mounted on
8devtmpfs 887M 0 887M 0% /dev
9tmpfs 914M 0 914M 0% /dev/shm
10tmpfs 914M 103M 812M 12% /run
11tmpfs 914M 0 914M 0% /sys/fs/cgroup
12/dev/vda3 9.9G 1.7G 8.2G 18% /
13/dev/vda2 100M 6.8M 94M 7% /boot/efi
14tmpfs 183M 0 183M 0% /run/user/0
15/dev/mapper/vdo1 50G 390M 50G 1% /mnt
空间使用验证
1[root@serverb ~]# cp /boot/initramfs-4.18.0-193.el8.x86_64.img /mnt/a2.img
2[root@serverb ~]# cp /boot/initramfs-4.18.0-193.el8.x86_64.img /mnt/a3.img
3[root@serverb ~]# cp /boot/initramfs-4.18.0-193.el8.x86_64.img /mnt/a4.img
4[root@serverb ~]# cp /boot/initramfs-4.18.0-193.el8.x86_64.img /mnt/a5.img
当我们不停的向对应的分区里复制同样的内容时,再去查看最后对应的saving值,会发现该在不停的增大。
1[root@serverb ~]# vdostats --human-readable
2Device Size Used Available Use% Space saving%
3/dev/mapper/vdo1 5.0G 3.1G 1.9G 61% 37%
开机自启动挂载的地方,需要在/etc/fstab中使用x-sys temd. requires=vdo. service挂载选项。
三、最后
在测试的时候发现一个问题,在清除对应挂载点后的数据后,对应的use空间会释放,后面对应的saving值并不会变化:
1[root@serverb ~]# vdostats --human-readable
2Device Size Used Available Use% Space saving%
3/dev/mapper/vdo2 5.0G 3.0G 2.0G 60% 77%
4/dev/mapper/vdo1 5.0G 3.0G 2.0G 60% 81%
只有新的不重复的数据写入时,对应的saving值才会下降。所以该功能比较适用于类似于百度网盘一类的产品功能上。这样可以更好的利用磁盘空间。VDO按以下顺序将三个阶段应用于数据,减少存储设备上的占用空间:
- 零区块的排除:在初始化阶段,整块为0的会被元数据记录下来,这个可以用水杯里面的水和沙子混合的例子来解释,使用滤纸(零块排除),把沙子(非零空间)给过滤出来,然后就是下一个阶段的处理;
- 重复数据删除:在第二阶段,输入的数据会判断是不是冗余数据(在写入之前就判断),这个部分的数据通过UDS内核模块来判断(U niversal D eduplication S ervice),被判断为重复数据的部分不会被写入,然后对元数据进行更新,直接指向原始已经存储的数据块即可
- 压缩:一旦消零和重删完成,LZ4压缩会对每个单独的数据块进行处理,然后压缩好的数据块会以固定大小4KB的数据块存储在介质上,由于一个物理块可以包含很多的压缩块,这个也可以加速读取的性能
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/rhel8-vdo/6556.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.