本章主要介绍虚拟化数据优化器。
- 什么是虚拟数据优化器VDO
- 创建VDO设备以节约硬盘空间
了解什么是VDO
VDO全称是Virtual Data Optimize(虚拟数据优化),主要是为了节省硬盘空间。
现在假设有两个文件file1和 file2,大小都是10G。file1和 file2中包含了8G的相同数据, 如下图中的灰色部分。这个相同数据在硬盘中存储了两份,所以这两个文件占用的硬盘空间是20G。
在没有VDO的情况下
如果采用了VDO,效果如下图所示。
在VDO存储数据
file1和 file2大小都是10G,两个文件中都有8G的相同数据。那么,这个相同数据在硬盘 中只存储一份,让filel和 file2共同使用。所以,最终在硬盘上占用的空间是12G,这样一个 20G大小的硬盘,完全可以存储大于20G的文件,主要看这些文件中到底有多少相同数据。
所以,VDO实现的效果是,多个文件中有相同数据,这个相同数据只存储一份,从而实现 节省硬盘空间的目的。
配置VDO
首先要安装VDO相关软件包(关于软件包的管理在后面章节中有详细讲解),步骤如下。
- 挂载光盘,命令如下。
[root@rhel03 ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@rhel03 ~]#
这里准备把光盘作为yum源。
- 编写repo文件,命令如下。
[root@rhel03 ~]# cat /etc/yum.repos.d/aa.repo
[aa]
name=aa
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
[bb]
name=bb
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
- 安装VDO,命令如下。
[root@rhel03 ~]# yum -y install vdo kmod-kvdo
正在更新 Subscription Management 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
aa 72 MB/s | 7.2 MB 00:00
bb 83 MB/s | 2.4 MB 00:00
上次元数据过期检查:0:00:01 前,执行于 2023年12月06日 星期三 11时12分57秒。
软件包 vdo-6.2.5.74-14.el8.x86_64 已安装。
软件包 kmod-kvdo-6.2.5.72-81.el8.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
[root@rhel03 ~]#
查看 VDO设备,命令如下。
[root@rhel03 ~]# vdo list
[root@rhel03 ~]#
没有任何输出,说明现在还没有任何VDO设备。
因为相同数据只存储一份,大大地节省了存储空间,所以本来20G的磁盘空间现在存储 30G、40G、50G的数据是完全有可能的。
下面创建一个名称为vdo1、底层设备为/dev/sdc的VDO设备,逻辑大小为50G,命令如下。(这里我给自己虚拟机添加一块50G的硬盘用作实验)
[root@rhel03 ~]# vdo create --name vdo1 --device /dev/sdb --vdoLogicalSize 50G
Creating VDO vdo1
The VDO volume can address 46 GB in 23 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
[root@rhel03 ~]#
上面提示的一堆信息不用管,最终能看到的是vdo1已经创建好了,可以通 过/dev/mapper/vdo1来使用
再次查看有多少VDO设备,命令如下。
[root@rhel03 ~]# vdo list
vdo1
[root@rhel03 ~]#
格式化这个VDO设备,命令如下。
[root@rhel03 ~]# 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@rhel03 ~]#
这里-K(大写)的意思类似于Windows中的快速格式化。
把这个 VDO设备挂载到/vdo1目录上,命令如下。
[root@rhel03 ~]# mkdir /vdo1
[root@rhel03 ~]# mount /dev/mapper/vdo1 /vdo1
[root@rhel03 ~]#
如果希望能永久挂载,需要写入/etc/fstab中,命令如下。
[root@rhel03 ~]# cat /etc/fstab | grep vdo
/dev/mapper/vdo1 /vdo1 xfs defaults,netdev 0 0
需要注意的是,这里一定要有_netdev选项,否则重启系统时,系统是启动不起来的。 查看vdo1的空间使用情况,命令如下。
[root@rhel03 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 50.0G 4.0G 46.0G 8% 99%
[root@rhel03 ~]#
这里自身就消耗了4G空间(Used那列),因为这里不存在文件,所以空间节省率为99% (Space saving%那列)
测试VDO
往 rhel03上传一个比较大的文件,这里上传的是一个windows7的镜像,命令如下。
[root@rhel03 ~]# du -sh cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso
1002M cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso
[root@rhel03 ~]#
这个文件的大小是1G。
下面开始第一次把windos.iso拷贝到/vdol中并命名为file1,命令如下。
[root@rhel03 ~]# cp cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso /vdo1/file1
[root@rhel03 ~]#
[root@rhel03 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 50.0G 5.0G 45.0G 10% 84%
[root@rhel03 ~]#
可以看到,现在消耗空间是5G。
下面开始第二次把windos.iso拷贝到/vdo1中并命名为file2,命令如下。
[root@rhel03 ~]# cp cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso /vdo1/file2
[root@rhel03 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 50.0G 5.0G 45.0G 10% 83%
[root@rhel03 ~]#
因为是从同一个文件拷贝的,所以file2的内容和filel的内容是完全相同的,这里磁盘使用量仍然是5G。
因为实际写入了两个1G的文件,本来应该消耗2G的空间,但是这两个文件是相同的,所以实际消耗还是1G的空间,节省了2-1=1G的空间。
下面开始第三次把windos.iso铂贝到/vdo1中并命名为file3,命令如下。
[root@rhel03 ~]# cp cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso /vdo1/file3
[root@rhel03 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 50.0G 5.0G 45.0G 10% 83%
[root@rhel03 ~]# du -sh /vdo1/
3.0G /vdo1/
[root@rhel03 ~]#
因为是从同一个文件拷贝的,所以 file1、file2、file3三个文件的内容是完全相同的,这里磁盘使用量仍然是5G。
因为实际写入了三个1G的文件,本来应该消耗3G的空间,但是这三个文件是相同的, 所以实际消耗还是1G的空间,节省了3-1=2G的空间。
要删除VDO设备,命令如下(删除设备之前要先取消挂载)
[root@rhel03 ~]# vdo remove -n vdo1
Removing VDO vdo1
Stopping VDO vdo1