本章主要介紹虛擬化數據優化器
- 什么是虛擬數據優化器VDO
- 創建VDO設備以節約硬盤空間
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相關軟件包,步驟如下。
1)掛載光盤,命令如下。
[root@node01 /]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@node01 /]
這里準備把光盤作為yum 源。
2)編寫repo文件,命令如下
[root@node01 /]# cat /etc/yum.repos.d/aa.repo
[aa]
name=aa
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0[bb]
name=bb
baseurl=///mnt/BaseOS
enabled=1
gpgcheck=0
[root@node01 /]#
3)安裝VDO,命令如下。
[root@node01 /]# yum -y install vdo kmod-kvdo
4)查看 VDO設備,命令如下。
[root@node01 /]# vdo list [root@node01 /]#
????????沒有任何輸出,說明現在還沒有任何VDO設備。
????????因為相同數據只存儲一份,大大地節省了存儲空間,所以本來20G的磁盤空間現在存儲 30G、40G、50G的數據是完全有可能的。
????
5)面創建一個名稱為vdo1、底層設備為/dev/sdc的VDO設備,邏輯大小為50G,命令如下。
[root@node01 ~]# vdo create --name vdo01 --device /dev/sdc --vdoLogicalSize 30G
Creating VDO vdo01The VDO volume can address 26 GB in 13 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 vdo01
Starting compression on VDO vdo01
VDO instance 0 volume is ready at /dev/mapper/vdo01
[root@node01 ~]#
????????上面提示的一堆信息不用管,最終能看到的是vdo1已經創建好了,可以通 過/dev/mapper/vdo1來使用。
6)再次查看有多少VDO設備,命令如下。
[root@node01 ~]# vdo list
vdo01
[root@node01 ~]#
7)格式化這個VDO設備,命令如下。
[root@node01 ~]# mkfs.xfs -K /dev/mapper/vdo01
meta-data=/dev/mapper/vdo01 isize=512 agcount=4, agsize=1966080 blks= sectsz=4096 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1
data = bsize=4096 blocks=7864320, imaxpct=25= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=3840, version=2= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@node01 ~]#
注意:這里-K(大寫)的意思類似于Windows中的快速格式化。
8)把這個 VDO設備掛載到/vdo1目錄上,命令如下。
[root@node01 ~]# mkdir /vdo01
[root@node01 ~]# mount /dev/mapper/vdo01 /vdo01/
[root@node01 ~]#
9)如果希望能永久掛載,需要寫入/etc/fstab中,命令如下。
[root@node01 ~]# grep vdo /etc/fstab
/dev/mapper/vdo01 /vdo01 xfs defaults 0 0
[root@node01 ~]#
10)需要注意的是,這里一定要有_netdev選項,否則重啟系統時,系統是啟動不起來的。 查看vdo1的空間使用情況,命令如下。
[root@node01 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo01 30.0G 4.0G 26.0G 13% 98%
[root@node01 ~]#
????????這里自身就消耗了4G空間(Used那列),因為這里不存在文件,所以空間節省率為98%
(Space saving%那列)。
3.測試VDO
1)往 node01上傳一個比較大的文件,這里上傳的是一個centos7的軟件包,命令如下。
wget https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso?spm=a2c6h.25603864.0.0.41be2d1cNwXIGn
這個軟件包大小是11M
2)下面開始第一次把 CentOS-7拷貝到/vdo01中并命名為centos7,命令如下。
[root@node01 ~]# cp /root/CenOS-7 /vdo01/centos7
3)可以看到,現在消耗空間是8G,因為只有一個文件不存在相同數據,所以空間節省率 為3%。
[root@node01 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo01 30.0G 8.0G 22.0G 26% 3%
[root@node01 ~]#
4)下面開始第二次把CenOS-7拷貝到/vdo01中并命名為centos02,命令如下。
[root@node01 ~]# cp /root/CenOS-7 /vdo01/centos02
[root@node01 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo01 30.0G 8.0G 22.0G 26% 51%
[root@node01 ~]#
????????因為是從同一個文件拷貝的,所以 file2的內容和filel的內容是完全相同的,這里磁盤使用量仍然是8G。
????????因為實際寫入了兩個8G的文件,本來應該消耗16G的空間,但是這兩個文件是相同的,所以實際消耗還是8G的空間,節省率在50%左右。
5)下面開始第三次把CentOS-7拷貝到/vdo01中并命名為centos03,命令如下。
[root@node01 ~]# cp /root/CenOS-7 /vdo01/centos03
[root@node01 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/vdo01 30.0G 8.0G 22.0G 26% 67%
[root@node01 ~]#
????????因為是從同一個文件拷貝的,所以 centos7、centos02、centos03三個文件的內容是完全相同的,這里磁盤使用量仍然是8G。
????????因為實際寫入了三個4G的文件,本來應該消耗12G的空間,但是這三個文件是相同的,所以實際消耗還是8G的空間,節省率在67%左右
6)要刪除VDO設備,命令如下
[root@node01 ~]# vdo remove -n vdo01 //移除vdo01
[root@node01 ~]# vdo list //查看是否刪除