Linux – 虛擬資料優化系統 – VDO
建立一個雲端空間共同存放影片是的很好的地方,不過有 100 個每個人都存一部內容一模一樣佔 10GB 空間影片,就必須騰出 1TB 來存放,十分浪費,故 VDO ( Virtual Data Optimizer )目的就是重複檔案僅存一次,重複的內容使用捷徑方式儲存就可以大大的降低空間浪費。
1. VDO 簡介
VDO 虛擬資料優化系統 ( Virtual Data Optimizer ),透過軟體來壓縮及去除重複的資料,變可以有效的增加儲存空間,其架構圖如下。
2. VDO 安裝
VDO 安裝方式十分容易 , 已經預設在 RHEL 8 的 BaseOS 倉庫裡,直接透過 yum 即可安裝
[root@serverc ~]# yum install vdo
Dependencies resolved.
==================================================================================================================================================================================================================
Package Architecture Version Repository Size
==================================================================================================================================================================================================================
Installing:
vdo x86_64 6.2.5.74-14.el8 BaseOS 661 k
Installing dependencies:
kmod-kvdo x86_64 6.2.5.72-81.el8 BaseOS 339 k
python3-pyyaml x86_64 3.12-12.el8 BaseOS 192 k
...
3. VDO 創建以掛載
VDO 指定一個分割好的硬碟 ( 需大於 5G ),如尚未分割可以使用 parted 進行分割。
3.1. 分割硬碟
[root@serverc ~]# parted -s /dev/vdd mklabel msdos mkpart primary xfs 2048s 100% print
Model: Virtio Block Device (virtblk)
Disk /dev/vdd: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 10.7GB 10.7GB primary xfs lba
3.2. 創建 VDO
[root@serverc ~]# vdo create --name=vdo1 --device=/dev/vdd1 --vdoLogicalSize=10T
Creating VDO vdo1
The VDO volume can address 6 GB in 3 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 1 volume is ready at /dev/mapper/vdo1
創建的 VDO SIZE 可以比硬碟空間來的大是沒有問題,VDO 透過軟體虛擬出來的,如空間不足多加幾個硬碟即可。
3.3. 格式化 VDO
[root@serverc ~]# mkfs.xfs -K /dev/mapper/vdo1
meta-data=/dev/mapper/vdo1 isize=512 agcount=10, agsize=268435455 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2684354550, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
3.4. 創建目錄並使用 VDO 掛載
[root@serverc ~]# mkdir -v /vdo
mkdir: created directory '/vdo'
[root@serverc ~]# mount /dev/mapper/vdo1 /vdo
[root@serverc ~]# df -h /vdo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vdo1 10T 72G 10T 1% /vdo
3.5. 開機自動掛載
囿於 VDO 服務是由 systemd 託管,不過再開機過程中先 mount 硬碟最後才會啟動 systemd ,在沒有 VDO 服務時,系統會認定找不到該硬碟導致無法開機進入救援模式,所以必須加上特定參數,使得 VDO 等服務啟動後再執行 mount。
[root@serverc ~]# cat >> /etc/fstab << EOL
> /dev/mapper/vdo0 /vdo xfs defaults,x-systemd.requires=vdo.service 0 0
> EOL
一定要加上 x-systemd.requires=vdo.service 參數,不然會導致開機不起來..
4. VDO 操作方式
4.1. 查看 VDO 實際佔用的空間
[root@serverc ~]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 10.0G 4.0G 6.0G 40% 99%
就算沒有任何檔案, VDO 預設會保留 3 – 4G的空間做為緩衝。
4.2. 複製一個較大檔案至 /vdo 目錄並查看 VDO 狀態
[root@serverc ~]# ls -lh /usr/lib/locale/locale-archive
-rw-r--r--. 1 root root 208M Feb 16 12:49 /usr/lib/locale/locale-archive
[root@serverc ~]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 10.0G 4.1G 5.9G 40% 96%
4.3. 使用回圈多複製30個上述檔案,並查看 VDO 狀態
使用迴圈複製相同檔案多次,實際上只佔用一次檔案的空間,可以看出 saving% 比上一步驟增加了 4% ,不過 Used 還是維持 4.1 G。
[root@serverc ~]# for i in {1..30} ; do cp /usr/lib/locale/locale-archive /vdo/test${i}; done
[root@serverc ~]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 10.0G 4.1G 5.9G 41% 98%
5. LAB 練習
5.1. LAB
可以使用 HowHow 的創建 Lab 練習環境,操作錯誤導致系統失敗可以直接重置還原,使用方式請參閱 HowHow 網站。
囿於 HowHow 預設掛載硬碟較小,請在 bastion 機器下載 initVDO.sh 腳本後會自動擴展 serverc VDD的硬碟大小,執行方式如下:
[root@bastion tmp]# curl https://how64bit.com/RHCSA/script/initVDO.sh -O initVOD.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 944 0 944 0 0 2551 0 --:--:-- --:--:-- --:--:-- 2551
[root@bastion tmp]# sh initVDO.sh
...
# Serverc 預設沒有 yum.repo,手動複製 倉庫清單
[root@serverc ~]# cp /etc/yum.repos.d/back_repo/rhel8.repo /etc/yum.repos.d/.
# 安裝 VDO
[root@serverc ~]# yum install vdo
...
LAB 如下要求,創建新的
VDO
:
- [ ] 使用一個未分割的硬碟
- [ ] VDO名稱為
vdough
- [ ] 大小為
50G
- [ ] 使用
xfs
檔案系統格式化- [ ] 開機後自動掛載到
/vbread
目錄下
LAB練習完畢後,可以至 bastion 機器執行 rht-vmctl reset serverc 重置 serverc 將硬碟回初始設定。
5.2. LAB 解答
5.2.1. 下載並安裝 VDO
# 使用 HowHow 的 LAB 需先配置倉庫清單
[root@serverc ~]# cp /etc/yum.repos.d/back_repo/rhel8.repo /etc/yum.repos.d/. && yum install -y vdo
...
5.2.2. 分割硬碟並創建 VDO
[root@serverc ~]# parted -s /dev/vdd mklabel msdos mkpart primary xfs 2048s 100%
[root@serverc ~]# vdo create --name=vdough --device=/dev/vdd1 --vdoLogicalSize=50G
Creating VDO vdough
The VDO volume can address 6 GB in 3 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 vdough
Starting compression on VDO vdough
VDO instance 0 volume is ready at /dev/mapper/vdough
5.2.3. 使用 XFS 檔案系統格式化
[root@serverc ~]# mkfs.xfs -K /dev/mapper/vdough
meta-data=/dev/mapper/vdough 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
5.2.4. 設定開機自動掛載至 /vbread 目錄
[root@serverc ~]# mkdir -v /vbread
mkdir: created directory '/vbread'
[root@serverc ~]# cat >> /etc/fstab << EOL
> /dev/mapper/vdough /vbread xfs defaults,x-systemd.requires=vdo.service 0 0
> EOL
[root@serverc ~]# mount -a
[root@serverc ~]# df -h /vbread/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vdough 50G 390M 50G 1% /vbread
5.2.5. reboot 重新開機
確保重新開機後,所有目錄都正常掛載。
如果無法正常開機,表示 /etc/fstab 中有錯誤,可以至 bastion 機器執行 rht-vmctl reset serverc 重置 serverc 回初始設定,並再次執行 initVDO.sh 擴展硬碟空間 。
6. 小結
VDO 是架設共享雲端空間非常好用的利器,如果有要打造公司內部分享可以使用此軟體,大大的降低儲存成本。
如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!