Ubuntu

如何在 Ubuntu 20.04 上安裝 vdo/kvdo?

  • January 18, 2022

我想知道是否有辦法在 Ubuntu 20.04中安裝Red Hat 的 vdo 。

到目前為止,我已經嘗試下載原始碼並進行編譯,但出現以下錯誤:

cc -fPIC -fpic -D_GNU_SOURCE -g -O3 -fno-omit-frame-pointer -Wall -Wcast-align -Werror -Wextra -Winit-self -Wlogical-op -Wmissing-include-dirs -Wpointer-arith -Wredundant-decls -Wunused -Wwrite-strings    -std=gnu99 -pedantic -Wbad-function-cast -Wcast-qual -Wfloat-equal -Wformat=2 -Wmissing-declarations -Wmissing-format-attribute -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wswitch-default   -I. -I../uds -Wno-write-strings -DCURRENT_VERSION="\"8.1.0.316\""   -c -MMD -MF .deps/vdoformat.d.new -MP -MT vdoformat.o -o vdoformat.o vdoformat.c
vdoformat.c:22:10: fatal error: blkid/blkid.h: No such file or directory
  22 | #include <blkid/blkid.h>
     |          ^~~~~~~~~~~~~~~
compilation terminated.

我不明白為什麼會出現錯誤,因為我已經安裝了libblkid包。


真正困擾我的是lvmvdo有一個聯機幫助頁(我猜是 Red Hat VDO 到 Ubuntu 的“埠”),但它只說:

為了使用 lvm(8) 標準 VDO 使用者空間工具 vdoformat(8) 和目前非標準核心 VDO 模組“kvdo”,需要在系統上安裝 VDO。

我確實在 Ubuntu 20.04 中預設安裝了 lvm 包,但我找不到安裝vdoformatkvdo包的方法。

經過幾天的嘗試和錯誤…我找到了在 Ubuntu 中實際使用vdo的方法(至少在 20.04 中)…

首先,快速更新,然後安裝一些必要的軟體包:

apt update -y && apt upgrade -y && \
apt install git build-essential libdevmapper-dev libz-dev uuid-dev flex bison linux-source libblkid-dev -y

現在,為了確保將核心(預設為 5.4)升級到 5.9,然後重新啟動:

wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900_5.9.0-050900.202010112230_all.deb && \
wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb && \
wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-image-unsigned-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb && \
wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-modules-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb && \
dpkg -i *.deb && \
shutdown now -r

您現在需要kvdo,它是能夠使用 vdo 的核心實用程序,下一個命令複製 repo 然後編譯它:

git clone https://github.com/rhawalsh/kvdo.git && \
cd kvdo && \
make -C /usr/src/linux-headers-5.9.0-050900-generic/ M=$('pwd') modules

然後更新我們的Module.symvers,並將 kvdo 模組複製到相應的文件夾:

cat Module.symvers >> /lib/modules/5.9.0-050900-generic/build/Module.symvers && \
mkdir /lib/modules/5.9.0-050900-generic/extra/ && \
cp /opt/kvdo/uds/uds.ko /lib/modules/5.9.0-050900-generic/extra/ && \
cp /opt/kvdo/vdo/kvdo.ko /lib/modules/5.9.0-050900-generic/extra/

現在我們要求核心更新所有模組,然後檢查它是否已安裝(如果modprobe kvdo沒有顯示任何內容,則說明安裝正確):

depmod -a && \
modprobe kvdo

您可以測試已安裝的 kvdo 版本:

modinfo kvdo

modinfo kvdo
filename:       /lib/modules/5.9.0-050900-generic/extra/kvdo.ko
version:        8.1.0.316
license:        GPL
author:         Red Hat, Inc.
description:    device-mapper target for transparent deduplication
srcversion:     F021DCCB4284C7E05BCCF77
depends:        uds
retpoline:      Y
name:           kvdo
vermagic:       5.9.0-050900-generic SMP mod_unload 

核心工具已安裝,現在我們需要使用者空間工具(vdo),接下來的命令複製 vdo 儲存庫並編譯它:

git clone https://github.com/rhawalsh/vdo.git && \
cd vdo && \
make && \
make install

您可以測試它是否安裝正確:

vdoformat --version

現在您可以像在 CentOS 中一樣使用 vdo….

我不明白為什麼會出現錯誤,因為我已經安裝了 libblkid 包。

您需要libblkid-dev包含blkid/blkid.h標頭檔的包。

真正困擾我的是 lvmvdo 的聯機幫助頁(我猜是 RedHat VDO 到 Ubuntu 的“埠”),但它只說:

不,這不是 VDO 的一個埠,這是將 VDO 集成到LVM中,它允許您創建啟用重複數據刪除和/或壓縮的 LVM 邏輯卷。這不是對 VDO 的重新實現,LVM 使用現有的 VDO 程式碼——vdoformat使用者空間工具和kvdo核心模組,因此您仍然需要安裝兩者才能使 LVM 實現工作。

我確實在 Ubuntu 20.04 中預設安裝了 lvm 包,但我找不到安裝 vdoformat 或 kvdo 包的方法。

VDO 在 Ubuntu 中不可用(wishlist bug for 20.10)所以你需要自己編譯它(你已經開始了)但是你需要編譯並手動安裝包含使用者空間工具的dm-vdo/vdo項目(包括vdoformat使用LVM)和包含核心模組的dm-vdo/kvdokvdo項目(即lvmvdo 手冊頁中提到的“包”)。

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