Я унаследовал NAS-сервер с 5 мягкими массивами RAID1, сгруппированными в группу томов XFS.
Тот, кто построил 5-е устройство md, создал его без раздела Linux Auto RAID (похоже, они сделали mdadm --create, используя необработанный диск (т.е. / dev / sdj / dev / sdk). До сих пор он работал нормально, но сегодня весь массив / dev / md5 исчез.
The /dev/sdj drive appears to be in the process of failing.
Buffer I/O error on /dev/sdj logical block 0
Buffer I/O error on /dev/sdj logical block 1
Buffer I/O error on /dev/sdj logical block 2
Buffer I/O error on /dev/sdj logical block 3
Обычно я ожидал, что RAID откажет устройство, но оставьте массив на втором диске. Однако, когда я использую cat / proc / mdstat, мое устройство md5 исчезает. Я подозреваю, что это связано с тем, что на этих двух дисках не было раздела Auto RAID, но я не уверен.
Я пытался воссоздать массив md5, используя
mdadm --create /dev/md5 --level=1 --raid-devices=2 /dev/sdj /dev/sdk
но он говорит, что sdj уже является частью RAID-устройства
Странно то, что группа томов XFS, похоже, все еще работает нормально - насколько я могу судить, данные не теряются, а df по-прежнему показывает все доступное пространство. Может быть, XFS все еще видит диск / dev / sdk и может успешно писать на него? Оба sdj и sdk отображаются с fdisk -l.
Мои вопросы:
Вывод pvscan:
pvscan
/dev/sdj: read failed after 0 of 4096 at 0: Input/output error
/dev/sdj: read failed after 0 of 4096 at 2000398843904: Input/output error
PV /dev/sdd2 VG VolGroup00 lvm2 [74.41 GB / 0 free]
PV /dev/md2 VG dedvol lvm2 [931.51 GB / 0 free]
PV /dev/md3 VG dedvol lvm2 [931.51 GB / 0 free]
PV /dev/md0 VG dedvol lvm2 [931.51 GB / 0 free]
PV /dev/md4 VG dedvol lvm2 [931.51 GB / 0 free]
PV /dev/sdj VG dedvol lvm2 [1.82 TB / 63.05 GB free]
Total: 6 [5.53 TB] / in use: 6 [5.53 TB] / in no VG: 0 [0 ]
Disk /dev/sdj: 2000.3 GB, 2000398934016 bytes 255 heads, 63 sectors/track, 243201 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk /dev/sdj doesn't contain a valid partition table Disk /dev/sdk: 2000.3 GB, 2000398934016 bytes 255 heads, 63 sectors/track, 243201 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk /dev/sdk doesn't contain a valid partition table
mdadm --misc -Q /dev/sdj /dev/sdj: is not an md array /dev/sdj: No md super block found, not an md component. mdadm --misc -Q /dev/sdk /dev/sdk: is not an md array /dev/sdk: device 0 in 2 device undetected raid1 /dev/md5. Use mdadm --examine for more detail.
mdadm --examine /dev/sdk /dev/sdk: Magic : a92b4efc Version : 0.90.00 UUID : 25ead1e4:9ab7f998:73875d59:48b17be5 Creation Time : Fri Nov 26 21:10:49 2010 Raid Level : raid1 Used Dev Size : 1953514496 (1863.02 GiB 2000.40 GB) Array Size : 1953514496 (1863.02 GiB 2000.40 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 5 Update Time : Sat Mar 26 07:43:52 2011 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Checksum : 35a405cb - correct Events : 5720270 Number Major Minor RaidDevice State this 0 8 144 0 active sync /dev/sdj 0 0 8 144 0 active sync /dev/sdj 1 1 8 160 1 active sync /dev/sdk
Итак, по суперблоку на /dev/sdk
, был /dev/md5
и sdj был там с ним, но согласно /dev/sdj
, рейдового суперблока нет. Я боюсь, что /dev/sdj
был добавлен в массив md5, затем /dev/sdj
был добавлен в группу томов (вместо /dev/md5
) и в какой-то момент lvm переписал блоки, которые идентифицировали его как член RAID-устройства. Я боюсь этого, потому что я, честно говоря, не могу придумать, как по-другому / dev / sdj в конечном итоге будет назван специально в группе LVM и больше не будет иметь суперблока рейда.
Худший кошмарный сценарий: в LVM были добавлены и / dev / sdj, и / dev / md5. Ваш раздел XFS теперь больше 5,5 ТБ в LVM? Если это так, вы сможете вернуть md5, используя mdadm --assemble
но вы должны быть уверены, что он запущен в деградированном режиме без sdj, чтобы он не перезаписывал данные там.
(... ты когда-нибудь смотрел на pvscan
до сегодня?)
Если у вас нет резервных копий, самое время начать. Если да, то сейчас самое время их протестировать (а если они не работают, у вас нет резервных копий, см. Шаг 1).
Нет простого выхода из этого беспорядка, и я понятия не имею, что может произойти, если вы перезагрузитесь в этот момент (можете ли вы размонтировать файловую систему?). Если Я был уверен, что на самом деле произошло то, что sdj был добавлен как рейд-драйв и как физический том lvm (поскольку lvm не использовал драйвер raid для записи в sdj, ни один из данных, записанных в sdj, не будет на sdk ... возможно, это можно проверить, сравнив шестнадцатеричные дампы различных фрагментов / dev / sdj и / dev / sdk и кто-то более умный, чем я, который знает хорошие места для поиска вещей, которые могли бы сказать «это XFS» против «это случайная тарабарщина или пустой диск»?), то что бы я сделал, это это :
Начните с попытки получить данные SMART на sdk, чтобы узнать, заслуживают ли они доверия или находятся в процессе выхода.
Если sdk хорош, то я бы поблагодарил своих счастливчиков за то, что бывший администратор потратил впустую 63 ГБ /dev/sdj
.
fdisk /dev/sdk
(дважды проверьте ВСЕ, прежде чем нажать клавишу возврата). Попросите fdisk создать таблицу разделов и раздел md (на man-странице mdadm говорится, что нужно использовать 0xDA, но в каждом пошаговом руководстве и моем собственном опыте указано 0xFD для автоматического определения рейда), затем
mdadm --create /dev/md6 --level=1 --raid-devices=2 missing /dev/sdk1
(дважды проверьте ВСЕ, прежде чем нажать клавишу возврата). Это создаст деградированный массив raid1 с именем md6, используя раздел, который мы создали на sdk. Вот почему это потраченное впустую пространство так важно: мы потеряли некоторое пространство из-за суперблока md и из-за таблицы разделов, поэтому наш / dev / md6 немного меньше, чем был / dev / sdj. Мы собираемся добавить / dev / md6 в dedvol
группу томов и проинструктируйте LVM переместить 1.82 ТБ логического тома из / dev / sdj в / dev / md6. LVM может обрабатывать активную файловую систему при этом.
pvcreate /dev/md6
vgextend dedvol /dev/md6
pvmove -v /dev/sdj
(перепроверьте ... вы понимаете. Я бы также pvscan
после pvcreate
и снова после vgextend
чтобы убедиться, что все выглядит правильно). Это запустит процесс перемещения всех данных, выделенных на /dev/sdj
к /dev/md6
(в частности, команда перемещает все с sdj, и md6 - единственное место, куда она может пойти). Через несколько часов это либо завершится, либо система заблокируется при чтении из sdj. Если система вылетает, можно перезагрузиться и попробовать pvmove
без имени устройства для перезапуска на последней контрольной точке или просто откажитесь и переустановите из резервных копий.
Если нам это удается, мы удаляем / dev / sdj из группы томов, а затем удаляем его как физический том:
vgreduce dedvol /dev/sdj
pvremove /dev/sdj
Теперь о проверке коррупции. Инструмент для проверки и исправления xfs есть xfs_repair
(fsck
будет работать в файловой системе xfs, но вообще ничего не делает). Плохие новости? Он использует гигабайты ОЗУ на терабайт файловой системы, поэтому, надеюсь, у вас есть 64-битный сервер с 64-битным ядром и 64-битным двоичным файлом xfs_repair (который может называться xfs_repair64) и не менее 10 ГБ ОЗУ + своп (вы должны иметь возможность используйте часть оставшегося пустого места в дедволе для создания тома подкачки, затем mkswap
этот том, то swapon
тот объем). Файловая система должен быть демонтирован перед запуском на нем xfs_repair. Кроме того, xfs_repair может обнаруживать и (пытаться) исправить повреждение самой файловой системы, но он может не обнаруживать повреждение данных (например, что-то перезаписывает часть inode каталога по сравнению с чем-то, перезаписанным в середине текстового файла).
Наконец, нам нужно купить новый /dev/sdj
, установите его и добавьте к деградированной /dev/md6
, имея в виду, что если мы перезагружаем компьютер без sdj, возможно, что sdk переместится в sdj, и вместо этого новый диск будет sdk (возможно, нет, но лучше быть уверенным):
fdisk /dev/sdj
убедитесь, что это не тот диск, который мы уже разбили и настроили, затем создайте на нем раздел для md
mdadm /dev/md6 -a /dev/sdj1
(Вполне возможно, что ошибки могут быть связаны с raid и lvm, вычищающими его из-за содержимого sdj, а не из-за фактического отказа диска (обычно неисправные диски генерируют много тарабарщины от драйвера в dmesg
а не просто ошибки ввода / вывода), но я не уверен, что рискну.)