Bug 38151

Summary: Не собирается LVM при event_activation =1
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: lvm2Assignee: Alexey Shabalin <shaba>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: evg, mcpain, rider, shaba, vitty
Version: unstable   
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=37737

Description Vitaly Lipatov 2020-02-25 17:38:58 MSK
Если система загружается с разваленным RAID (например, вследствие
https://bugzilla.altlinux.org/show_bug.cgi?id=37737), то LVM не собирается автоматически, и после ожидания создаваемых им устройств (полторы минуты) предлагается залогиниться в аварийном режиме.
Где достаточно ввести
# vgchange -a y
# exit
и загрузка системы  будет успешно продолжена.

# rpm -qf /sbin/lvm
lvm2-2.03.5-alt1.x86_64

Насколько это ожидаемое поведение?
Comment 1 Vitaly Lipatov 2020-03-06 15:27:41 MSK
После исправления bug 37737 появилось уточнение:
LVM в любом случае не собирается автоматически.

Похоже, что это связано
# cat /lib/systemd/system/lvm2-pvscan@.service
[Unit]
Description=LVM event activation on device %i
Documentation=man:pvscan(8)
DefaultDependencies=no
StartLimitIntervalSec=0
BindsTo=dev-block-%i.device
Before=shutdown.target
Conflicts=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/lvm pvscan --cache --activate ay %i
ExecStop=/sbin/lvm pvscan --cache %i

В списке устройств я вижу только несколько блочных устройств, при том, что их гораздо больше:
# systemctl list-units --all
  dev-block-259:4.device                                                                                                                                   loaded    active     plugged   WDS250G3X0C-00SJG0 5                                                                        
  dev-block-259:5.device                                                                                                                                   loaded    active     plugged   WDS250G3X0C-00SJG0 6                                                                        
  dev-block-8:97.device                                                                                                                                    loaded    active     plugged   WDC_WD3000HLFS-01MZUV0 1   

Какие ссылки на тему:
https://github.com/lvmteam/lvm2/issues/24
https://sourceware.org/git/?p=lvm2.git;a=commit;h=6b12930860a993624d6325aec2e9c561f4412aa9
Comment 2 Vitaly Lipatov 2020-03-06 15:30:40 MSK
Видимо, при загрузке что-то идёт не так:
 # journalctl -b -u lvm2-pvscan@259:4.service
-- Logs begin at Thu 2020-01-30 06:10:12 MSK, end at Fri 2020-03-06 15:30:12 MSK. --
мар 06 12:53:15 hektor.office.etersoft.ru lvm[2133]:   pvscan[2133] PV /dev/nvme0n1p5 online, VG lvm0 incomplete (need 2).
мар 06 12:53:13 hektor.office.etersoft.ru systemd[1]: Starting LVM event activation on device 259:4...
мар 06 12:53:13 hektor.office.etersoft.ru systemd[1]: Started LVM event activation on device 259:4.
Comment 3 Vitaly Lipatov 2020-03-21 18:26:47 MSK
(Ответ для Vitaly Lipatov на комментарий #2)
> Видимо, при загрузке что-то идёт не так:
>  # journalctl -b -u lvm2-pvscan@259:4.service
> -- Logs begin at Thu 2020-01-30 06:10:12 MSK, end at Fri 2020-03-06 15:30:12
> MSK. --
> мар 06 12:53:15 hektor.office.etersoft.ru lvm[2133]:   pvscan[2133] PV
> /dev/nvme0n1p5 online, VG lvm0 incomplete (need 2).
> мар 06 12:53:13 hektor.office.etersoft.ru systemd[1]: Starting LVM event
> activation on device 259:4...
> мар 06 12:53:13 hektor.office.etersoft.ru systemd[1]: Started LVM event
> activation on device 259:4.


Нашёл исправление, которую должно устранять конкуренцию при запуске нескольких pvscan:
https://sourceware.org/git/?p=lvm2.git&a=commitdiff&h=74a388cca15baa4149a24e37bccb421c53f726e5

Из него следует, что один из процессов должен создать каталог с именем volume group в /run/lvm/vgs_online.

В данном случае этого не происходит (есть только 

[root@hektor ~]# ls /run/lvm/vgs_online/ -l
итого 0
-rw------- 1 root root 0 мар 21 14:48 TMP

[root@hektor ~]# ls /run/lvm/pvs_online/ -l
итого 12
-rw------- 1 root root 12 мар 21 14:48 EAaoEOePvcFzvthMeYS3XtcBjcq1tCbV
-rw------- 1 root root 13 мар 21 14:48 fCMIZoeM79WKTu0e6RywvE9PCUQqPUdH
-rw------- 1 root root 14 мар 21 14:48 QFKtuYER3MtyeJUdYhmTEoannyP9vfww

При том, что VG несколько больше:
# pvs
  PV             VG     Fmt  Attr PSize    PFree   
  /dev/md10      HOME   lvm2 a--  <465,76g  304,00m
  /dev/md2       lvm0   lvm2 a--  <912,88g       0 
  /dev/md3       lvm0   lvm2 a--   371,90g  271,90g
  /dev/md4       HYBRID lvm2 a--   111,72g       0 
  /dev/md5       HYBRID lvm2 a--   223,44g       0 
  /dev/md6       HYBRID lvm2 a--   130,15g  324,00m
  /dev/nvme0n1p5 lvm0   lvm2 a--  <140,00g  796,00m
  /dev/nvme0n1p6 TMP    lvm2 a--    74,25g   <1,16g
  /dev/sdg1      TMP    lvm2 a--  <279,46g <179,43g


UID, перечисленные в pvs_online, соответствуют трём последним PV из вывода pvs (и они были созданы последними).

Возможно, остальные PV какие-то старые?
Comment 4 Vitaly Lipatov 2020-03-21 18:36:53 MSK
(Ответ для Vitaly Lipatov на комментарий #2)
> Видимо, при загрузке что-то идёт не так:
>  # journalctl -b -u lvm2-pvscan@259:4.service
> -- Logs begin at Thu 2020-01-30 06:10:12 MSK, end at Fri 2020-03-06 15:30:12
> MSK. --
> мар 06 12:53:15 hektor.office.etersoft.ru lvm[2133]:   pvscan[2133] PV
> /dev/nvme0n1p5 online, VG lvm0 incomplete (need 2).

static int _online_pv_found(struct cmd_context *cmd,
                            struct device *dev, struct dm_list *dev_args,
                            struct volume_group *vg,
                            struct dm_list *found_vgnames)
{
...
        /*
         * Check if all the PVs for this VG are online.  This is only
         * needed when autoactivating the VG which should be run only
         * when the VG is complete.  If the arrival of this dev completes
         * the VG, then we want to activate the VG.
         */

        dm_list_iterate_items(pvl, &vg->pvs) {
                if (!_online_pvid_file_exists((const char *)&pvl->pv->id.uuid))
                        pvids_not_online++;

                /* Check if one of the devs on the command line is in this VG. */
                if (dev_args && dev_in_device_list(pvl->pv->dev, dev_args))
                        dev_args_in_vg = 1;
        }

        /*
         * Return if we did not find an online file for one of the PVIDs
         * in the VG, which means the VG is not yet complete.
         */

        if (pvids_not_online) {
                log_print("pvscan[%d] PV %s online, VG %s incomplete (need %d).",
                          getpid(), dev_name(dev), vg->name, pvids_not_online);
                return 1;
        }
...
Comment 5 Vitaly Lipatov 2020-03-21 18:56:29 MSK
Проблему удалось обойти отключением активации по событию появления устройства:

/etc/lvm/lvm.conf

# Configuration option global/event_activation.
# Activate LVs based on system-generated device events.
# When a device appears on the system, a system-generated event runs
# the pvscan command to activate LVs if the new PV completes the VG.
# Use auto_activation_volume_list to select which LVs should be
# activated from these events (the default is all.)
# When event_activation is disabled, the system will generally run
# a direct activation command to activate LVs in complete VGs.
event_activation = 0
Comment 6 Олег Соловьев 2021-01-20 11:47:47 MSK
ping
Comment 7 Олег Соловьев 2021-01-20 13:33:24 MSK
event_activation = 0 больше не помогает.

Содержимое lsblk и blkid:

NAME       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda          8:0    0   32G  0 disk 
├─sda1       8:1    0  255M  0 part /boot/efi
└─sda2       8:2    0 31,8G  0 part 
  ├─alt-gg 253:0    0   16G  0 lvm  /
  └─alt-ez 253:1    0 15,7G  0 lvm  
sr0         11:0    1 1024M  0 rom  

/dev/sda1: UUID="6CB4-BA78" TYPE="vfat" PARTUUID="1ed3f02d-db93-a449-a880-4d492e9307a3"
/dev/sda2: UUID="2UJ1Ya-L25G-clF5-H088-7cZS-76hF-7j1YyU" TYPE="LVM2_member" PARTUUID="d32b570b-3c1b-3749-9986-ee8db327634f"
/dev/mapper/alt-gg: UUID="1b7fa562-9d4e-45e9-81bf-0c290efe678c" TYPE="ext4"
/dev/mapper/alt-ez: UUID="c808ce56-f085-5543-809d-a6a958284b57" TYPE="crypto_LUKS"
Comment 8 Олег Соловьев 2021-01-20 14:07:46 MSK
Если хомяк не шифровать, система грузится.