Lvm

lvmvdo 不會對我的數據進行重複數據刪除

  • April 25, 2022

我正在安裝 lvmvdo con Debian 11.2 來儲存 Proxmox vm 磁碟,執行以下操作:

1) apt install -y build-essential libdevmapper-dev libz-dev uuid-dev git sudo libblkid-dev man vim dwarves dkms lvm2

2)export PATH=$PATH:/usr/sbin

3) git clone https://github.com/dm-vdo/kvdo.git cd kvdo/ make -C /usr/src/linux-eaders-`uname -r` M=`pwd`
cp vdo/kvdo.ko /lib/modules/$(uname -r) && cp uds/uds.ko /lib/modules/$(uname -r)

4)git clone https://github.com/dm-vdo/vdo.git cd vdo/ && make && make install

5)depmod -a update-initramfs -u

6)echo uds >>/etc/modules && echo kvdo >> /etc/modules

7)reboot

8) modprobe kvdo && modprobe uds

9) lsmod |grep vdo
kvdo                  540672  1
uds                   270336  1 kvdo
dm_mod                163840  12 kvdo,dm_thin_pool,dm_bufio

10) pvcreate /dev/sda
vgcreate vgdo /dev/sda
lvcreate --type vdo --name vdolv --size 7G --virtualsize 8G vgdo
mkfs.ext4 -E nodiscard /dev/vgdo/vdolv

11)mount /dev/vgdo/vdolv /mnt/vdo/
df -h
S.ficheros             Tamaño Usados  Disp Uso% Montado en
/dev/mapper/vgdo-vdolv   7,8G    24K  7,4G   1% /mnt/vdo

12)cp /tmp/rhel-8.5-x86_64-kvm.qcow2 /mnt/vdo/ &&df -h
S.ficheros             Tamaño Usados  Disp Uso% Montado en
/dev/mapper/vgdo-vdolv   7,8G   744M  6,7G  10% /mnt/vdo

13)cp /tmp/rhel-8.5-x86_64-kvm.qcow2 /mnt/vdo/rhel-8.5-x86_64-kvm2.qcow2
S.ficheros             Tamaño Usados  Disp Uso% Montado en
/dev/mapper/vgdo-vdolv   7,8G   1,5G  6,0G  20% /mnt/vdo

14)lvs -o+vdo_compression,vdo_deduplication
LV     VG   Attr       LSize Pool   Origin Data%  Meta%  Move Log Cpy%Sync Convert VDOCompression VDODeduplication
vdolv  vgdo vwi-XXv-X- 8,00g vpool0                                                       enabled          enabled

正如您在第 12 步和第 13 步中看到的那樣,我正在複製一個 qcow2 映像,並且我的數據在沒有任何重複數據刪除過程的情況下仍在增長,同樣的行為發生在 .iso .mkv 和其他測試文件中。

我不知道我做錯了什麼,請任何人幫助我。

我的最終目標是使用全新安裝的 Debian 和工作 VDO 來安裝 proxmox。

您不能使用dfVDO 檢查重複數據刪除和壓縮節省了多少數據。從文件系統的角度來看(也從df透視圖)設備大小為 8 GiB(在您的情況下),並且不涉及重複數據刪除或壓縮,因此兩個約 750 MiB 的文件將使用 1.5 GiB 的空間。所有節省都發生在塊層上——這就是為什麼在創建 LVM VDO 時指定兩種大小的原因——更小的“真實”物理大小和更大的虛擬大小。對於虛擬大小,您說“我假設啟用重複數據刪除和壓縮後,我將在此處容納多達 X 倍的數據”。您告訴文件系統它有 8 GiB 的空間,塊層將在不告訴文件系統的情況下以更有效的方式儲存數據。(這類似於精簡配置,您告訴文件系統它有比池中實際擁有的更多空間。)

如果要查看實際使用了多少空間,則應Data%同時查看 VDO 邏輯捲和池的列或使用vdostats命令。

因此,例如使用 1.9 GiB ISO,您將獲得:

# cp ~/Downloads/Fedora-Workstation-Live-x86_64-35-1.2.iso /mnt/vdo
# df -h /mnt/vdo
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/vdo-VDOLV   49G  1.9G   45G   5% /mnt/vdo
# vdostats --all | grep "data blocks used"
 data blocks used                    : 485743

(塊是 1K,所以這大約是 474 MiB)。在第二次複製 ISO 之後:

# cp ~/Fedora-Workstation-Live-x86_64-35-1.2.iso /mnt/vdo/Fedora-Workstation-Live-x86_64-35-1.2.iso.2 
# df -h /mnt/vdo
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/vdo-VDOLV   49G  3.8G   43G   9% /mnt/vdo
# vdostats --all | grep "data blocks used"
 data blocks used                    : 485770

您現在可以看到df輸出顯示雙倍使用空間,但實際數據使用量僅增長了幾個塊。

再給你兩個注意事項:

  • 8 GiB 的虛擬大小與 7 GiB 的物理大小很小,您通常會將虛擬大小設置為物理大小的 5 到 10 倍
  • 7 GiB 是一個非常小的 VDO 卷。VDO為元數據使​​用了大量空間,並且元數據大小不會縮小到這樣的大小,對於小於 1 TiB 的捲,它將是 2 到 4 GiB,因此對於幾 GiB 的數據來說它確實沒有用處。

(如果您只是測試 LVM VDO 並確保一切正常,兩者都可以。)

引用自:https://unix.stackexchange.com/questions/686472