虚拟数据优化器VDO

2023-12-07 15:28
文章标签 数据 优化 虚拟 vdo

本文主要是介绍虚拟数据优化器VDO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本章主要介绍虚拟化数据优化器。

  • 什么是虚拟数据优化器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 vdo1The 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

这篇关于虚拟数据优化器VDO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/466367

相关文章

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I