Bug 37737

Summary: Сборка RAID происходит до появления устройств от модуля mptsas
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: make-initrd-mdadmAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: glebfm, iv, klark, ldv, legion, placeholder, vitty
Version: unstable   
Hardware: all   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=38151
Attachments:
Description Flags
dmesg log
none
dmesg успешной загрузки
none
dmesg md/raid1:md0: active with 1 out of 3 mirrors none

Description Vitaly Lipatov 2020-01-08 21:56:07 MSK
Created attachment 8510 [details]
dmesg log

При сборке RAID ещё не появились устройства от внешнего контроллера и RAID собирается в битом виде.

Порядок в dmesg такой:
[    8.568518] scsi 5:0:0:0: Direct-Access     ATA      WDC WD1001FALS-0 1D05 PQ: 0 ANSI: 5
[    8.570999] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
...
[    8.812807] md/raid1:md10: active with 1 out of 2 mirrors
[    8.813668] md10: detected capacity change from 0 to 500106723328
...
[   13.040681] scsi host9: ioc0: LSISAS1068E B3, FwRev=01210000h, Ports=1, MaxQ=483, IRQ=34
[   13.080163] mptsas: ioc0: attaching sata device: fw_channel 0, fw_id 6, phy 0, sas_addr 0x857f3322a091938d
[   13.085145] scsi 9:0:0:0: Direct-Access     ATA      WDC WD1001FALS-0 1D05 PQ: 0 ANSI: 5
[   13.085489] scsi 9:0:0:0: Power-on or device reset occurred
[   13.095582] mptsas: ioc0: attaching sata device: fw_channel 0, fw_id 4, phy 1, sas_addr 0x73853822a4a69892
[   13.100668] scsi 9:0:1:0: Direct-Access     ATA      WDC WD1003FBYX-0 1V01 PQ: 0 ANSI: 5
[   13.101408] scsi 9:0:1:0: Power-on or device reset occurred
[   13.103662] sd 9:0:0:0: [sde] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)

Лог загрузки приложен.
Буду признателен за совет по объезду и по правильному решению проблемы.
Comment 1 Vitaly Lipatov 2020-02-25 01:40:32 MSK
Проверено, что если initrd не пересоздать после добавления нового массива в /etc/mdadm.conf, то он не будет создан с определённым /dev/mdX в initrd, а соберётся позже как /dev/md127 (из двух дисков).
Это опровергает гипотезу, что массив не собирается потому что некорректно разобран при выключении.
Остаётся неясным,
а) почему никто не ждёт появления всех дисков, чтобы начать сборку
б) почему диски не добавляются в массив по мере появления.
Comment 2 Alexey Gladkov 2020-02-25 01:59:34 MSK
покажите что у вас в /etc/mdadm.conf ?
Comment 3 Vitaly Lipatov 2020-02-25 02:34:12 MSK
(Ответ для Alexey Gladkov на комментарий #2)
> покажите что у вас в /etc/mdadm.conf ?

# cat /etc/mdadm.conf
...

MAILADDR root
PROGRAM /sbin/mdadm-syslog-events
DEVICE partitions

ARRAY /dev/md4 metadata=1.2 UUID=48a8b4f6:6d48dd85:350c1fb0:166832ef
ARRAY /dev/md6 metadata=1.2 UUID=dbb58427:c345cb5e:88ad6810:fc79d73e
ARRAY /dev/md5 metadata=1.2 UUID=bb3614d5:7c6833c1:e7a1971f:f4840b10
ARRAY /dev/md1 metadata=0.90 UUID=24dabf5a:c5a6ae9a:af9c670f:4765e0d1
ARRAY /dev/md2 metadata=0.90 UUID=4897d400:9291ba6b:8bd99fc9:de48af39
#INACTIVE-ARRAY /dev/md122 metadata=0.90 UUID=0687566e:d65f5ca6:db6af4b1:307d278e
ARRAY /dev/md10 metadata=0.90 UUID=56eda4e4:1a0cbc55:4c46a314:a514544e
ARRAY /dev/md3 level=raid1 num-devices=2 metadata=1.2 UUID=7a646703:65bee733:d06d7682:7e44a9a3
Comment 4 Alexey Gladkov 2020-02-25 12:08:36 MSK
ну, кажется, понятно. У вас много рейдов в конфиге, а initrd не ждёт всех. Он по умолчанию ждёт только рут.
Comment 5 Vitaly Lipatov 2020-02-25 13:19:23 MSK
(Ответ для Alexey Gladkov на комментарий #4)
> ну, кажется, понятно. У вас много рейдов в конфиге, а initrd не ждёт всех.
> Он по умолчанию ждёт только рут.
Тем не менее, он собирает рут на одном диске, хотя их три в массиве.
Если ему нужен только рут, зачем он собирает остальные.

Я не просто не понимаю, как выбраться из этой ситуации.
В p8 с make-initrd-0.8.16-alt3 такой проблемы нет. Здесь p9 и make-initrd-2.4.0-alt1
Comment 6 Alexey Gladkov 2020-02-25 13:37:53 MSK
(Ответ для Vitaly Lipatov на комментарий #5)
> Тем не менее, он собирает рут на одном диске, хотя их три в массиве.
> Если ему нужен только рут, зачем он собирает остальные.

Если речь о том, зачем initrd собирает все остальные рейды, то initrd в момент загрузки не знает какой рейд собирать. udev видит диски с вызывает mdadm пока не появится девайс с файловой системой и запрашиваемым в root= UUID/LABEL. Как только рутовый раздел становится доступен initrd прекращает сборку рейдов и передаёт управление системному init.

> Я не просто не понимаю, как выбраться из этой ситуации.

Попробуйте сделать для initrd свой отдельный mdadm.conf с только рутовым массивом.

> В p8 с make-initrd-0.8.16-alt3 такой проблемы нет. Здесь p9 и
> make-initrd-2.4.0-alt1
Comment 7 Vitaly Lipatov 2020-02-25 13:47:25 MSK
(Ответ для Alexey Gladkov на комментарий #6)
> (Ответ для Vitaly Lipatov на комментарий #5)
> > Тем не менее, он собирает рут на одном диске, хотя их три в массиве.
> > Если ему нужен только рут, зачем он собирает остальные.
> 
> Если речь о том, зачем initrd собирает все остальные рейды, то initrd в
> момент загрузки не знает какой рейд собирать. udev видит диски с вызывает
> mdadm пока не появится девайс с файловой системой и запрашиваемым в root=
> UUID/LABEL. Как только рутовый раздел становится доступен initrd прекращает
> сборку рейдов и передаёт управление системному init.
Но в итоге он собирает массив из одного диска, потому что остальные диски появляются секундой позже.

> 
> > Я не просто не понимаю, как выбраться из этой ситуации.
> 
> Попробуйте сделать для initrd свой отдельный mdadm.conf с только рутовым
> массивом.
Это явно поможет, но там где-то произойдёт автосборка (причём опять же в initrd?), и массивы будут с левыми номерами.
Comment 8 Alexey Gladkov 2020-02-25 14:06:11 MSK
(Ответ для Vitaly Lipatov на комментарий #7)
> Но в итоге он собирает массив из одного диска, потому что остальные диски
> появляются секундой позже.

Я полагаю, что диски у вас инициализируются дольше, чем таймаут, после которого выполняется mdadm -IR.

Тут тонкий момент с таймаутами. Если не пытаться грузиться с деградированным рейдом, то при выходе из строя диска загрузится не получится вообще. Но если диски инициализируются достаточно долго, то может вот такая ситуация, когда диски не успевают вовремя появиться.

> > Попробуйте сделать для initrd свой отдельный mdadm.conf с только рутовым
> > массивом.
> Это явно поможет, но там где-то произойдёт автосборка (причём опять же в
> initrd?), и массивы будут с левыми номерами.

Интересно. Вроде бы mdadm не должен делать автодетект делать без разрешения.

На всякий случай, можете показать содержимое /var/lib/initrd/`uname -r`.initrd/features ?
Comment 9 Vitaly Lipatov 2020-02-25 17:33:56 MSK
(Ответ для Alexey Gladkov на комментарий #8)
> (Ответ для Vitaly Lipatov на комментарий #7)
> > Но в итоге он собирает массив из одного диска, потому что остальные диски
> > появляются секундой позже.
> 
> Я полагаю, что диски у вас инициализируются дольше, чем таймаут, после
> которого выполняется mdadm -IR.
Судя по логу, у меня это 5 секунд.
 
> Тут тонкий момент с таймаутами. Если не пытаться грузиться с деградированным
> рейдом, то при выходе из строя диска загрузится не получится вообще. Но если
Согласен, пытаться нужно, это правильно.

> диски инициализируются достаточно долго, то может вот такая ситуация, когда
> диски не успевают вовремя появиться.
Может быть, таймаут настраивается? Примерно как rootdelay.

> 
> > > Попробуйте сделать для initrd свой отдельный mdadm.conf с только рутовым
> > > массивом.
> > Это явно поможет, но там где-то произойдёт автосборка (причём опять же в
> > initrd?), и массивы будут с левыми номерами.
> 
> Интересно. Вроде бы mdadm не должен делать автодетект делать без разрешения.
> 
> На всякий случай, можете показать содержимое /var/lib/initrd/`uname
> -r`.initrd/features ?

# uname -r
5.4.17-un-def-alt1

# cat /var/lib/initrd/`uname -r`.initrd/features
add-modules
buildinfo
cleanup
compress
kbd
mdadm
network
rdshell
rootfs
system-glibc
ucode
Comment 10 Alexey Gladkov 2020-02-25 18:18:53 MSK
Я совершенно согласен, что это очень неприятная регрессия. Я постараюсь как можно оперативнее придумать решение.
Comment 11 Alexey Gladkov 2020-02-27 22:10:56 MSK
Можете проверить бранч[1] с предполагаемым фиксом ?

[1] http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=shortlog;h=refs/heads/fix-mdadm-timeout
Comment 12 Alexey Gladkov 2020-03-06 13:19:40 MSK
В сизиф ушёл make-initrd-2.5.0-alt1. В нём применяется скользящий таймаут т.е. таймаут отсчитывается от последнего инициализированного диска (raid_member). По умолчанию этот таймаут 10 секунд, но его можно изменить через параметр загрузки raid-member-delay=<SECS>.
Comment 13 Vitaly Lipatov 2020-03-06 14:20:52 MSK
(Ответ для Alexey Gladkov на комментарий #11)
> Можете проверить бранч[1] с предполагаемым фиксом ?
> 
> [1]
> http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.
> git;a=shortlog;h=refs/heads/fix-mdadm-timeout

При сборке:
warning: Installed (but unpackaged) file(s) found:
    /usr/libexec/make-initrd/mi-file

Поставил пакеты, в
/etc/sysconfig/grub2
вписал ожидание 
-GRUB_CMDLINE_LINUX_DEFAULT='panic=30 splash'
+GRUB_CMDLINE_LINUX_DEFAULT='panic=30 raid-member-delay=5'

выполнил
# make-initrd
# update-grub

и сборка прошла успешно

Перезагрузил — RAID собрался полностью. Работает!
Comment 14 Vitaly Lipatov 2020-03-06 14:27:14 MSK
Created attachment 8652 [details]
dmesg успешной загрузки
Comment 15 Alexey Gladkov 2020-03-06 16:20:16 MSK
(Ответ для Vitaly Lipatov на комментарий #13)
> При сборке:
> warning: Installed (but unpackaged) file(s) found:
>     /usr/libexec/make-initrd/mi-file

Спасибо большое! Я проглядел это.
Comment 16 Vitaly Lipatov 2020-06-04 14:52:32 MSK
Created attachment 8825 [details]
dmesg  md/raid1:md0: active with 1 out of 3 mirrors

Снова натолкнулся на то, что массив собирается раньше, чем появятся все его диски. Причём при горячей перезагрузке этого нет. Время примерно такое, то есть без пауз:

...
[    2.424628] sd 4:0:1:0: [sda] Attached SCSI disk
[    2.438645] ata4: SATA link down (SStatus 0 SControl 300)
[    2.441554] md: Autodetecting RAID arrays.
[    2.441834] md: autorun ...
[    2.441860] md: running: <sda1>
[    2.445033] md/raid1:md0: active with 1 out of 3 mirrors
...
[    2.593610] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
...
[    2.874187] md: md0 already running, cannot run sdb1


make-initrd-2.5.0-alt1
ядро 4.19.84-std-def-alt1
Comment 17 Alexey Gladkov 2020-06-10 18:35:59 MSK
(Ответ для Vitaly Lipatov на комментарий #16)
> Создано вложение 8825 [details] [подробности]
> dmesg  md/raid1:md0: active with 1 out of 3 mirrors
> 
> Снова натолкнулся на то, что массив собирается раньше, чем появятся все его
> диски. Причём при горячей перезагрузке этого нет. Время примерно такое, то
> есть без пауз:
> 
> ...
> [    2.424628] sd 4:0:1:0: [sda] Attached SCSI disk
> [    2.438645] ata4: SATA link down (SStatus 0 SControl 300)
> [    2.441554] md: Autodetecting RAID arrays.
> [    2.441834] md: autorun ...
> [    2.441860] md: running: <sda1>
> [    2.445033] md/raid1:md0: active with 1 out of 3 mirrors
> ...
> [    2.593610] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
> ...
> [    2.874187] md: md0 already running, cannot run sdb1
> 
> 
> make-initrd-2.5.0-alt1
> ядро 4.19.84-std-def-alt1

Интересно. А до этого работало ?
Comment 18 Vitaly Lipatov 2020-06-10 20:05:52 MSK
(Ответ для Alexey Gladkov на комментарий #17)
...
> > [    2.874187] md: md0 already running, cannot run sdb1
> > 
> > 
> > make-initrd-2.5.0-alt1
> > ядро 4.19.84-std-def-alt1
> 
> Интересно. А до этого работало ?
Я почти уверен, что причина в том, что рейд развален аварийным выключением, поэтому и не собирается.
Просто из этого лога не видно, почему он так поспешил собраться.

Поскольку глючность компьютера подтвердилась, проблемы нет, разве что в информативности.