У меня есть сервер с 3 жесткими дисками sata. Каждый из них имеет 2 раздела: один маленький является частью /dev/md0, массива raid1 (/boot), остальные являются частью массива raid5 (/dev/md1), который является физическим томом lvm. Внутри него находятся 3 (IIRC) логических тома. Один из них — это reiserfs 3.6 fs, содержащий около 100 гигабайт данных.
Вчера этот сервер сломался. При включении питания SMART сообщил мне, что один из дисков мертв. Он действительно издавал очень неприятные звуки. Поэтому я удалил неисправный диск и попытался перезапустить систему на 2 оставшихся дисках. Но это не удалось.
С помощью live cd я запустил его и попытался перезапустить массив. К сожалению, mdadm отказался это сделать, потому что посчитал, что один из двух оставшихся дисков также вышел из строя.
Итак, следуя совету, найденному наКак восстановить аварийный массив Linux md RAID5?казалось, что это можно применить к моей ситуации, я сделал что-то, что, вероятно, было просто глупостью: я побежал
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sd[ab]2 missing
Теперь я могу запустить этот массив, но инструменты lvm (vgscan, vgdisplay, pvck) не могут найти ничего, связанного с lvm на массиве, и я совершенно не могу получить доступ к своим данным. Я только что стер все метаданные lvm?
Мне кажется, что фактические данные все еще там, неповрежденные (кроме метаданных lvm). Есть ли шанс вернуть данные? Как?
ОБНОВЛЯТЬ:
Следуя совету psusi (ниже), я попробовал каждый из следующих способов воссоздания массива:
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sda2 /dev/sdb2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sdb2 /dev/sda2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sda2 missing /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sdb2 missing /dev/sda2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 missing /dev/sda2 /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 missing /dev/sdb2 /dev/sda2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sda2 /dev/sdb2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sdb2 /dev/sda2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sda2 missing /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sdb2 missing /dev/sda2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 missing /dev/sda2 /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 missing /dev/sdb2 /dev/sda2
Что в принципе все возможные заказы, как с -c64, так и с -c512. После каждого теста я запускал vgscan. Ни один ничего не нашел. Может, мне не vgscan использовать, а какой-то другой инструмент?
ОБНОВЛЕНИЕ 2:
Я попробовал переподключить неисправный жесткий диск. И чудо, это, кажется, работает. По крайней мере, достаточно, чтобы осмотреть его:
root@debian:~# mdadm --examine /dev/sda2
/dev/sda2:
Magic : a92b4efc
Version : 0.90.00
UUID : 1f5462ab:6945560d:019b01a5:914dd464
Creation Time : Fri Oct 17 12:40:40 2008
Raid Level : raid5
Used Dev Size : 160015360 (152.60 GiB 163.86 GB)
Array Size : 320030720 (305.21 GiB 327.71 GB)
Raid Devices : 3
Total Devices : 3
Preferred Minor : 1
Update Time : Tue Apr 12 08:15:03 2011
State : active
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Checksum : 64d514fb - correct
Events : 137
Layout : left-symmetric
Chunk Size : 64K
Number Major Minor RaidDevice State
this 0 8 2 0 active sync /dev/sda2
0 0 8 2 0 active sync /dev/sda2
1 1 8 18 1 active sync /dev/sdb2
2 2 8 34 2 active sync /dev/sdc2
Итак, есть ли способ скопировать этот суперблок на два других устройства, чтобы я мог запустить массив «правильно»?
решение1
У меня похожая установка, и я могу порекомендовать иметь полный Linux на небольшом разделе каждого диска инетзеркалируйте эти небольшие разделы, но сделайте их по отдельности полностью загрузочными.
Вы можете sync
настроить, исключив несколько важных файлов ( /etc/fstab
конфигурация grub). Это занимает больше места, чем просто, /boot
но экономит много времени, когда возникают проблемы.
решение2
Вероятно, вы не собрали диски в том же порядке или не использовали тот же размер фрагмента, что и раньше. Вам нужно выяснить, какой был порядок раньше, и использовать тот же порядок при повторном создании массива. Другими словами, это мог быть не третий диск, который умер, а первый или второй, возможно, вы перепутали sda и sdb.
решение3
Как @псуси намекнулФормат метаданных — это, кажется, kye — теперь по умолчанию «1.2», а не «0.9». Жаль, но это может привести к потере данных, так как 1.2 использует смещение 4 KiB:
1, 1.0, 1.1, 1.2 по умолчанию Используйте новый формат суперблока версии 1. Он имеет меньше ограничений. Его можно легко перемещать между хостами с разным порядком байтов, а операцию восстановления можно контролировать и перезапускать. Различные подверсии хранят суперблок в разных местах на устройстве: в конце (для 1.0), в начале (для 1.1) или в 4 КБ от начала (для 1.2).
Совет (увы, запоздалый): никогда не спешите пересоздавать массив, не попробовав сделать это с помощью -B
— build:
-B, --build Build a legacy array without superblocks
ОБНОВЛЕНИЕ.: оказалось -B
отказывается строить RAID-5… :-/