Package: dmeventd Version: 2:1.02.155-2 Severity: critical Tags: upstream Justification: causes serious data loss
Dear Maintainer, i have set up a raid1 in lvm. it's a simple configuration to verify the long term stability and use of lvm as my storage system. in /etc/lvm/lvm.conf, i've set activation.raid_fault_policy="allocate" which FWICT is intented to do something akin to hot-spares - to rebuild the raid automatically on failure. here's my lvm configuration: root@abacus:~# pvs /dev/sd[abc]; vgs raid; lvs raid/raid PV VG Fmt Attr PSize PFree /dev/sda raid lvm2 a-- <3.64t <3.64t /dev/sdb raid lvm2 a-- <3.64t 3.63t /dev/sdc raid lvm2 a-- <3.64t 3.63t VG #PV #LV #SN Attr VSize VFree raid 3 1 0 wz--n- <10.92t <10.91t LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert raid raid rwi-aor-r- 5.00g 100.00 current devices in the raid: root@abacus:~# lvs -a -o name,raid_sync_action,sync_percent,copy_percent,devices raid LV SyncAction Cpy%Sync Cpy%Sync Devices raid idle 100.00 100.00 raid_rimage_0(0),raid_rimage_1(0) [raid_rimage_0] /dev/sdc(1) [raid_rimage_1] /dev/sdb(1) [raid_rmeta_0] /dev/sdc(0) [raid_rmeta_1] /dev/sdb(0) this raid was made with `lvcreate --type raid1`. to simulate a raid failure, i run something like: echo offline > /sys/class/block/sdc/device/state eventually the raid will fail, but dmeventd will print this message in syslog: WARNING: Device #1 of raid1 array, raid-raid, has failed. WARNING: waiting for resynchronization to finish before initiating repair on RAID device raid-raid. having looked at the code, daemons/dmeventd/plugins/raid/dmeventd_raid.c, this piece of code is SUPPOSED to trigger `lvconvert --repair`, but it does not because it thinks that the raid is out of sync or something. if i run `lvconvert --repair` by hand, the raid will be repaired using the remaining PV. if i look at the output of `dmsetup status` i see this for the raid: root@abacus:~# dmsetup status raid-raid 0 10485760 raid raid1 2 AD 10485760/10485760 idle 0 0 - i have patched my local dmeventd to print more information when it parses the device mapper event. here's a log of it during simulated raid failure: Apr 30 22:39:18 abacus lvm[22973]: dm_get_status_raid: params=raid1 2 AD 0/10485760 recover 0 0 - Apr 30 22:39:18 abacus lvm[22973]: dm_get_status_raid: num_fields=8 Apr 30 22:39:18 abacus lvm[22973]: dm_get_status_raid: insync_regions=0 total_regions=10485760 Apr 30 22:39:18 abacus lvm[22973]: WARNING: Device #1 of raid1 array, raid-raid, has failed. Apr 30 22:39:18 abacus lvm[22973]: WARNING: waiting for resynchronization to finish before initiating repair on RAID device raid-raid. Apr 30 22:39:18 abacus lvm[22973]: WARNING: insync_regions=0 total_regions=10485760 here we see that the event that devicemapper actually parses in dm_get_status_raid() function does report 0 for the insync_regions variable. i don't have time to investigate futher currently, but the outstanding question is simply: given these circumstances, why does dmeventd not rebuild the raid automatically? i've marked this bug as critical because this issue represents data loss for anyone whose raid was not automatically repaired if they expected it to be. -- System Information: Debian Release: buster/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 4.19.0-4-amd64 (SMP w/16 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages dmeventd depends on: ii libblkid1 2.33.1-0.1 ii libc6 2.28-8 ii libdevmapper-event1.02.1 2:1.02.155-2 ii libdevmapper1.02.1 2:1.02.155-2 ii liblvm2cmd2.03 2.03.02-2 ii libselinux1 2.8-1+b1 ii libudev1 241-3 dmeventd recommends no packages. dmeventd suggests no packages. -- no debconf information