mdadm: собрать raid5, созданный с отсутствующим диском

Вопрос или проблема

Два года назад я создал массив raid5 с 2 дисками следующим образом:

mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 missing

Теперь я переустанавливаю свою систему с последней версией ubuntu server LTS, и mdadm не собирает работающий массив:

root@htpc:~# mdadm -E /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 530afddc:f4e62791:eba1539c:15672d1d
           Name : ubuntu:0
  Creation Time : Сб Авг 17 11:37:44 2019
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 11720778895 (5588.90 GiB 6001.04 GB)
     Array Size : 11720778752 (11177.81 GiB 12002.08 GB)
  Used Dev Size : 11720778752 (5588.90 GiB 6001.04 GB)
    Data Offset : 264192 sectors
   Super Offset : 8 sectors
   Unused Space : before=264112 sectors, after=143 sectors
          State : active
    Device UUID : 1c03a042:a40c1eb8:8aa0533c:22a74311

Internal Bitmap : 8 sectors from superblock
    Update Time : Пт Апр  9 17:24:44 2021
  Bad Block Log : 512 entries available at offset 32 sectors
       Checksum : eaaa2b7f - correct
         Events : 223469

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AA. ('A' == active, '.' == missing, 'R' == replacing)
root@htpc:~# mdadm -E /dev/sdc1
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x9
     Array UUID : 530afddc:f4e62791:eba1539c:15672d1d
           Name : ubuntu:0
  Creation Time : Сб Авг 17 11:37:44 2019
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 11720778895 (5588.90 GiB 6001.04 GB)
     Array Size : 11720778752 (11177.81 GiB 12002.08 GB)
  Used Dev Size : 11720778752 (5588.90 GiB 6001.04 GB)
    Data Offset : 264192 sectors
   Super Offset : 8 sectors
   Unused Space : before=264112 sectors, after=143 sectors
          State : active
    Device UUID : 019a2ef9:f11076b3:7060bf02:3b6ba98e

Internal Bitmap : 8 sectors from superblock
    Update Time : Пт Апр  9 17:24:44 2021
  Bad Block Log : 512 entries available at offset 32 sectors - bad blocks present.
       Checksum : e0624aba - correct
         Events : 223469

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AA. ('A' == active, '.' == missing, 'R' == replacing)
root@htpc:~# mdadm --assemble --scan
mdadm: /dev/md/ubuntu:0 assembled from 2 drives - not enough to start the array while not clean - consider --force.
mdadm: No arrays found in config file or automatically
root@htpc:~# mdadm --detail /dev/md127
/dev/md127:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 2
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 2

              Name : ubuntu:0
              UUID : 530afddc:f4e62791:eba1539c:15672d1d
            Events : 223469

    Number   Major   Minor   RaidDevice

       -       8       33        -        /dev/sdc1
       -       8       17        -        /dev/sdb1
root@htpc:~#

При создании моего массива raid5 с отсутствующим диском синхронизации вообще не было, так что это “фейковый” raid5, вероятно, что-то вроде raid0, и я не удивлён выходу mdadm при сборке.
Но я не хочу ошибиться, так что какие у меня есть варианты на этом этапе?

  • запустить массив в этом состоянии с помощью

    mdadm –start /dev/md127

Я не уверен в этом, так как метаданные на каждом диске говорят о raid 5 …

  • Теперь у меня есть третий диск с чистым разделом /dev/sdd1, стоит ли попробовать

    mdadm –assemble /dev/md0 /dev/db1 /dev/sdc1 /dev/sdd1

В этом случае я думаю, что mdadm попытается восстановить массив, но для этого mdadm будет ожидать данные, распределенные по полосам raid 5 на первых 2 дисках, но их нет, так как это что-то вроде raid 0 …

Мне действительно нужно восстановить эти данные, но я потерян в поисках правильной команды.
Любая помощь будет оценена 🙂

Итого

Сначала лучше дважды проверить вручную, действительно ли всё в ожидаемом состоянии и вы не потеряете никакой информации. Это делается с помощью mdadm --examine --scan и mdadm --examine /dev/sdXY (компонент), lsblk, blkid, проверяя dmesg и так далее. С помощью команд examine вы узнаете UUID массивов, которые у вас есть:

# mdadm --examine --scan
ARRAY /dev/md/0  metadata=1.2 UUID=6bbeca3f:5284fd0a:e15d62ec:b6a5a9a4 name=vh1:0
ARRAY /dev/md/1  metadata=1.2 UUID=cc82d789:94c6c7c2:11e57657:710a4175 name=vh1:1
ARRAY /dev/md/2  metadata=1.2 UUID=ddfbcbfd:9c11fd11:72eab0f2:88e595b1 name=vh1:2

Когда вы будете уверены, что знаете, что делаете, используйте --assemble --force, чтобы принудительно собрать конкретный массив:

mdadm --assemble --force --uuid ddfbcbfd:9c11fd11:72eab0f2:88e595b1 /dev/md/2

или все массивы сразу:

mdadm --assemble --force --scan

Удачи!

Объяснение

Программный RAID в Linux отслеживает, в каком состоянии был массив, когда его в последний раз видели в работе. Он записывает, работал ли массив в оптимальном или деградированном состоянии и какие устройства были присутствуют (какие слоты массива были заняты). Эта информация хранится внутри суперблока MD. Подробности описаны в MD RAID wiki.

Команда mdadm --examine /dev/sdXY покажет вам декодированное содержимое суперблока на /dev/sdXY, если он там присутствует:

/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : cc82d789:94c6c7c2:11e57657:710a4175
           Name : vh1:1  (локально для хоста vh1)
  Creation Time : Пт Авг 28 16:54:57 2020
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1953257472 (931.39 GiB 1000.07 GB)
     Array Size : 976628736 (931.39 GiB 1000.07 GB)
    Data Offset : 264192 sectors
   Super Offset : 8 sectors
   Unused Space : before=264112 sectors, after=0 sectors
          State : active
    Device UUID : 93be2645:7b75bdb5:89f489ac:003794ff

Internal Bitmap : 8 sectors from superblock
    Update Time : Чт Июн  3 10:26:30 2021
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 4c9ddac1 - correct
         Events : 16674


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

Это может помочь ответить на некоторые вопросы “почему”.

Когда MD начинает и сканирует все подходящие устройства на наличие суперблоков, он проверяет, действительно ли всё соответствует записанной информации. Если что-то не совпадает, он не соберёт этот массив автоматически. Это делается по нескольким причинам, например, некоторые устройства могут медленно инициализироваться, и лучше подождать, пока всё запустится, и запустить массив напрямую в оптимальном состоянии, чем запускать массив в деградированном состоянии, а затем выполнять восстановление, когда появится позднее устройство.

Но если позднее устройство никогда не появится, например, было физически удалено, массив не начнёт работу сам по себе. В этом случае вы можете заставить его начать с помощью --force, если ещё достаточно устройств для его работы в деградированном состоянии.

Смотрите также этот ответ.

Ответ или решение

Как собрать массив RAID 5 с отсутствующим диском с помощью mdadm

Создание и управление массивами RAID с использованием утилиты mdadm является распространенной практикой в сфере системного администрирования и управления данными. Ваша ситуация требует особого внимания, поскольку массив RAID 5 был первоначально создан с использованием двух дисков и одного отсутствующего, что делает его довольно нестандартным. Рассмотрим шаги и рекомендации по восстановлению вашего массива RAID 5 в текущей ситуации.

1. Понимание состояния массива и его компонентов

Ваш массив RAID 5 был создан командой:

mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 missing

Это означает, что массив был настроен на работу с двумя фактическими дисками (sdb1 и sdc1) и третьим отсутствующим диском. Учитывая, что массив RAID 5 требует, чтобы каждый блок данных располагался на трех устройствах, отсутствие одного из дисков означает, что он не может функционировать в стандартном режиме.

Результат анализа блоков (mdadm -E) показывает, что оба диска являются активными и формируют массив, но не могут собрать его по причине недостатка активных устройств для правильной работы в состоянии RAID 5:

mdadm: /dev/md/ubuntu:0 assembled from 2 drives - not enough to start the array while not clean - consider --force.

2. Подходы к сборке массива

Поскольку вы пытаетесь восстановить данные, перед выполнением каких-либо операторов следует убедиться в наличии резервной копии важных данных, если это возможно. Вот несколько способов, как можно действовать в этой ситуации:

2.1. Простой старт массива

Путем использования команды mdadm --assemble --force, вы можете попытаться принудительно собрать массив, даже если он в аварийном состоянии. Это может выглядеть следующим образом:

mdadm --assemble --force /dev/md0 /dev/sdb1 /dev/sdc1

Однако учтите, что это может привести к потере данных или нестабильному поведению, если фактические данные не соответствуют конструкту RAID 5. Ваша интуиция о том, что массив более похож на RAID 0, может быть правильной.

2.2. Использование нового диска

Если у вас есть новый диск (например, /dev/sdd1), вы можете попробовать добавить его в массив. Однако при этом нужно быть осторожным, так как mdadm будет ожидать, что данные располагаются на всех устройствах в зависимости от конфигурации RAID 5. Используйте следующую команду:

mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1

Но прежде чем делать это, убедитесь, что вы проанализировали состояние каждого из дисков и их UUID, чтобы избежать ошибок.

3. Восстановление данных

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

3.1. Проверьте состояние массива и его содержимое

Используйте mdadm --detail /dev/md0 и cat /proc/mdstat после сборки массива, чтобы проверить его состояние. Если массив собрался успешно, выполните команду для мониторинга:

cat /proc/mdstat

Это покажет состояние вашего массива, будь то «active» или «degraded».

3.2. Сохраните данные

После успешной сборки массива следует со всей серьезностью подойти к резервному копированию данных:

# Пример резервного копирования
cp -a /mnt/raid_data /path/to/backup/

4. Заключение

Изучив вашу ситуацию, вы можете выбрать любой из приведенных методов. Главное — действовать осторожно и заранее делать бэкапы, чтобы минимизировать потенциальные потери данных. RAID 5 хорошо защищает данные, но риск остаться без доступа к информации в нестандартных ситуациях всегда присутствует.

Примечание: Всегда проводите тестирование и работу с массивами RAID в безопасной среде, чтобы избежать риска полной потери данных.

Оцените материал
Добавить комментарий

Капча загружается...