LVM管理逻辑卷,VDO


目录:

LVM(Logical Volume Management)是一种用于管理逻辑卷的技术,它在Linux系统上提供了灵活和可扩展的磁盘存储管理功能。LVM允许将多个物理磁盘合并成一个逻辑卷组(VG),然后再将逻辑卷组划分为一个或多个逻辑卷(LV)。逻辑卷可以被格式化、挂载和使用,就像普通的硬盘分区一样。

LVM的主要优点是可以动态地调整逻辑卷的大小,即使在运行时也可以将物理空间从一个卷移动到另一个卷。这使得存储管理更加灵活,可以根据需要对逻辑卷进行调整,而无需停机或重新分区硬盘。

在分区的时候,每个分区应该分多大是令人头疼的,而且随着长时间的运行,分区不管你分多大,都会被数据给占满。当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。

虽然现在有很多动态调整磁盘的工具可以使用,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解决问题。

因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。那么我们可以通过逻辑盘卷管理(LVM,Logical Volume Manager)的方式来非常完美的实现这一功能。

解决思路:将所有可用存储汇集成池,当池中某个分区空间不够时就会从池中继续划分空间给分区,池中空间不够就可以通过加硬盘的方式来解决。

逻辑卷介绍

lvm.png 逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理的一种机制,它是建立在物理存储设备之上的一个抽象层,优点在于灵活管理。 特点:

1、动态在线扩容

2、离线裁剪

3、数据条带化

4、数据镜像

名词解释:

lvm2

  • 物理卷PV

    • 物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数
  • 卷组VG

    • LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
  • 逻辑卷LV

    • LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
  • PE

    • 每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
  • LE

    • 逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

lvm

逻辑卷使用流程

真实的物理设备---->物理卷(pv)---->卷组(vg)---->逻辑卷(lv)------>逻辑卷格式化---->挂载使用

常用的LVM部署命令

功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展 vgextend lvextend
缩小 vgreduce lvreduce

LVM实战

为了避免多个实验之间相互发生冲突,请大家自行将虚拟机还原到初始状态,并重新添加两块新硬盘设备,如下图所示。然后开机。

LVM逻辑卷管理器

在虚拟机中添加两块新硬盘设备的目的,是为了更好地演示LVM理念中用户无须关心底层物理硬盘设备的特性。我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持LVM技术,或者理解成是把硬盘设备加入到LVM技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称允许由用户自定义。接下来,根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成Ext4文件系统后挂载使用。下文将对每一个步骤做一些简单的描述。

# 如果lvm未安装,可以使用下列命令安装
yum install lvm2

第1步:让新添加的两块硬盘设备支持LVM技术。

[root@zuolaoshi ~]# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.

第2步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。

[root@zuolaoshi ~]# vgcreate storage /dev/sdb /dev/sdc
 Volume group "storage" successfully created
[root@zuolaoshi ~]# vgdisplay
  --- Volume group ---
  VG Name               storage
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               HPwsm4-lOvI-8O0Q-TG54-BkyI-ONYE-owlGLd
………………省略部分输出信息………………

第3步:再切割出一个约为150MB的逻辑卷设备。

这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

[root@zuolaoshi ~]# lvcreate -n vo -l 37 storage
 Logical volume "vo" created.
[root@zuolaoshi ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/storage/vo
  LV Name                vo
  VG Name                storage
  LV UUID                AsDGJj-G6Uo-HG4q-auD6-lmyn-aLY0-o36HEj
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-01-15 00:47:35 +0800
  LV Status              available
  # open                 0
  LV Size                148.00 MiB
  Current LE             37
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
………………省略部分输出信息………………

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。

Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

[root@zuolaoshi ~]# mkfs.ext4 /dev/storage/vo 
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 151552 1k blocks and 38000 inodes
Filesystem UUID: 429cbc28-4463-4a1b-b601-02a7cf81a1b2
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done 
[root@zuolaoshi ~]# mkdir /data
[root@zuolaoshi ~]# mount /dev/storage/vo /data

对了,如果使用了逻辑卷管理器,则不建议用XFS文件系统,因为XFS文件系统自身就可以使用xfs_growfs命令进行磁盘扩容。这虽然不比LVM灵活,但起码也够用。在实测阶段我们发现,在有一些服务器上,XFS与LVM的兼容性并不好。

第5步:查看挂载状态,并写入配置文件,使其永久生效。

[root@zuolaoshi ~]# df -h
Filesystem              Size  Used Avail Use% Mounted on
devtmpfs                969M     0  969M   0% /dev
tmpfs                   984M     0  984M   0% /dev/shm
tmpfs                   984M  9.6M  974M   1% /run
tmpfs                   984M     0  984M   0% /sys/fs/cgroup
/dev/mapper/rhel-root    17G  3.9G   14G  23% /
/dev/sr0                6.7G  6.7G     0 100% /media/cdrom
/dev/sda1              1014M  152M  863M  15% /boot
tmpfs                   197M   16K  197M   1% /run/user/42
tmpfs                   197M  3.4M  194M   2% /run/user/0
/dev/mapper/storage-vo  140M  1.6M  128M   2% /data
[root@zuolaoshi ~]# echo "/dev/storage/vo /data ext4 defaults 0 0" >> /etc/fstab
[root@zuolaoshi ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root                       /                       xfs      defaults        0 0
UUID=2db66eb4-d9c1-4522-8fab-ac074cd3ea0b   /boot                   xfs      defaults        0 0
/dev/mapper/rhel-swap                       swap                    swap     defaults        0 0
/dev/cdrom                                  /media/cdrom            iso9660  defaults        0 0 
/dev/storage/vo                             /data             ext4     defaults        0 0

Tips

细心的同学应该又发现了一个小问题:刚刚明明写的是148MB,怎么这里只有140MB了呢?这是因为硬件厂商的制造标准是1GB=1,000MB、1MB=1,000KB、1KB=1,000B,而计算机系统的算法是1GB=1,024MB、1MB=1,024KB、1KB=1,024B,因此有3%左右的“缩水”是正常情况。

扩容逻辑卷

在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩容前请一定要记得卸载设备和挂载点的关联。

[root@zuolaoshi ~]# umount /data

第1步:把上一个实验中的逻辑卷vo扩展至290MB。

[root@zuolaoshi ~]# lvextend -L 290M /dev/storage/vo
Rounding size to boundary between physical extents: 292.00 MiB.
Size of logical volume storage/vo changed from 148 MiB (37 extents) to 292 MiB (73 extents).
Logical volume storage/vo successfully resized.

第2步:检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。

[root@zuolaoshi ~]# e2fsck -f /dev/storage/vo
e2fsck 1.44.3 (10-July-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/vo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks

第3步:重置设备在系统中的容量。刚刚是对LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。

[root@zuolaoshi ~]# resize2fs /dev/storage/vo
resize2fs 1.44.3 (10-July-2018)
Resizing the filesystem on /dev/storage/vo to 299008 (1k) blocks.
The filesystem on /dev/storage/vo is now 299008 (1k) blocks long.

第4步:重新挂载硬盘设备并查看挂载状态。

[root@zuolaoshi ~]# mount -a
[root@zuolaoshi ~]# df -h
Filesystem              Size  Used Avail Use% Mounted on
devtmpfs                969M     0  969M   0% /dev
tmpfs                   984M     0  984M   0% /dev/shm
tmpfs                   984M  9.6M  974M   1% /run
tmpfs                   984M     0  984M   0% /sys/fs/cgroup
/dev/mapper/rhel-root    17G  3.9G   14G  23% /
/dev/sr0                6.7G  6.7G     0 100% /media/cdrom
/dev/sda1              1014M  152M  863M  15% /boot
tmpfs                   197M   16K  197M   1% /run/user/42
tmpfs                   197M  3.4M  194M   2% /run/user/0
/dev/mapper/storage-vo  279M  2.1M  259M   1% /data
如果使用xfs格式的lvm时,使用如下命令
# xfs_repair 是一个用于修复 XFS
xfs_repair -f /dev/vg1/lva
# xfs_growfs 在线扩展 XFS 文件系统
xfs_growfs /dev/vg1/lva

缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,数据丢失的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外,Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证数据的安全)。在执行缩容操作前记得先把文件系统卸载掉。

[root@zuolaoshi ~]# umount /data

第1步:检查文件系统的完整性。

[root@zuolaoshi ~]# e2fsck -f /dev/storage/vo
e2fsck 1.44.3 (10-July-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/vo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks

第2步:通知系统内核将逻辑卷vo的容量减小到120MB。

[root@zuolaoshi ~]# resize2fs /dev/storage/vo 120M
resize2fs 1.44.3 (10-July-2018)
Resizing the filesystem on /dev/storage/vo to 122880 (1k) blocks.
The filesystem on /dev/storage/vo is now 122880 (1k) blocks long.

第3步:将LV逻辑卷的容量修改为120M。

[root@zuolaoshi ~]# lvreduce -L 120M /dev/storage/vo
  WARNING: Reducing active logical volume to 120.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce storage/vo? [y/n]: y
  Size of logical volume storage/vo changed from 292 MiB (73 extents) to 120 MiB (30 extents).
  Logical volume storage/vo successfully resized.

咦?缩容的步骤跟扩容的步骤不一样啊。缩容操作为什么是先通知系统内核设备的容量要改变成120MB,然后再正式进行缩容操作呢?举个例子大家就明白了。小强是一名初中生,开学后看到班里有位同学纹了身,他感觉很酷,自己也想纹但又怕家里责骂,于是他回家后就说:“妈妈,我纹身了。”如果妈妈的反应很平和,那么他就可以放心大胆地去纹身了。如果妈妈强烈不同意,他马上就可以哈哈一笑,说:“逗着玩呢。”这样也就不会挨打了。

缩容操作也是同样的道理,先通知系统内核自己想缩小逻辑卷,如果在执行resize2fs命令后系统没有报错,再正式操作。

第4步:重新挂载文件系统并查看系统状态。

[root@zuolaoshi ~]# mount -a
[root@zuolaoshi ~]# df -h
Filesystem              Size  Used Avail Use% Mounted on
devtmpfs                969M     0  969M   0% /dev
tmpfs                   984M     0  984M   0% /dev/shm
tmpfs                   984M  9.6M  974M   1% /run
tmpfs                   984M     0  984M   0% /sys/fs/cgroup
/dev/mapper/rhel-root    17G  3.9G   14G  23% /
/dev/sr0                6.7G  6.7G     0 100% /media/cdrom
/dev/sda1              1014M  152M  863M  15% /boot
tmpfs                   197M   16K  197M   1% /run/user/42
tmpfs                   197M  3.4M  194M   2% /run/user/0
/dev/mapper/storage-vo  113M  1.6M  103M   2% /data

逻辑卷快照

LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:

快照卷的容量必须等同于逻辑卷的容量;

快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。

在正式操作前,先看看VG(卷组)中的容量是否够用:

[root@zuolaoshi ~]# vgdisplay
  --- Volume group ---
  VG Name               storage
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       30 / 120.00 MiB
  Free  PE / Size       10208 / <39.88 GiB
  VG UUID               k3ZnaP-wGPr-TQJ5-PCtA-0RgO-jvsi-9elZ5M
………………省略部分输出信息………………

通过卷组的输出信息可以清晰看到,卷组中已经使用了120MB的容量,空闲容量还有39.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

[root@zuolaoshi ~]# echo "Welcome to data.com" > /data/readme.txt
[root@zuolaoshi ~]# ls -l /data
total 14
drwx------. 2 root root 12288 Jan 15 01:11 lost+found
-rw-r--r--. 1 root root    26 Jan 15 07:01 readme.txt

第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小,需要与要做快照的设备容量保持一致。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作,稍后数据也会还原到这个相应的设备上。

[root@zuolaoshi ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo
 Logical volume "SNAP" created
[root@zuolaoshi ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/storage/SNAP
  LV Name                SNAP
  VG Name                storage
  LV UUID                qd7l6w-3Iv1-6E3X-RGkC-t5xl-170r-rDZSEf
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-01-15 07:02:44 +0800
  LV snapshot status     active destination for vo
  LV Status              available
  # open                 0
  LV Size                120.00 MiB
  Current LE             30
  COW-table size         120.00 MiB
  COW-table LE           30
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5
………………省略部分输出信息………………

第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间的占用量上升了。

[root@zuolaoshi ~]# dd if=/dev/zero of=/data/files count=1 bs=100M
1+0 records in
1+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.312057 s, 336 MB/s
[root@zuolaoshi ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/storage/SNAP
  LV Name                SNAP
  VG Name                storage
  LV UUID                qd7l6w-3Iv1-6E3X-RGkC-t5xl-170r-rDZSEf
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-01-15 07:02:44 +0800
  LV snapshot status     active destination for vo
  LV Status              available
  # open                 0
  LV Size                120.00 MiB
  Current LE             30
  COW-table size         120.00 MiB
  COW-table LE           30
  Allocated to snapshot  83.71%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5
………………省略部分输出信息………………

第3步:为了校验快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。

lvconvert命令用于管理逻辑卷的快照,语法格式为“lvconvert [参数]快照卷名称”。

使用lvconvert命令能自动恢复逻辑卷的快照,在早期的RHEL/CentOS 5版本中要写全格式:“--mergesnapshot”,而从RHEL 6到RHEL 8,已经允许用户只输入--merge参数进行操作了,系统会自动分辨设备的类型。

[root@zuolaoshi ~]# umount /data
[root@zuolaoshi ~]# lvconvert --merge /dev/storage/SNAP
  Merging of volume storage/SNAP started.
  storage/vo: Merged: 36.41%
  storage/vo: Merged: 100.00%

第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。

[root@zuolaoshi ~]# mount -a
[root@zuolaoshi ~]# cd /data/
[root@zuolaoshi data]# ls
lost+found readme.txt
[root@zuolaoshi data]# cat readme.txt 
Welcome to data.com

删除逻辑卷

当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

[root@zuolaoshi ~]# umount /data
[root@zuolaoshi ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root                       /                       xfs      defaults        0 0
UUID=2db66eb4-d9c1-4522-8fab-ac074cd3ea0b   /boot                   xfs      defaults        0 0
/dev/mapper/rhel-swap                       swap                    swap     defaults        0 0
/dev/cdrom                                  /media/cdrom            iso9660  defaults        0 0 
/dev/storage/vo                             /data             ext4     defaults        0 0

第2步:删除逻辑卷设备,需要输入y来确认操作。

[root@zuolaoshi ~]# lvremove /dev/storage/vo 
Do you really want to remove active logical volume storage/vo? [y/n]: y
  Logical volume "vo" successfully removed

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

[root@zuolaoshi ~]# vgremove storage
  Volume group "storage" successfully removed

第4步:删除物理卷设备。

[root@zuolaoshi ~]# pvremove /dev/sdb /dev/sdc
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.

在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到相关信息了(前提是上述步骤的操作是正确的)。干净利落!

VDO 基础

VDO(Virtual Data Optimize虚拟数据优化):通过压缩或删除存储设备上的数据来优化存储空间

VDO层放置在现有块存储设备例如RAID设备或本地磁盘的顶部。这些块设备也可以是加密设备。存储层(如LVM logic卷和文件系统放置在VDO层的顶部。

VDO按以下顺序将三个阶段应用于数据,减少存储设备上的占用空间

零区块的排除:在初始化阶段,整块为0的会被元数据记录下来,这个可以用水杯里面的水和沙子混合的例子来解释,使用滤纸(零块排除),把沙子(非零空间)给过滤出来,然后就是下一个阶段的处理

重复数据删除:在第二阶段,输入的数据会判断是不是冗余数据(在写入之前就判断),这个部分的数据通过UDS内核模块来判断(U niversal D eduplication S ervice),被判断为重复数据的部分不会被写入,然后对元数据进行更新,直接指向原始已经存储的数据块即可

压缩:一旦消零和重删完成,LZ4压缩会对每个单独的数据块进行处理,然后压缩好的数据块会以固定大小4KB的数据块存储在介质上,由于一个物理块可以包含很多的压缩块,这个也可以加速读取的性能

实验 1、安装VDO模块,需要的软件包是kmod-kvdo vdo

yum  install vdo kmod-kvdo  -y

2、创建VDO卷

vdo create --name=vdo1 --device=/dev/sdd  --vdoLogicalSize=5G

3、分析一个VDO卷(deduplication重复删除数据 compression压缩)

vdo  status   --name=vdo1

4、给vdo1一个xfs文件系统,之后挂载到/mnt/vdo1上

mkfs.xfs  -K  /dev/mapper/vdo1

-K选项可防止立即丢弃文件系统中未使用的块,从而使命令返回更快

刷新存储设备

udevadm   settle
mkdir    /mnt/vod1
#挂载使用
mount /dev/mapper/vdo1   /mnt/vdo1/

5、使用vdostats命令查看卷的初始统计信息和状态

vdostats   --human-readable
Device             Size      Used Available Use% Space saving%
/dev/mapper/vdo1   8.0G      4.0G      4.0G  50%           98%

6、创建文件

cp /data/files  /root/files

7、移动文件到挂载点中,然后看一下结果

mv  /root/files  /mnt/files
vdostats   --human-readable
Device            Size      Used Available Use% Space saving%
/dev/mapper/vdo1  8.0G      4.4G      3.6G  54%           73%

8、重新复制一遍

cp /root/files  /mnt/vdo1/files.2
vdostats   --human-readable
Device             Size      Used Available Use% Space saving%
/dev/mapper/vdo1   8.0G      4.4G      3.6G  55%           70%

总结:会发现传一个相同的文件,但是空间并不会发生变化。