VDO使用


一、什么是VDO

VDO(Virtual Data Optimize)是RHEL8/Centos8上新推出的一個存儲相關技術(最早在7.5測試版中開始測試),是Redhat收購的Permabit公司的技術。
VDO的主要作用是節省磁盤空間,比如讓1T的磁盤能裝下1.5T的數據,從而降低數據中心的成本。
那vdo是如何實現的呢,關鍵原理主要是重刪和壓縮,重刪就是硬盤里拷貝來相同的數據,以前要占多份空間,現在只需要1份空間就可以了。類似我們在百度網盤中上傳一個大型軟件安裝包,能實現秒傳,其實是之前就有,所以無需再傳一遍,也無需再占百度一份空間。另一方面是數據壓縮,類似於壓縮軟件的算法,也可以更加節省磁盤空間。
對於管理的是vm或容器時,建議精簡邏輯存儲與物理存儲比例設置為10:1,就是如果你利用的是1TB的物理磁盤,你可以假裝它是10TB的邏輯存儲。對於對象存儲,比如Ceph,建議使用3:1的邏輯存儲,1TB物理存儲可以當3TB邏輯存儲。

二、配置步驟

centos7.3
添加額外磁盤sdb 10G
# yum install vdo kmod-kvdo 
# vdo create --name=vdo0 --device=/dev/sdb --vdoLogicalSize=30G

--vdoLogicalSize=30G:用VDO卷應提供的邏輯存儲量替換邏輯大小。這個值可以自己設置。對於主動VM或容器存放,使用邏輯大小是10的塊設備的物理尺寸倍。例如,如果我們的塊設備大小為10GB,請在30GB此處使用

# mkfs.ext4 -K /dev/mapper/vdo0

-K選項可防止立即丟棄文件系統中未使用的塊,從而使命令返回更快。類似windows格式中的快速格式化,否則會花很多時間

# mkdir /vdo 
# mount /dev/mapper/vdo0 /vdo 
# lsblk --output=UUID /dev/mapper/vdo0 #查看/dev/mapper/vdo0設備的UUID 
# vim /etc/fstab 
UUID=XXXXXX /vdo ext4 defaults,x-systemd.requires=vdo.service 0 0 
# vdostats --human-readable #檢查存儲統計信息

 

 

 

三、測試

上傳一個3.1G文件分別放到/vdo和/vdo/test中,看看儲存情況

 

可以看到的是,存儲兩個一樣的文件。VDO卷的邏輯存儲量會用去6.2g。但是實際物理空間只使用了3G(3.1G)。這樣大大提高了儲存空間的利用率。

 
 
另外,在網上看到有的教程在創建vdo的時候沒有添加--vdoLogicalSize參數。這樣做創建過程不會報錯。但是創建的vdo卷就起不到原有作用。接下來試試不添加--vdoLogicalSize參數看看
刪除原來vdo0
# umount /vdo # vdo remove --name=vdo0

重新創建並掛載

# vdo create --name=vdo0 --device=/dev/sdb 
# mkfs.ext4 -K /dev/mapper/vdo0 
# mount /dev/mapper/vdo0 /vdo 
# vdostats --human-readable

 

 

那么我們來試試能儲存多大的文件。將一個3.5G的鏡像,上傳到/vdo和/vdo/test中
可以看到他只能儲存5.8G的文件。並沒有起到應有的作用

 

 通過上面實驗我們可以知道,VDO卷能儲存的數據大小和其實際物理大小以及設置的邏輯大小有關。假如邏輯大小設置過小,邏輯大小存滿之后,即使實際物理空間沒有使用完,VDO也不能在存儲文件了。反過來,實際物理大小使用完之后,邏輯大小沒滿,VDO卷也不能在存儲文件了。

所以在使用VDO卷的系統中,如果要做磁盤空間監控。不僅要監控VDO卷的邏輯儲存量剩余大小,還要監控實際物理空間的剩余大小。
 

四、VDO卷擴容

通過上面的結論我們可以知道,假如寫入的文件重復率很高,那么對於VDO卷很可能會出現邏輯空間用完,物理空間實際還有剩余的情況,這時候我們可以對VDO卷進行擴容
# umount /vdo 
# vdo growLogical --name=vdo0 --vdoLogicalSize=400G #擴容VDO卷 
# resize2fs /dev/mapper/vdo0 #文件系統擴容 
# mount /dev/mapper/vdo0 /vdo 
# df -h

 

五、在LVM的基礎上創建VDO卷

VDO可以在LV的基礎上創建。
# fdisk /dev/sdb 
這一步提前將/dev/sdb分成兩個5G的分區 ,過程略
# pvcreate /dev/sdb1 
# pvcreate /dev/sdb2 
# vgcreate vdovg /dev/sdb1 
# lvcreate -l 100%VG -n vdolv /dev/vdovg 
# vdo create --name=vdo0 --device=/dev/vdovg/vdolv --vdoLogicalSize=20G 
# mkfs.ext4 /dev/mapper/vdo0 
# mount /dev/mapper/vdo0 /vdo

  

對VDO實際物理空間擴容
# umount /vdo 
# vgextend vdovg /dev/sdb2 
# lvextend -l +100%FREE /dev/vdovg/vdolv 
# vdo growPhysical --name=vdo0     #物理空間擴容 
# vdo growLogical --name=vdo0 --vdoLogicalSize=40G     #邏輯空間擴容 
# resize2fs /dev/mapper/vdo0      #文件系統擴容
# mount /dev/mapper/vdo0 /vdo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM