Вопрос или проблема
Два года назад я создал массив 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 в безопасной среде, чтобы избежать риска полной потери данных.