1.了解什么是VDO
VDO全称是Virtual Data Optimize(虚拟数据优化),主要是为了节省硬盘空间。现在假设有两个文件file1和 file2,大小都是10G。file1和 file2中包含了8G的相同数据,如下图中的灰色部分。这个相同数据在硬盘中存储了两份,所以这两个文件占用的硬盘空间是20G。
如果采用了VDO,效果如左图
file1和 file2大小都是10G,两个文件中都有8G的相同数据。那么,这个相同数据在硬盘中只存储一份,让filel和 file2共同使用。所以,最终在硬盘上占用的空间是12G,这样一个20G大小的硬盘,完全可以存储大于20G的文件,主要看这些文件中到底有多少相同数据。
所以,VDO实现的效果是,多个文件中有相同数据,这个相同数据只存储一份,从而实现节省硬盘空间的目的
2.配置VDO
首先要安装VDO相关软件包
挂载光盘
[root@jiayi ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
这里准备把光盘作为yum 源
编写repo文件
[root@jiayi ~]# cat /etc/yum.repos.d/jiayi.repo
[jiayi]
name=jiayi
baseurl=file:///AppStream
enabled=1
gpgcheck=0
[jia]
name=jia
baseurl=file:///BaseOS
enabled=1
gpgcheck=0
安装VDO(部分系统自带VDO)
[root@jiayi ~]# yum -y install vdo kmod-kvdo
正在更新 Subscription Management 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
jiayi 234 MB/s | 7.2 MB 00:00
jia 152 MB/s | 2.4 MB 00:00
上次元数据过期检查:0:00:01 前,执行于 2023年12月05日 星期二 10时52分29秒。
软件包 vdo-6.2.5.74-14.el8.x86_64 已安装。
软件包 kmod-kvdo-6.2.5.72-81.el8.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
查看 VDO设备
[root@jiayi ~]# vdo list
没有任何输出,说明现在还没有任何VDO设备
因为相同数据只存储一份,大大地节省了存储空间,所以本来20G的磁盘空间现在存储30G、40G、50G的数据是完全有可能的
下面创建一个名称为vdo1、底层设备为/dev/sdb的VDO设备,逻辑大小为50G,命令如下
[root@jiayi ~]# 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
上面提示的一堆信息不用管,最终能看到的是vdo1已经创建好了,可以通过/dev/mapper/vdo1来使用
再次查看有多少VDO设备
[root@jiayi ~]# vdo list
vdo1
格式化这个VDO设备
[root@jiayi ~]# 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
这里-K(大写)的意思类似于Windows中的快速格式化
把这个 VDO设备挂载到/vdo1目录上
[root@jiayi ~]# mkdir vdo1
[root@jiayi ~]# mount /dev/mapper/vdo1 vdo1/
如果希望能永久挂载,需要写入/etc/fstab中
[root@jiayi ~]# grep vdo /etc/fstab
/dev/mapper/vdo1 /vdo1 xfs defaults,_netdev 0 0
需要注意的是,这里一定要有_netdev选项,否则重启系统时,系统是启动不起来的。查看vdo1的空间使用情况
[root@jiayi ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 50.0G 4.0G 46.0G 8% 99%
这里自身就消耗了4G空间(Used那列),因为这里不存在文件,所以空间节省率为99%(Space saving%那列)
3.测试VDO
在该机上传两个较大的文件,用来接下来的练习,这里上传的是rhel-server-7.1-x86_64-dvd.iso、rhel-server-7.6-x86_64-dvd.iso的镜像一个大小为4.2G一个为3.7G
[root@jiayi ~]# ll -h /root/ | grep rhel
-rw-r--r--. 1 root root 3.7G 12月 5 11:10 rhel-server-7.1-x86_64-dvd.iso
-rw-r--r--. 1 root root 4.2G 12月 5 11:09 rhel-server-7.6-x86_64-dvd.iso
下面开始第一次把 rhel7.6.iso拷贝到/vdol中并命名为file1
[root@jiayi ~]# cp rhel-server-7.6-x86_64-dvd.iso vdo1/file1
[root@jiayi ~]#
[root@jiayi ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 50.0G 8.0G 42.0G 15% 5%
这里我用的是RHEL8,rhel-7.6的镜像可能有一些数据相同所以只消耗了4G空间
下面开始第二次把rhel7.6.iso拷贝到/vdo1中并命名为file2
[root@jiayi ~]# cp rhel-server-7.6-x86_64-dvd.iso vdo1/file2
[root@jiayi ~]#
[root@jiayi ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 50.0G 8.0G 42.0G 16% 52%
[root@jiayi ~]# ls vdo1/
file1 file2
因为是从同一个文件拷贝的,所以 file2的内容和filel的内容是完全相同的,这里磁盘使用量仍然是8G
下面把rhel7.1.iso铂贝到/vdo1中并命名为file3
[root@jiayi ~]# cp rhel-server-7.1-x86_64-dvd.iso vdo1/file3
[root@jiayi ~]#
[root@jiayi ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 50.0G 11.1G 38.9G 22% 40%
因为有部分数据相同所以只消耗了3.1G空间
要删除VDO设备,命令如下
[root@jiayi ~]# vdo remove -n vdo1
Removing VDO vdo1
Stopping VDO vdo1
[root@jiayi ~]# vdo list
·不过要先将VDO设备umount之后才可以进行删除