Если инфорация оказалась интересна и/или полезна, не побрезгуйте, оставьте комментарий ;)

четверг, 23 июня 2022 г.

Ошибка mdadm. RAID-группа не собирается после перезагрузки сервера. Решение

Столкнулся со следующей ситуацией. Создаю RAID-группу через mdadm:

vgeniy@micro-gen10plus:~$ sudo lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
[sudo] password for evgeniy:
NAME     SIZE FSTYPE   TYPE MOUNTPOINT
loop0   61,9M squashfs loop /snap/core20/1434
loop1   61,9M squashfs loop /snap/core20/1405
loop2   44,7M squashfs loop /snap/snapd/15534
loop3   79,9M squashfs loop /snap/lxd/22923
sda    931,5G          disk
├─sda1     1G vfat     part /boot/efi
└─sda2 930,5G ext4     part /
sdb      2,7T          disk
└─sdb1   2,7T ntfs     part
sdc      2,7T          disk
└─sdc1   2,7T ntfs     part
sdd      2,7T          disk
└─sdd1   2,7T ntfs     part
  
evgeniy@micro-gen10plus:~$ sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

evgeniy@micro-gen10plus:~$ sudo mdadm --detail --scan
ARRAY /dev/md/0 metadata=1.2 spares=1 name=micro-gen10plus:0 UUID=8566dba5:1daed0e0:e6cd5d42:6226d071

evgeniy@micro-gen10plus:~$  sudo mdadm --examine --scan
ARRAY /dev/md/0  metadata=1.2 UUID=8566dba5:1daed0e0:e6cd5d42:6226d071 name=micro-gen10plus:0

evgeniy@micro-gen10plus:~$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.15.0-39-generic

Вроде бы всё хорошо. Но после перезагрузки том md0 исчезает. Все команды дают пустой вывод

evgeniy@micro-gen10plus:~$ ls /dev |grep md

evgeniy@micro-gen10plus:~$ sudo mdadm --examine --scan

evgeniy@micro-gen10plus:~$ sudo mdadm --assemble --scan

evgeniy@micro-gen10plus:~$ sudo mdadm --detail --scan
  
evgeniy@micro-gen10plus:~$ sudo mdadm --assemble --scan --verbose
mdadm: looking for devices for /dev/md0
mdadm: No super block found on /dev/sdc (Expected magic a92b4efc, got 00000000)
mdadm: no RAID superblock on /dev/sdc
mdadm: No super block found on /dev/sdd (Expected magic a92b4efc, got 00000000)
mdadm: no RAID superblock on /dev/sdd
mdadm: No super block found on /dev/sdb (Expected magic a92b4efc, got 00000000)
mdadm: no RAID superblock on /dev/sdb
mdadm: No super block found on /dev/sda2 (Expected magic a92b4efc, got 00000476)
mdadm: no RAID superblock on /dev/sda2
mdadm: No super block found on /dev/sda1 (Expected magic a92b4efc, got 00000000)
mdadm: no RAID superblock on /dev/sda1
mdadm: No super block found on /dev/sda (Expected magic a92b4efc, got 00000000)
mdadm: no RAID superblock on /dev/sda
mdadm: No super block found on /dev/loop4 (Expected magic a92b4efc, got 3a23b8f9)
mdadm: no RAID superblock on /dev/loop4
mdadm: No super block found on /dev/loop3 (Expected magic a92b4efc, got 9e3929c1)
mdadm: no RAID superblock on /dev/loop3
mdadm: No super block found on /dev/loop2 (Expected magic a92b4efc, got 87eca499)
mdadm: no RAID superblock on /dev/loop2
mdadm: No super block found on /dev/loop1 (Expected magic a92b4efc, got 3a23b8f9)
mdadm: no RAID superblock on /dev/loop1
mdadm: No super block found on /dev/loop0 (Expected magic a92b4efc, got a6eff301)
mdadm: no RAID superblock on /dev/loop0

Ситуация нестандартная. Может возникнуть при следующем сочетании факторов: вы используете при создании RAID не разделы, а тома (например, не /dev/sdb1, а /dev/sdb). Диск был ранее в использовании и "отформатирован" с разметкой GPT (GUID partition table). Особенности материнской платы, которая зачищает суперблок RAID'а.

Решение достаточно простое. Надо удалить c каждого диска, включаемого в RAID-группу, таблицу разделов GPT командой sgdisk с ключом --zap. В моем случае это выглядит так:

evgeniy@micro-gen10plus:~$ sudo sgdisk --zap /dev/sdb
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.

evgeniy@micro-gen10plus:~$ sudo sgdisk --zap /dev/sdc
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.

evgeniy@micro-gen10plus:~$ sudo sgdisk --zap /dev/sdd
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Из хороших новостей. Удаление таблицы GPT можно делать на дисках уже после создания RAID-группы и записи данных в тома, размещенные на ней. Это не приведет... не должно привести к потере данных.

После этого надо пересоздать RAID-группу. И это тоже не должно привести к потере данных:

evgeniy@micro-gen10plus:~$ sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: partition table exists on /dev/sdb
mdadm: partition table exists on /dev/sdc
mdadm: partition table exists on /dev/sdd
mdadm: size set to 2930134016K
mdadm: automatically enabling write-intent bitmap on large array
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

evgeniy@micro-gen10plus:~$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.15.0-39-generic
Проверяем, что данные на месте
evgeniy@micro-gen10plus:~$ sudo mount /dev/md0 /media/md0

evgeniy@micro-gen10plus:~$ ls /media/md0/
downloads  lost+found  query
Для проверки перезагружаем сервер:
evgeniy@micro-gen10plus:~$ sudo reboot

evgeniy@micro-gen10plus:~$ sudo mdadm --detail --scan --verbose

ARRAY /dev/md/0 level=raid5 num-devices=3 metadata=1.2 spares=1 name=micro-gen10plus:0 UUID=8566dba5:1daed0e0:e6cd5d42:6226d071
   devices=/dev/sdb,/dev/sdc,/dev/sdd

evgeniy@micro-gen10plus:~$ sudo mdadm --detail --scan
ARRAY /dev/md/0 metadata=1.2 spares=1 name=micro-gen10plus:0 UUID=8566dba5:1daed0e0:e6cd5d42:6226d071

evgeniy@micro-gen10plus:~$ ls /dev |grep md
md
md0

Дополнительные замечания:

  1. Данные должны сохранится, но резервное копирование никто не отменял.
  2. Сохранять конфигурацию в /etc/mdadm/mdadm.conf, как рекомендуют в некоторых руководствах, не надо.
  3. При повторном создании RAID-группы ее идентификатор изменится. Если вы всё же использовали /etc/mdadm/mdadm.conf на предыдущих шагах, и в нем сохранен устаревший идентификатор, то RAID-группа после перезагрузки всё равно создастся. Но устройство этой группы может стать не md0, md127. После удаления из /etc/mdadm/mdadm.conf записи о группе и перезагрузке имя устройства вернется к md0.

Решение найдено тут

Комментариев нет: