zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

vdo虚拟数据优化器

数据 优化 虚拟
2023-09-14 09:15:55 时间

vdo和百度网盘的秒传技术很像.
如果校验发现这个文件已经存在,就创建一个链接,而不是真的复制一份,实现重复数据不重复写入.

安装kmod-kvdo和vdo

# 安装kmod-kvdo包和vdo包
yum install vdo kmod-kvdo -y

创建vdo


让磁盘以虚假的形式变大

准备一块磁盘

# 查看当前磁盘大小
fdisk -lu /dev/sda
## 该磁盘大小是20G
Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

创建一个vdo卷

# 创建一个vdo卷,指定逻辑大小使1000G
vdo create --name vdo1 --device /dev/sda --vdoLogicalSize 1000
G
## 在/dev/mapper/目录下已经创建了一个vdo1目录(dm设备,逻辑卷)
[rocky1 root ~]# ls /dev/mapper/vdo1 -l
lrwxrwxrwx. 1 root root 7 1030 14:52 /dev/mapper/vdo1 -> ../dm-2

# 格式化这个逻辑卷
mkfs.xfs /dev/mapper/vdo1

# 查看磁盘大小
[rocky1 root ~]# fdisk -lu /dev/mapper/vdo1
Disk /dev/mapper/vdo1:1000 GiB,1073741824000 字节,262144000 个扇区
单元:扇区 / 1 * 4096 = 4096 字节
扇区大小(逻辑/物理):4096 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
## vdo卷是100G

挂载VDO卷

# 创建挂载点
mkdit /vdo1

# 挂载vdo卷
mount /dev/mapper/vdo1 /vdo1/

# 查看挂载点
[rocky1 root ~]# df -Th /vdo1
文件系统         类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vdo1 xfs  1000G  7.1G  993G    1% /vdo1

持久挂载vdo卷

vdofstab一定要加参数_netdev 1 2
否则重启后会进入紧急模式,系统起不来

# 编辑/etc/fstab
vim /etc/fstab

# 写入挂载配置,需要加_netdev,防止在系统就绪之前开始挂载文件系统
/dev/mapper/vdo1 /vdo1 xfs _netdev 1 2

## 第五列dump选项,是选择是否备份,1是开启0是关闭
## 第六列fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若文件系统无需在启动时扫描检查,则设置该字段为0。

查看vdo真正的大小

# 显示vdo真实大小
[rocky1 root ~]# vdostats
Device               1K-blocks      Used Available Use% Space saving%
/dev/mapper/vdo1      20971520   4207216  16764304  20%           99%

# 以人类易读的方式来显示vdo真实大小
[rocky1 root ~]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         20.0G      4.0G     16.0G  20%           99%

vdo重复文件测试

# 在/vdo1中存放一个iso文件
D:\Downloads\iso> scp .\Rocky-8.4-x86_64-minimal.iso rocky1:/vdo1
Rocky-8.4-x86_64-minimal.iso                                100% 1889MB  32.7MB/s   00:57

# 查看/vdo1目录下文件
[rocky1 root /vdo1]# ls /vdo1/
Rocky-8.4-x86_64-minimal.iso

# df -Th查看/vdo1空间占用情况
[rocky1 root /vdo1]# df -Th /dev/mapper/vdo1
/dev/mapper/vdo1        xfs      1000G  8.9G  991G    1% /vdo1

# 查看vdo真实磁盘占用情况
[rocky1 root /vdo1]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         20.0G      5.8G     14.2G  28%           25%

# 将这个iso文件复制一份
[rocky1 root /vdo1]# cp Rocky-8.4-x86_64-minimal.iso Rocky-8.4-x86_64-minimal1.iso
[rocky1 root /vdo1]# ls /vdo1/
Rocky-8.4-x86_64-minimal1.iso  Rocky-8.4-x86_64-minimal.iso

# 再次查看vdo真实磁盘占用情况,实际占用空间没有变化
[rocky1 root /vdo1]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         20.0G      5.8G     14.2G  28%           58%

## 但是df -Th查看到的空间占用有变化
[rocky1 root /vdo1]# df -Th /dev/mapper/vdo1
文件系统         类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vdo1 xfs  1000G   11G  989G    2% /vdo1

网盘的秒传技术就是这么实现的,其实底层根本没多少物理磁盘.


vdo的常用查看命令


列出所有vdo

# 列出所有vdo
vdo list

查看vdo的状态

vdo status vdo名称 

# 查询是否压缩
vdo status |grep -i compress

# 查询是否开启重复文件删除
vdo status |grep -i deduplication

删除vdo

vdo remove --name vdo名称