虚构数据优化器(VDO)是一种块虚拟化技术,可提供通明的数据反复删除性能。通过打消冗余的数据块,VDO 能够大大减少理论应用的磁盘容量。
VDO 由两个内核模块和两个命令组成:
由上面两个内核模块组成:
kvdo – 该模块加载到设施管理器层,提供用于反复数据删除的块存储卷。
uds – 该模块负责与 VDO 磁盘上的通用的反复数据删除索引进行通信。
包含两个命令行工具:
vdo – 用于创立,删除,启动和进行 VDO 卷,以及执行其余配置操作。
vdostats – 用于报告 VDO 卷的各个方面,包含无效的缩小和物理卷的利用率。
零碎环境
Centos8
装置 VDO
上面命令装置 vdo 和相干依赖,装置实现之后重启零碎:
[root@localhost ~]# yum -y install vdo
[root@localhost ~]# reboot
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
创立一个 VDO 设施
确保有一个空余磁盘或分区可供 VDO 应用。只管能够在 LVM 逻辑卷下面创立 VDO 卷,然而从新疏导零碎时会呈现疏导程序问题。所以再裸盘下面创立 vdo 卷之后在它之上创立 LVM 逻辑卷。
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
上面应用一块 20GB 的磁盘,/dev/sda 做 vdo 卷
上面创立 vdo 卷:
[root@localhost ~]# vdo create –name=vdolvm –device /dev/sda –vdoLogicalSize 60G –writePolicy async
Creating VDO vdolvm
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 vdolvm
Starting compression on VDO vdolvm
VDO instance 0 volume is ready at /dev/mapper/vdolvm
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
上面合成一下命令,看看所应用的选项:
–device – 指定在哪个硬盘上创立 vdo 卷
–vdoLogicalSize – 这里咱们指定了容量大小为 60G,比咱们理论磁盘 20G 大了许多。假如咱们将从反复数据删除中至多失去 3:1 的缩小,对于大多数的数据,这是相当激进的,但如果你的数据没有很多反复的,那么比率应该是不同的。日志文件和其余纯文本文件通常能够很好地进行反复数据删除,可能会失去 10:1 甚至更高的反复数据删除率。然而二进制文件,如视频、音频或压缩包,将远远低于 3:1,甚至在某些状况下 1:1。这种状况下不倡议应用 vdo 卷。
–writePolicy – vdo 有三种写策略:sync: 只有在数据写入物理设施后,才会确认对 VDO 卷的写入。async: 在数据写入缓存后被确认。如果在设施故障或掉电之前没有刷新缓存,可能会导致数据失落。auto: 在这种默认模式下,VDO 将查看存储设备并确定它是否反对刷新。如果是这样,VDO 将应用异步模式。如果没有,它将应用同步模式。
查看新建 VDO 卷相干的信息
正如咱们在上一步的输入中看到的,VDO 创立了一个名为 /dev/mapper/vdolvm 的新 dm 设施。当咱们创立 lvm 卷组时,这就是咱们将要应用的设施。
[root@localhost ~]# ll /dev/mapper/vdolvm
lrwxrwxrwx 1 root root 7 Mar 4 13:31 /dev/mapper/vdolvm -> ../dm-2
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
让咱们看看应用 vdostats 能够取得无关 vdo 卷的什么样的信息:
[root@localhost ~]# vdostats –hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdolvm 20.0G 4.0G 16.0G 20% N/A
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
因为咱们尚未将任何数据写入该卷,因而 Space saving% 字段为 N /A。稍后咱们将写一些数据时,在此处看到更多有用的信息。
能够看到上图中,咱们还没有写任何数据,然而曾经有 4GB,20%的空间正在应用中了!这是因为“通用反复数据删除索引”已被写入磁盘。这基本上是一个数据库,用于记录 slab 指纹及其地位。这就是使反复数据删除成为可能的起因。
将 VDO 卷作为一般磁盘设施进行设置
当初咱们曾经创立了 VDO 设施,咱们能够对其进行分区并格式化,或者在这个 vod 卷下面创立 lvm 逻辑卷。上面咱们创立逻辑卷:
创立物理卷
[root@localhost ~]# pvcreate /dev/mapper/vdolvm
Physical volume “/dev/mapper/vdolvm” successfully created.
创立卷组 vdo_vg
[root@localhost ~]# vgcreate vdo_vg /dev/mapper/vdolvm
Volume group “vdo_vg” successfully created
查看 vdo_vg 卷组的信息
[root@localhost ~]# vgdisplay vdo_vg
— Volume group —
VG Name vdo_vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <60.00 GiB
PE Size 4.00 MiB
Total PE 15359
Alloc PE / Size 0 / 0
Free PE / Size 15359 / <60.00 GiB
VG UUID qfPiH6-eMCU-Z6kr-eeCu-jd0J-8lmf-49daZX
从下面能够看到,lvm 认为咱们的根底磁盘为 120GB,只管咱们晓得它只有 40GB。因为 LVM 不晓得 VDO 后端磁盘的大小。
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
当初,让咱们创立几个逻辑卷吧:
[root@localhost ~]# lvcreate -n vdo_lv01 -L 15G vdo_vg
[root@localhost ~]# lvcreate -L 15G -n vdo_lv02 vdo_vg
[root@localhost ~]# lvcreate -L 15G -n vdo_lv03 vdo_vg
查看创立好的逻辑卷
[root@localhost ~]# lvs -o +devices
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
创立挂载点并挂载文件系统
通常,创立文件系统后,它将在设施上运行 Trim 操作。应用 VDO 时,这不是现实的抉择,因为磁盘容量是按需分配的。因而,咱们要通知 mkfs 在文件系统创立过程中不要抛弃块。对于 XFS,请应用 - K 选项。对于 EXT4,请应用 -E nodiscard。上面应用了一个 for 循环,将三个逻辑卷格式化为 XFS 文件系统:
[root@localhost ~]# for i in seq 1 3
; do mkfs.xfs -K /dev/vdo_vg/vdo_lv0$i ; done
meta-data=/dev/vdo_vg/vdo_lv01 isize=512 agcount=4, agsize=983040 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=3932160, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
meta-data=/dev/vdo_vg/vdo_lv02 isize=512 agcount=4, agsize=983040 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=3932160, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
meta-data=/dev/vdo_vg/vdo_lv03 isize=512 agcount=4, agsize=983040 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=3932160, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
当咱们将新文件系统挂载到挂载点时,咱们要通知 XFS 放弃块,因为这将大大放慢文件删除的速度。
[root@localhost ~]# mkdir -p /data/{01..03}
[root@localhost ~]# for i in seq 1 3
; do mount -o discard /dev/vdo_vg/vdo_lv0$i /data/0$i; done
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
当初,咱们向设施写入了大量数据,咱们能够再次查看 VDO 卷以查看状况是否已更改。
[root@localhost ~]# vdostats –hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdolvm 20.0G 4.0G 16.0G 20% 86%
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
设置为开机启动
上面将三个逻辑卷设置为开机启动,须要在 fstab 文件中增加 x -systemd.device-timeout= 0 和 x -systemd.requires=vdo.service。
应用 blkid 查看这三个逻辑卷的 UUID。
Centos8 中装置并配置 VDO 来优化存储空间 Centos8 中装置并配置 VDO 来优化存储空间
应用下面获取到的 UUID,增加在 /etc/fstab 文件中:
[root@localhost systemd]# vim /etc/fstab
UUID=”bd2c1c61-4656-4065-b5a0-3ca53ef0f949″ /data/01 xfs defaults,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
UUID=”1e53579b-f1da-4f77-80e6-d61a40515525″ /data/02 xfs defaults,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
UUID=”d41bf7e2-bf75-4db7-b323-a923375f6a6e” /data/03 xfs defaults,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
总结
虚构数据优化器(VDO)是一种块虚拟化技术,可提供通明的数据反复删除性能。通过打消冗余的数据块,VDO 能够大大减少理论应用的磁盘容量。