Нежелательные вложенные lvm-маппинги

Столкнулись тут с такой проблемой, что lvm на хост-машине подцепляет volume groups с LV-шек, на которых лежат виртуальные машины kvm.

Наша конфигурация такова, что есть железные сервера, и на них крутятся виртуальные машины kvm под гипервизором proxmox. По iSCSI подключен SAN, настроен multipath. Поверх iSCSI block device настроен lvm. Под каждую виртуальную машину proxmox нарезает logical volume на этом lvm.

Суть проблемы

Когда внутри виртуалок не используется lvm, всё хорошо. Но если он там есть, то lvm с хост-машины начинает находить "вложенные" PVs. Выглядит примерно так:

# pvs
  PV                         VG      Fmt  Attr PSize   PFree  
  /dev/mapper/mpatha         vg-fast lvm2 a--   14.80t   2.21t
  /dev/mapper/mpathb         vg-slow lvm2 a--   14.00t   1.15t
  /dev/sda3                  pve     lvm2 a--    3.27t 199.99g
  /dev/vg-fast/vm-221-disk-2 docker  lvm2 a--  128.00g   2.57g
  /dev/vg-fast/vm-247-disk-2 docker  lvm2 a--   64.00g   1.29

Вот эти две нижние PV на хост-машине совершенно не нужны, это внутренняя кухня VM.

Причём, если в нескольких VM-ках есть VG с одинаковым названием, на хост-машине начинается накопление тысяч файлов в /etc/lvm/archive/ вида:

# l /etc/lvm/archive/
total 6920
drwx------ 2 root root 6684672 Oct  2 16:06 ./
-rw------- 1 root root    3072 Oct  2 16:06 docker_00095-1747040817.vg
-rw------- 1 root root    3092 Oct  2 16:06 docker_00094-2112026967.vg
-rw------- 1 root root    3092 Oct  2 16:06 docker_00093-139939991.vg
-rw------- 1 root root    3072 Oct  2 16:06 docker_00092-1873650965.vg
-rw------- 1 root root    3072 Oct  2 16:05 docker_00091-358773432.vg
-rw------- 1 root root    3092 Oct  2 16:05 docker_00090-754533553.vg
-rw------- 1 root root    3092 Oct  2 16:05 docker_00089-68775250.vg
...

Из-за этого даже могут кончиться inodes на хост-машине.

В общем, эта ситуация очень нежелательна.

Решение

В данной ситуации нам надо настроить фильтрацию нежелательных девайсов в /etc/lvm/lvm.conf, чтобы lvm не пытался сканировать LV-шки.

Для этой цели есть директива filter, но она в данном случае не работает, потому что lvm дёргается по событию от udev и там этот фильтр переопределён в командной строке.

Нам нужна директива global_filter, - она работает во всех случаях.

Итак, прописываем в lvm.conf нечто вроде:

global_filter = [ "r|vg-.*|", "r|dm-.*|", "a/.*/" ]

Здесь r работает как "remove", а a как "append". Т.е. мы фильтруем имена девайсов, которые начинаются с "vg-" и "dm-". Вам надо будет поправить "vg-" под свои названия, а "dm-" надо оставить, т.к. это все device-mapper девайсы вида /dev/dm-*.

Смотрим pvs:

~# pvs
  PV                 VG      Fmt  Attr PSize  PFree  
  /dev/mapper/mpatha vg-fast lvm2 a--  14.80t   2.21t
  /dev/mapper/mpathb vg-slow lvm2 a--  14.00t   1.15t
  /dev/sda3          pve     lvm2 a--   3.27t 199.99g

Всё стало хорошо, никаких вложенных lvm PVs не обнаруживается.

Нашлась в некоторой степени похожая проблема, но там несколько иная ситуация: https://serverfault.com/questions/678642/linux-device-mapper-maps-lvm-pv-nested-inside-lv-when-taking-snapshot

P.S.

Статья "на всякий случай", вдруг кто-то столкнётся и нагуглит. В 50/50 не участвует, т.к.на Голосе такой ЦА пока что практически нет.

linuxlvmdocker
25%
106
13
2.300 GOLOS
0
В избранное
vvk
Opensource. У меня в комментах можно материться. Второй блог "за жизнь" - @vvk-life
13
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (2)
Сортировать по:
Сначала старые