虚拟数据优化器是一种数据块虚拟化技术,可以提供透明的重复数据消除。通过消除冗余数据块,VDO可以大大减少实际使用的磁盘容量。
VDO由两个内核模块和两个命令组成:
它由以下两个内核模块组成:
kvdo-该模块加载到设备管理器层,并为重复数据消除提供数据块存储卷。
uds-该模块负责与VDO磁盘上的通用重复数据消除索引进行通信。
包括两个命令行工具:
vdo-用于创建、删除、启动和停止Vdo卷,以及执行其他配置操作。
vdostats-用于报告VDO卷的所有方面,包括物理卷的有效减少和利用。
系统环境
Centos8
安装VDO
以下命令安装vdo和相关依赖项,并在安装完成后重新启动系统:
# yum -y安装vdo
#重新启动
创建一个VDO设备
确保还有一个空磁盘或分区可供VDO使用。虽然可以在LVM逻辑卷上创建VDO卷,但系统重新启动时会出现引导顺序问题。因此,在原始磁盘上创建一个vdo卷,然后在其上创建一个LVM逻辑卷。
以下使用20GB磁盘,/dev/sda作为vdo卷
创建了以下vdo卷:
# vdo create-name = vdolvm-device/dev/sda-vdocalsize 60G-write policy异步
创建VDO虚拟桌面
VDO卷可以在8个数据片中寻址16 GB,每个2 GB。
它可以增长到在8192个板中最多处理16 TB的物理存储。
如果可能需要更大的最大尺寸,使用更大的板材。
启动VDO vdolvm
在VDO vdolvm上开始压缩
VDO实例卷已在/dev/mapper/vdolvm准备就绪
让我们分解命令,看看使用的选项:
-device-指定创建vdo卷的硬盘
-vdocalsize-这里我们指定了60G的容量大小,这比我们实际的磁盘20G要大得多。假设我们将从重复数据消除中获得至少3:1的缩减,这对于大多数数据来说是相当保守的,但是如果您的数据没有许多重复数据,那么比率应该会有所不同。日志文件和其他纯文本文件通常经过良好的重复数据消除,重复数据消除率可能达到10:1甚至更高。但是二进制文件,如视频、音频或压缩包,将比3:1低得多,在某些情况下甚至是1:1。在这种情况下,不建议使用vdo卷。
- writePolicy -vdo有三种写入策略:
只有在数据写入物理设备后,才会确认写入VDO卷。
在数据写入缓存后确认。如果在设备故障或断电之前没有刷新缓存,可能会发生数据丢失。
在此默认模式下,VDO会检查存储设备并确定其是否支持刷新。如果是这样,VDO将使用异步模式。如果没有,它将使用同步模式。
查看新创建的VDO卷的信息
正如我们在上一步的输出中看到的,VDO创建了一个名为/dev/mapper/vdolvm的新dm设备。当我们创建lvm卷组时,这是我们将使用的设备。
# ll /dev/mapper/vdolvm
lrwxrwxrwx 1根7 3月4日13:31/dev/mapper/vdolvm-->../dm-2
让我们看看使用vdostats可以获得哪些有关vdo卷的信息:
# vdostats - hu
设备大小已用可用使用%节省空间%
/dev/mapper/vdolvm 20.0克4.0克16.0克20%不适用
由于我们没有向该卷写入任何数据,因此该字段为。当我们稍后写一些数据时,我们会在这里看到更多有用的信息。
从上图可以看出,我们还没有写任何数据,但是4GB,20% 空已经在用了!这是因为通用重复数据消除索引已写入磁盘。这基本上是一个记录石板指纹及其位置的数据库。这就是重复数据消除成为可能的原因。
将VDO卷设置为普通磁盘设备
现在我们已经创建了VDO设备,我们可以对它进行分区和格式化,或者在这个vod卷上创建lvm逻辑卷。让我们创建一个逻辑卷:
#创建物理卷
# pvcreate /dev/mapper/vdolvm
物理卷/dev/mapper/vdolvm”已成功创建。
#创建卷组vdo_vg
# vgcreate vdo _ VG/dev/mapper/vdolvm
卷组“vdo_vg”已成功创建
#查看vdo_vg卷组的信息
# vgdisplay vdo_vg
-卷组-
VG名称vdo_vg
系统标识
格式化lvm2
元数据领域1
元数据序列1
VG访问读/写
VG状态可调整大小
最大低压
电流低压
打开低压
最大光伏
Cur PV 1
第一幕
VG尺寸
聚乙烯尺寸4.00 MiB
总PE 15359
允许的PE /尺寸/
免费PE /尺寸15359 /
VG UUID qfPiH6-eMCU-Z6kr-eeCu-jd0J-8lmf-49 dazx
从上面可以看出,lvm认为我们的基本磁盘是120GB,虽然我们知道它只有40GB。LVM不知道VDO后端磁盘的大小。
现在,让我们创建几个逻辑卷:
# lvcreate -n vdo_lv01 -L 15G vdo_vg
# lvcreate -L 15G -n vdo_lv02 vdo_vg
# lvcreate -L 15G -n vdo_lv03 vdo_vg
#检查创建的逻辑卷
# LVS-o+器件
创建装载点和装载文件系统
通常,创建文件系统后,它将在设备上运行操作。使用VDO时,这不是一个理想的选择,因为磁盘容量是按需分配的。因此,我们应该告诉mkfs不要在文件系统创建期间丢弃数据块。对XFS使用该选项。对于EXT4,使用。下面使用for循环将三个逻辑卷格式化为XFS文件系统:
#对于“seq 1 3”中的I;do mkfs . xfs-K/dev/vdo _ VG/vdo _ lv0 $ I;完成的
元数据=/dev/vdo _ VG/vdo _ lv01 isize = 512 ag count = 4,agsize=983040 blks
= sectsz=4096 attr=2,projid32bit=1
= crc=1 finobt=1,稀疏=1,rmapbt=
= reflink=1
data = bsize=4096块=3932160,imaxpct=25
= sunit= swidth= blks
命名=版本2 bsize=4096 ascii-ci=,ftype=1
log =内部日志bsize=4096块=2560,版本=2
= sectsz=4096 sunit=1 blks,lazy-count=1
实时=无extsz=4096块=,rtextents=
元数据=/dev/vdo _ VG/vdo _ lv02 isize = 512 ag count = 4,agsize=983040 blks
= sectsz=4096 attr=2,projid32bit=1
= crc=1 finobt=1,稀疏=1,rmapbt=
= reflink=1
data = bsize=4096块=3932160,imaxpct=25
= sunit= swidth= blks
命名=版本2 bsize=4096 ascii-ci=,ftype=1
log =内部日志bsize=4096块=2560,版本=2
= sectsz=4096 sunit=1 blks,lazy-count=1
实时=无extsz=4096块=,rtextents=
元数据=/dev/vdo _ VG/vdo _ lv03 isize = 512 ag count = 4,agsize=983040 blks
= sectsz=4096 attr=2,projid32bit=1
= crc=1 finobt=1,稀疏=1,rmapbt=
= reflink=1
data = bsize=4096块=3932160,imaxpct=25
= sunit= swidth= blks
命名=版本2 bsize=4096 ascii-ci=,ftype=1
log =内部日志bsize=4096块=2560,版本=2
= sectsz=4096 sunit=1 blks,lazy-count=1
实时=无extsz=4096块=,rtextents=
当我们将新文件系统装载到装载点时,我们将告诉XFS放弃该数据块,因为这将大大加快文件删除速度。
# mkdir -p /data/{01..03}
#对于“seq 1 3”中的I;do mount -o丢弃/dev/vdo _ VG/vdo _ lv0 $ I/data/$ I;完成的
现在,我们已经向设备写入了少量数据,我们可以再次检查VDO卷,看看情况是否发生了变化。
# vdostats - hu
设备大小已用可用使用%节省空间%
/dev/mapper/vdolvm 20.0g 4.0G 16.0g 20% 86%
设置为启动
以下三个逻辑卷设置为引导,需要添加到fstab文件中。
用于查看这三个逻辑卷的UUID。
使用上面获得的UUID,并将其添加到/etc/fstab文件中:
# vim /etc/fstab
UUID =“bd2c 1c 61-4656-4065-b5a 0-3c a53 ef 0 f 949”/data/01 xfs默认值,x-systemd.device-timeout=,x-systemd.requires=vdo.service
UUID = " 1e 53579 b-f1da-4f 77-80e 6-d61a 40515525 "/数据/02 xfs默认值,x-systemd.device-timeout=,x-systemd.requires=vdo.service
UUID = " d41 BF 7e 2-BF 75-4d B7-b323-a 923375 F6 e "/数据/03 xfs默认值,x-systemd.device-timeout=,x-systemd.requires=vdo.service
结束