LINUX.ORG.RU
ФорумAdmin

Не поднимается LVM зеркало при загрузке

 , ,


1

2

Текущий релиз Arch

2 HDD , на каждом нарезан 1g efi system раздел остальное под lvm

Disk /dev/sda: 9 GiB, 9663676416 bytes, 18874368 sectors


Device       Start      End  Sectors Size Type
/dev/sda1     2048  2099199  2097152   1G EFI System
/dev/sda2  2099200 18872319 16773120   8G Linux LVM


Disk /dev/sdb: 9 GiB, 9663676416 bytes, 18874368 sectors


Device       Start      End  Sectors Size Type
/dev/sdb1     2048  2099199  2097152   1G EFI System
/dev/sdb2  2099200 18872319 16773120   8G Linux LVM

ос была проинсталлирована на /dev/sdb2 , затем сделал lvconvert -m1 чтобы получить заркало на sda2, lvconvert сообщил что все отлично и будет raid1 resilency

так создавал

vgextend vg /dev/sda2
lvconvert -m1 vg/root

это получил

 lvs -a -o +devices
  LV              VG Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  root            vg rwi-aor--- 4.00g                                    100.00           root_rimage_0(0),root_rimage_1(0)
  [root_rimage_0] vg iwi-aor--- 4.00g                                                     /dev/sdb2(1)
  [root_rimage_1] vg iwi-aor--- 4.00g                                                     /dev/sda2(1)
  [root_rmeta_0]  vg ewi-aor--- 4.00m                                                     /dev/sdb2(0)
  [root_rmeta_1]  vg ewi-aor--- 4.00m                                                     /dev/sda2(0)


vgs -a -o +devices
  VG #PV #LV #SN Attr   VSize  VFree Devices
  vg   2   1   0 wz--n- 15.99g 7.98g root_rimage_0(0),root_rimage_1(0)
  vg   2   1   0 wz--n- 15.99g 7.98g /dev/sda2(1)
  vg   2   1   0 wz--n- 15.99g 7.98g /dev/sdb2(0)
  vg   2   1   0 wz--n- 15.99g 7.98g /dev/sda2(0)
  vg   2   1   0 wz--n- 15.99g 7.98g /dev/sdb2(1)


pvdisplay -m
  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               vg
  PV Size               <8.00 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              2047
  Free PE               1022
  Allocated PE          1025
  PV UUID               zzSyDP-xQuF-p9Os-ebv0-dugy-a6yK-q2SBDa

  --- Physical Segments ---
  Physical extent 0 to 0:
    Logical volume      /dev/vg/root_rmeta_0
    Logical extents     0 to 0
  Physical extent 1 to 1024:
    Logical volume      /dev/vg/root_rimage_0
    Logical extents     0 to 1023
  Physical extent 1025 to 2046:
    FREE

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               vg
  PV Size               <8.00 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              2047
  Free PE               1022
  Allocated PE          1025
  PV UUID               CKsfF6-aNyp-rStO-IaDB-J3sp-wn5V-Fkc0NV

  --- Physical Segments ---
  Physical extent 0 to 0:
    Logical volume      /dev/vg/root_rmeta_1
    Logical extents     0 to 0
  Physical extent 1 to 1024:
    Logical volume      /dev/vg/root_rimage_1
    Logical extents     0 to 1023
  Physical extent 1025 to 2046:
    FREE

установил grub в esp , само ядро лежит на lvm. Конфиг grub

cat /efi/grub/grub.cfg

menuentry 'Arch Linux, with Linux linux' {
 ..
        set root='lvmid/1YMttW-DhDc-Sk9s-QuyC-tEIM-iY75-xqj8aW/192Is5-CAez-XEwC-c1ZN-cn1z-doKd-WbB9Zc'
 ..
        echo    'Loading Linux linux ...'
        linux   /boot/vmlinuz-linux root=/dev/mapper/vg-root rw  loglevel=3
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initramfs-linux.img
}

скопировал содержимое efi system между обоими дисками, добавил ссылки на загрузчики в nvram

efibootmgr -c -b 1 -d /dev/sdb -p 1 -L "GRUB 1" -l "\EFI\GRUB\grubx64.efi"
efibootmgr -c -b 2 -d /dev/sda -p 1 -L "GRUB 2" -l "\EFI\GRUB\grubx64.efi"

т.е. должны получить возможность загрузится с любого диска при отказе одного. Так как на каждом идентичные ESP с загрузчиком и raid1 lvm. С двумя дисками без проблем загружаюсь с обоих загрузчиков меняя в bios порядок загрузки, часть с grub работает. Проблемы начинаются когда я отключаю целиком один диск. Загрузчик оставшегося запускает ядро но получаем

waiting for root device /dev/mapper/vg-root

и вываливаемся в консоль initrd без рута

ls /dev/mapper control .. пусто

в dmesg ошибок нет, он как будто и не пытался lvm том поднять pvs , vgs показывают что половинка lvm им видна, ругаются на disk missing том в статусе partial, тут все верно.

вопрос, почему не поднимается доступная половинка зеркала в рут и не идет загрузка? повторюсь, если оба диска подключены все работает отлично, при отключении любого из них все встает

есть подозрение что нужно в lvm.conf что-то сказать или добавить опцию ядра чтобы при отьехавшем pv lvm все таки поднимал мой root диск, но не могу ничего подобного найти.. по логике это должно быть поведение по умолчанию

solawind
() автор топика
Ответ на: комментарий от solawind

Это initramfs должен находить и активировать логические тома с опцией --activationmode degraded. В initramfs-ах, сделанных dracut-ом, это действительно есть. В initramfs-ах, сделанных арчевским велосипедным mkinitcpio, нету. Попробуй поставить dracut и пересобрать initramfs им.

iliyap ★★★★★
()
Ответ на: комментарий от futurama

видимо у меня были какие-то завышенные ожидания на тему того что система должна грузится отказавшим диском, поскольку там действительно как ананимус написал

/usr/bin/lvm pvscan –cache –listvg –checkcomplete –vgonline –autoactivation event –udevoutput

в правилах udev, т.е. явно приколочено в скриптах поднимать только полные lv. причем простой снос опции –checkcomplete ничего не меняет, pvscan все равно для неполных томов не выдает в udev нужную строку

solawind
() автор топика
Ответ на: комментарий от iliyap

c dracut все получилось, сразу загрузился с одним диском,как я и хотел

WARNING: Couldn’t find device with uuid zzSyDP-xQuF-p9Os-ebv0-dugy-a6yK-q2SBDa. WARNING: VG vg is missing PV zzSyDP-xQuF-p9Os-ebv0-dugy-a6yK-q2SBDa (last written to /dev/sdb2). — Logical volume — LV Path /dev/vg/root LV Name root VG Name vg LV Status available (partial)

сейчас поковыряю что там внутри iniramfs и в чем отличие, но mkinitcpio просто собирал лежащие в системе udev скрипты, не понятно в чем получается разница

solawind
() автор топика
Ответ на: комментарий от solawind

вообщем результаты изысканий такие (для тех кто наткнется на то же самое)

правила udev для lvm не поднимают lv если недоступны все pv. и это by design судя по

https://man.archlinux.org/man/lvmautoactivation.7.en

When all PVs in a VG have been attached, the VG is complete, and LVs in the VG are activated.

т.е. udev видит что pv начинают подьезжать но пока не подьехали все считает что возможно еще не все диски доступны и их продлжат подключить и поднимает тома только когда станут доступными все (при выходе диска из строя или отключения это очевидно никогда не произойдет)

dracut помимо правил udev исполняет свой скрипт https://github.com/zfsonlinux/dracut/blob/master/modules.d/90lvm/lvm_scan.sh который понимает что он выполняется при загрузке и пинает в состояние available все что lvchange –yes -K -ay может поднять. Конец

solawind
() автор топика
Ответ на: комментарий от solawind

udev видит что pv начинают подьезжать но пока не подьехали все считает что возможно еще не все диски доступны и их продлжат подключить и поднимает тома только когда станут доступными все

udev проще чем ты описал. прямо какой-то ИИ, а не банальный триггер на обнаружение железа

futurama ★★★★★
()
Ответ на: комментарий от futurama

ну я написал ту логику что у него в скриптах. он проверяет каждый подьехавший pv и если еще не все доступны ничего не делает, как только подьедет последний поднимет lv.

это имеет смысл и работает когда у тебя vg на отдельных внешних дисках которые могут например с san подьезжать поочередно но в моем сценарии загрузки lvm с одним отказавшим диском не сработает.

solawind
() автор топика
Ответ на: комментарий от solawind

Всё так, vgchange сунули в udev rules

Но там в скриптах исп. функция

mountroot()
{
    local_mount_root
}

перед вызовом local_mount_root можно добавить

/sbin/lvm vgchange -ay --activationmode degraded ...
futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)