Lvm

從容器內部呼叫 lvcreate 掛起

  • October 14, 2016

我執行一個容器。它具有所有功能並從根目錄掛載所有目錄(除了/proc)。當我lvcreate從裡面打電話時,我得到:

# lvcreate -v -L104857600B -n vol1 default
Finding volume group "default"
Archiving volume group "default" metadata (seqno 17).
Creating logical volume vol1
Creating volume group backup "/etc/lvm/backup/default" (seqno 18).
Activating logical volume "vol1".
activation/volume_list configuration setting not defined: Checking only host tags for default/vol1
Creating default-vol1
Loading default-vol1 table (252:4)
Resuming default-vol1 (252:4)

命令掛起。我也在日誌中得到這個:

Sep 12 12:03:31 node3 systemd-udevd[12529]: Process '/sbin/dmsetup udevcomplete 23072978' failed with exit code 1

如果我用ctrl- CI set 中斷它,則創建了邏輯卷。dmsetup udevcomplete_all我也可以通過從同一個容器內發出來中斷命令。如果我呼叫lvcreate主機,它會正常工作並乾淨地退出。

我相信,這個問題與未在容器和主機之間共享的 udev cookie 有關。但是,我不知道 lvm 究竟想在這裡做什麼以及如何解決這個問題。

我需要這個,以便容器化 kubelet 可以呼叫能夠分配邏輯卷的 flexvolume 外掛。

我會說你應該避免udev在這種情況下使用。使用 LVM 很容易做到這一點,並且 LVM 完全能夠自行處理捲和設備設置。

在您的/etc/lvm/lvm.conf文件中,您會發現以下幾行:

udev_sync = 0

udev_rules = 0

當我在那裡列印它們時,將這些值設置為零,看看是否可以清除它。至少會排除udev。您必須使卷離線才能進行此更改,因為您將從udev管理切換到 LVM 管理。

引用自:https://serverfault.com/questions/802766