VDO 压缩存储 | 删除重复数据

发布于:2022-11-28 ⋅ 阅读:(308) ⋅ 点赞:(0)

在这里插入图片描述

个人主页:💗wei_shuo的个人主页

🏀 Hello World !🏀


VDO 压缩存储和删除重复数据

VDO(Virtual Data Optimize 虚拟数据优化程序),可以优化块设备上数据的空间占用。VDO 是一个Linux 设备映射器驱动程序,它可以减少块设备上的磁盘空间使用,同时最大限度减少数据重复,从而节省磁盘空间,甚至提高数据吞吐量。VDO 包括两个内核模块:kvdo 模块用于以透明的方式控制数据压缩,uds 则可用于重复数据删除。

VDO 会按以下顺序对数据实施三个阶段的处理,以减少存储设备上的空间占用:

  • 零区块的排除:

在初始化阶段,整块为 0 的会被元数据记录下来,这个可以用水杯里面的水和沙子混合的例子来解

释,使用滤纸(零块排除),把沙子(非零空间)给过滤出来,然后就是下一个阶段的处理。该阶段将启

用 VDO 设备中的精简配置功能。

  • 重复数据删除:

在创建相同数据的多个副本时,输入的数据会判断是不是冗余数据(在写入之前就判断),这个部分

的数据通过 UDS 内核模块来判断(U niversal D eduplication S ervice),被判断为重复数据的部分不

会被写入,然后对元数据进行更新,直接指向原始已经存储的数据块即可。

  • 压缩:

一旦消零和重删完成,kvdo 内核模块使用 LZ4 对每个单独的数据块进行处理,然后压缩好的数据块

会以固定大小 4KB 的数据存储在介质上加速读取的性能。

实施虚拟数据优化器

利用 VDO 创建的逻辑设备被称为 VDO 卷。VDO 卷与磁盘分区类似,可以将这些卷格式化为所需的文

件系统类型,并像常规文件系统那样进行挂载。

要创建 VDO 卷,请指定块设备以及 VDO 向用户显示的逻辑设备的名称。可以指定 VDO 卷的逻辑大小


添加一块硬盘

[root@rhel82 dev]# fdisk  -l
Disk /dev/nvme0n1:30 GiB,32212254720 字节,62914560 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x85e747f1

设备           启动     起点     末尾     扇区 大小 Id 类型
/dev/nvme0n1p1          2048     6143     4096   2M 83 Linux
/dev/nvme0n1p2 *        6144  2103295  2097152   1G 83 Linux
/dev/nvme0n1p3       2103296 10491903  8388608   4G 82 Linux swap / Solaris
/dev/nvme0n1p4      10491904 62914559 52422656  25G  5 扩展
/dev/nvme0n1p5      10493952 62914559 52420608  25G 83 Linux


Disk /dev/nvme0n2:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

安装 VDO

安装 VDO 和 kmod-vdo 软件包,以便在系统中启用 VDO

[root@rhel82 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

[root@rhel82 ~]# yum -y install vdo kmod-kvdo

创建 VDO 卷

[root@rhel82 ~]# vdo create --name=vdo1 --device=/dev/nvme0n2 --vdoLogicalSize=50G
Creating VDO vdo1
      The VDO volume can address 16 GB in 8 data slabs, each 2 GB.
      It can grow to address at most 16 TB of physical storage in 8192 slabs.
      If a larger maximum size might be needed, use bigger slabs.
Starting VDO vdo1
Starting compression on VDO vdo1
VDO instance 0 volume is ready at /dev/mapper/vdo1

如果省略逻辑大小,刚生成的 VDO 卷将与物理设备的大小相同。

分析 vdo 卷

[root@rhel82 ~]# vdo status --name=vdo1

以 YAML 格式显示有关 VDO 系统的报告以及 VDO 卷的状态,属性

# vdo list        显示当前启动的 VOD 卷的列表
# vdo start/stop  启动和停止 VOD 卷

查看 vdo 卷上是否开启了压缩和删除重复数据功能

[root@rhel82 ~]# vdo status --name vdo1 | grep Deduplication
    Deduplication: enabled

格式化并挂载 vdo

[root@rhel82 ~]# ll /dev/mapper/
总用量 0
crw-------. 1 root root 10, 236 124 21:39 control
lrwxrwxrwx. 1 root root       7 124 21:39 vdo1 -> ../dm-0

# -K 选项可防止立即丢弃文件系统中未使用的块,从而使命令返回更快
[root@rhel82 ~]# mkfs.xfs -K /dev/mapper/vdo1
meta-data=/dev/mapper/vdo1       isize=512    agcount=4, agsize=3276800 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=13107200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=6400, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
#刷新存储设备
[root@rhel82 ~]# udevadm settle 

#创建挂载点并挂载
[root@rhel82 ~]# mkdir /opt/vdo1
[root@rhel82 ~]# mount /dev/mapper/vdo1 /opt/vdo1/
[root@rhel82 ~]# df -Th | grep vdo
/dev/mapper/vdo1 xfs        50G  390M   50G    1% /opt/vdo1

查看 vdo 卷的初始统计信息和状态及测试

[root@rhel82 ~]# vdostats --human-readable 
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         20.0G      4.0G     16.0G  20%           99%

复制一个大文件到 vdo1 目录下

# 生成一个大文件
[root@rhel82 ~]# dd if=/dev/zero of=/root/bigfile bs=100M count=5
记录了5+0 的读入
记录了5+0 的写出
524288000 bytes (524 MB, 500 MiB) copied, 0.679848 s, 771 MB/s

[root@rhel82 ~]# cp /root/bigfile /opt/vdo1/
[root@rhel82 ~]# cp /root/bigfile /opt/vdo1/bigfile.bak
[root@rhel82 boot]# cp /boot/initramfs-0-rescue-6faa2b9449024f3aae2659da675e2567.img /opt/vdo1/

再次查看

[root@rhel82 boot]# vdostats --human-readable 
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         20.0G      4.1G     15.9G  20%           94%

vdo 卷存储相同的文件并不会占用多余的空间

设置开机自动挂载

首先获取 vdo 卷的 uuid

[root@rhel82 ~]# lsblk --output=UUID /dev/mapper/vdo1
UUID
60c60042-24e2-4b34-a470-a37b3c0febb5

编译/etc/fstab 文件

[root@rhel82 ~]# vim /etc/fstab 
UUID=60c60042-24e2-4b34-a470-a37b3c0febb5 /opt/vdo1 xfs defaults,x-systemd.requires=vdo.service 0 0

# x-systemd.requires= vdo.service 挂载选项可延迟挂载文件系统,直到 systemd 在启动过程中启动 vdo.service 为止。若不使用此选项,将会导致计算机在下一次重启时引导到 emergency.target。

重启验证

[root@rhel82 ~]# df -h | grep vdo
/dev/mapper/vdo1   50G  1.5G   49G    3% /opt/vdo1

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到