Автор Тема: Массив md RAID1 не активен после извлечения одного диска  (Прочитано 3093 раз)

Оффлайн grumbler

  • alt linux team
  • ***
  • Сообщений: 126
Идиотическая ситуация.

Код: (Сервер) [Выделить]
[root@servmul syslog]# cat /etc/altlinux-release
ALT Linux 7.0.5 Centaurus  (Pholus)
[root@servmul syslog]# uname -srm
Linux 3.8.13.4-std-def-alt1.M70P.2 x86_64

На сервере есть массив md версии 1.2 уровня RAID1 из трёх зеркал, устройство /dev/md127.
Также есть  массив md версии 0.9 уровня RAID1 из четырёх зеркал, устройство /dev/md1.
На /dev/md1 корень файловой системы, на /dev/127 - виртуальные машины.
Посыпался один из дисков (/dev/sda) и появились несколько сбойных блоков на втором (/dev/sdb). Диски гарантийные, нужно их вынуть и отвезти поставщику для замены.

Я убрал из массивов разделы со сбойного диска и выполнил fault для второго, но не выполнил --remove для него:
mdadm /dev/md1 -f /dev/sda4
mdadm /dev/md1 --remove /dev/sda4
mdadm /dev/md1 -f /dev/sdb4
mdadm /dev/md1 --remove /dev/sdb4
mdadm /dev/md127 -f /dev/sdb5

Сделал загрузочные записи EFI для каждого оставшегося диска и задал новый порядок загрузки.
Выключил сервер (корзина без горячей замены), вынул диски (как оказалось, можно было и не выключать - конструкция корпуса позволяет аккуратно отсоединить кабели и вынуть диски без выключения, вопрос только в аккуратности).
Включил сервер. То ли UEFI, то ли GRUB2 ругнулся на невозможность прочитать 0 сектор на диске и GRUB2 показал выбор загрузки. Пошла загрузка. После "populating dev" дбыл долгий тупёж и выкатился shell для восстановления "(initrd)". Я посмотрел /proc/mdstat - оба массива неактивны. Запустил оба:
mdstat -R /dev/md1
mdstat -R /dev/md127
Продолжил загрузку (Ctrl-D), после чего сервер нормально загрузился.
Для контроля штатно перезагрузил сервер:
reboot
НО! После перезагрузки оказалось, что /dev/md127 в неактивном состоянии. В логах про него - ни-че-го.
Очень хочу понять, в чём тут дело.

Для ясности: после вынимания сбойных дисков имена устройств sd* сдвинулись:
/dev/sdc стал /dev/sda, /dev/sdd стал /dev/sdb.

Код: ("/proc/mdstat:") [Выделить]
[root@servmul syslog]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda4[0] sdb4[3]
      7494208 blocks [4/2] [U__U]
     
md127 : inactive sda5[4](S) sdb5[3](S)
      3870154827 blocks super 1.2
       
unused devices: <none>
"mdadm --examine"
[root@servmul syslog]# mdadm -E /dev/sda5
/dev/sda5:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 7aa26ff5:74c89446:03f0a366:75229751
           Name : servmul.office:6  (local to host servmul.office)
  Creation Time : Thu May 29 16:09:21 2014
     Raid Level : raid1
   Raid Devices : 3

 Avail Dev Size : 3870154827 (1845.43 GiB 1981.52 GB)
     Array Size : 1935074752 (1845.43 GiB 1981.52 GB)
  Used Dev Size : 3870149504 (1845.43 GiB 1981.52 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 0db32d06:8990eb8b:2722295c:31701702

    Update Time : Fri Mar 27 18:49:09 2015
       Checksum : 5b176c57 - correct
         Events : 8434


   Device Role : Active device 0
   Array State : AAA ('A' == active, '.' == missing)
[root@servmul syslog]# mdadm -E /dev/sdb5
/dev/sdb5:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 7aa26ff5:74c89446:03f0a366:75229751
           Name : servmul.office:6  (local to host servmul.office)
  Creation Time : Thu May 29 16:09:21 2014
     Raid Level : raid1
   Raid Devices : 3

 Avail Dev Size : 3870154827 (1845.43 GiB 1981.52 GB)
     Array Size : 1935074752 (1845.43 GiB 1981.52 GB)
  Used Dev Size : 3870149504 (1845.43 GiB 1981.52 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : d71563bc:745efd54:2891a86f:44be0ed8

    Update Time : Fri Mar 27 18:49:09 2015
       Checksum : c3d55a20 - correct
         Events : 8434


   Device Role : Active device 2
   Array State : AAA ('A' == active, '.' == missing)
Протокол последней загрузки (из /var/log/syslog/messages): http://pastebin.com/QeWKSEmt
В нём нет ни слова про /dev/md127...

Запустил массив вручную, вот детали:
Спойлер
[root@servmul syslog]# mdadm -R /dev/md127
mdadm: started /dev/md127
[root@servmul syslog]# mdadm -D /dev/md127
/dev/md127:
        Version : 1.2
  Creation Time : Thu May 29 16:09:21 2014
     Raid Level : raid1
     Array Size : 1935074752 (1845.43 GiB 1981.52 GB)
  Used Dev Size : 1935074752 (1845.43 GiB 1981.52 GB)
   Raid Devices : 3
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Fri Mar 27 18:49:09 2015
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : servmul.office:6  (local to host servmul.office)
           UUID : 7aa26ff5:74c89446:03f0a366:75229751
         Events : 8434

    Number   Major   Minor   RaidDevice State
       4       8        5        0      active sync   /dev/sda5
       1       0        0        1      removed
       3       8       21        2      active sync   /dev/sdb5
« Последнее редактирование: 28.03.2015 10:13:10 от grumbler »

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 152
Linux 3.8.13.4-std-def-alt1.M70P.2 x86_64
Ядро бы поновее... там была ошибка с RAID, сейчас на багзилле попробую найти...
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 152
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 152
Судя по багу, можно обновить make-initrd и пересобрать initrd.
Но лучше всё же обновить ядро, наверно...
Сноси Винду, переходи на Линукс ! :)

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Для ясности: после вынимания сбойных дисков имена устройств sd* сдвинулись:
/dev/sdc стал /dev/sda, /dev/sdd стал /dev/sdb.
Это нормально, потому там все привязки по UUID, на самом деле, если они, вообще, нужны. В большинстве же случаев и не нужны - вся информация на разделах, mdadm этого достаточно должно быть. А про баг уже написали.

Оффлайн grumbler

  • alt linux team
  • ***
  • Сообщений: 126
Некоторое время назад я разобрался в проблеме.
Причина была в устаревшем /etc/mdadm.conf в initrd. Причём при обновлении ядра initrd не обновлялся из-за того, что в /etc/initrd.mk был указан несуществующий модуль.
Исправил, оставил в нём только строки
# trying to detect modules and features to access to root volume
AUTODETECT = all