воскресенье, 22 октября 2017 г.

Восстановление аппаратного RAID с помощью утилиты MegaCLI


Процесс замены вышедшего из строя физического диска на сервере с аппаратным RAID контроллером

Прежде всего определим тип RAID-контроллера.
В данном примере будет рассмотрен вариант с LSI, для других типов будут отдельные статьи, когда под рукой окажется свободный котроллер другой модели.
# lspci | grep -i RAID
00:1f.2 RAID bus controller: Intel Corporation C600/X79 series chipset SATA RAID Controller (rev 06)
07:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
После определения типа контроллера приступим к установке утилиты для работы с ним.
(ПО обновляется, поэтому актуальную версию проверяйте на официальном сайте LSI.)
# wget http://it.bmc.uu.se/andlov/docs/linux/raid/files/megacli-8.04.07-2.x86_64.rpm
# rpm -ihv megacli-8.04.07-2.x86_64.rpm

Проверяем состояние RAID

# megacli -LDInfo -Lall -aALL | grep State
State : Degraded
Выводим информацию о состоянии дисков:
# megacli -PDList -aAll | egrep "Enclosure Device ID:|Slot Number:|Inquiry Data:|Error Count:|state"
Enclosure Device ID: 25
Slot Number: 12
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: IBM-ESXSST3300657SS BA586SJ3SJKY0825BA58
Enclosure Device ID: 25
Slot Number: 13
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: IBM-ESXSST3300657SS BA586SJ3SJSY0825BA58
Enclosure Device ID: 25
Slot Number: 14
Media Error Count: 0
Other Error Count: 1233
Firmware state: Failed
Inquiry Data: IBM-ESXSST3300657SS BA586SJ3SSL60825BA58
Enclosure Device ID: 25
Slot Number: 15
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: SEAGATE ST3300657SS 00086SJ47FF1
Enclosure Device ID: 25
Slot Number: 16
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: SEAGATE ST3300657SS 00086SJ47GS5
Enclosure Device ID: 25
Slot Number: 17
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: SEAGATE ST3300657SS 00086SJ684J5
Enclosure Device ID: 25
Slot Number: 18
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: SEAGATE ST3300657SS 00086SJ60R8S
Enclosure Device ID: 25
Slot Number: 19
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: SEAGATE ST3300657SS 00086SJ47JG1
Enclosure Device ID: 25
Slot Number: 20
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: SEAGATE ST3300657SS 00086SJ47FKV
Enclosure Device ID: 25
Slot Number: 21
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: SEAGATE ST3300657SS 00086SJ67CCL
Enclosure Device ID: 25
Slot Number: 22
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: SEAGATE ST3300657SS 00086SJ67CLB
Enclosure Device ID: 25
Slot Number: 23
Media Error Count: 0
Other Error Count: 0
Firmware state: Online, Spun Up
Inquiry Data: IBM-ESXSST3300657SS BA586SJ3R65E0825BA58
Как видно из лога, то проблема с одним из дисков:
Enclosure Device ID: 25
Slot Number: 14
Media Error Count: 0
Other Error Count: 1233
Firmware state: Failed
Inquiry Data: IBM-ESXSST3300657SS BA586SJ3SSL60825BA58
Также можно вывести полную информацию по дискам подключенным к контроллеру:
# megacli -PDList -aALL
...
Enclosure Device ID: 25
Slot Number: 14
Drive's postion: DiskGroup: 0, Span: 1, Arm: 0
Enclosure position: 0
Device Id: 29
WWN: 5000C50043E6C068
Sequence Number: 3
Media Error Count: 0
Other Error Count: 1233
Predictive Failure Count: 136
Last Predictive Failure Event Seq Number: 69159
PD Type: SAS
Raw Size: 279.396 GB [0x22ecb25c Sectors]
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]
Coerced Size: 278.464 GB [0x22cee000 Sectors]
Firmware state: Failed
Device Firmware Level: BA58
Shield Counter: 0
Successful diagnostics completion on : N/A
SAS Address(0): 0x5000c50043e6c069
SAS Address(1): 0x0
Connected Port Number: 0(path0)
Inquiry Data: IBM-ESXSST3300657SS BA586SJ3SSL60825BA58
IBM FRU/CRU: 44W2235
FDE Enable: Disable
Secured: Unsecured
Locked: Unlocked
Needs EKM Attention: No
Foreign State: None
Device Speed: 6.0Gb/s
Link Speed: 6.0Gb/s
Media Type: Hard Disk Device
Drive Temperature :28C (82.40 F)
PI Eligibility: No
Drive is formatted for PI information: No
PI: No PI
Drive's write cache : Disabled
Port-0 :
Port status: Active
Port's Linkspeed: 6.0Gb/s
Port-1 :
Port status: Active
Port's Linkspeed: Unknown
Drive has flagged a S.M.A.R.T alert : Yes
Enclosure Device ID - идентификатор блока;
Slot Number - Номер слота физического диска.

Заменяем проблемный диск

Если диск в состоянии Online (в нашем случае Failed), то переводим в состояние Offline.
# megacli -PDOffline -PhysDrv [25:14] -a0
Adapter: 0: EnclId-25 SlotId-14 state changed to OffLine.
Отметим диск, как извлеченный
# megacli -PDMarkMissing -PhysDrv [25:14] -a0
EnclId-25 SlotId-14 is marked Missing.
Получаем информацию об извлеченном(-ых) диске(-ах):
# megacli -Pdgetmissing -a0
Adapter 0 - Missing Physical drives
No. Array Row Size Expected
0 1 0 285148 MB
Подсвечиваем диск, который требуется заменить:
# megacli -PdLocate -start -PhysDrv [25:14] -a0
Adapter: 0: Device at EnclId-25 SlotId-14 -- PD Locate Start Command was successfully sent to Firmware
Если возникла проблема с подсветкой, то используем лампочку активности в качестве индикации:
# megacli -AdpSetProp \{UseDiskActivityforLocate -1\} -aALL
Adapter 0: Set Use Disk Activity For Locate to Enabled success.

Удаляем диск из RAID

# megacli -PdPrpRmv -PhysDrv [25:14] -a0
Prepare for removal Success
После этого выполняем процедуру физической замены диска(-ов).
В случае с новым диском, если он содержит метаданные от старого RAID массива, эти данные необходимо затереть.
Проверяем их наличие:
megacli -CfgForeign -Scan -a0
Если таковые имеются, то удаляем следующей их командой:
(к счастью у меня такого добра не обнаружилось)
megacli -CfgForeign -Сlear -a0
Выполняем замену (нам потребуются значения параметров Array и Row из предыдущего пункта)
# megacli -PdReplaceMissing -PhysDrv [25:14] -Array1 -row0 -a0
Adapter: 0: Physical drive in array 1 at row 0 is not missing.
И запускаем Rebuild нового диска:
# megacli -PDRbld -Start -PhysDrv [25:14] -a0
Cannot Rebuild Physical Drive at Enclosure - 25, Slot - 14.
FW error description:
The specified device is in a state that doesn't support the requested command.
Если получаем эту ошибку при выполнении команды, то Rebuild запустился автоматически.
Проверяем статус Rebuild и оставшееся время до окончания:
# megacli -PDRbld -ShowProg -PhysDrv [25:14] -a0
Rebuild Progress on Device at Enclosure 25, Slot 14 Completed 38% in 10 Minutes.
Ну и не забываем отключить индикацию диска:
# megacli -PdLocate -stop -PhysDrv [25:14] -a0
Adapter: 0: Device at EnclId-25 SlotId-14 -- PD Locate Stop Command was successfully sent to Firmware

Бонусы

Отключение звукового оповещения до перезагрузки
megacli -AdpSetProp AlarmSilence -a0
Включение и выключение звукового оповещения навсегда:
megacli -AdpSetProp AlarmEnbl -a0
megacli -AdpSetProp AlarmDsbl -a0
Проверка приоритета ребилда:
# megacli -AdpGetProp RebuildRate -a0
Adapter 0: Rebuild Rate = 30%
Изменяем приоритет ребилда в % соотношении:
# megacli -AdpSetProp RebuildRate 80 -a0
Adapter 0: Set rebuild rate to 80% success.
 
 
+---+---+----+----+ | 8 | 9 | 10 | 11 | +---+---+----+----+ | 4 | 5 | 6 | 7 | +---+---+----+----+ | 0 | 1 | 2 | 3 | +---+---+----+----+ Отобразить состояние дисков: megacli -PDList -aAll | egrep "Enclosure Device ID:|Slot Number:|Inquiry Data:|Error Count:|state" Отключить пищалку на СХД megacli -AdpSetProp AlarmDsbl -aALL Включить пищалку на СХД megacli -AdpSetProp AlarmEnbl -aALL Информация по виртуальному диску megacli -LDInfo -Lall -aALL  
 
__________________________________________________________________________________

Замена диска в MegaCli

Данная утилита от LSI так же позволяет оперировать рейд-контроллерами от Dell. Но замена дисков через такую утилиту — целый hardcore, только для настоящих Tru-админов )).
Тестовый стенд: контроллер PERC 6/i, RAID-1, Linux MegaCli64, выпал 1 диск.
Смотрим состояние RAID’a:
# /usr/local/bin/MegaCli -LDInfo -Lall -aALL | grep State State : Degraded
Какой диск стал причиной этому:
# MegaCli -PDList -aAll | egrep "Enclosure Device ID:|Slot Number:|Inquiry Data:|Error Count:|state" Enclosure Device ID: 32 Slot Number: 0 Media Error Count: 0 Other Error Count: 0 Firmware state: Online, Spun Up Inquiry Data: FUJITSU MBC2073RC D506BV03P9605GU7 Enclosure Device ID: 32 Slot Number: 1 Media Error Count: 16655 Other Error Count: 15 Firmware state: Failed Inquiry Data: SEAGATE ST973452SS 00076TA0EDKH Enclosure Device ID: 32 Slot Number: 2 Media Error Count: 0 Other Error Count: 0 Firmware state: Online, Spun Up Inquiry Data: SEAGATE ST973451SS SM043PD1WB4Z Enclosure Device ID: 32 Slot Number: 3 Media Error Count: 0 Other Error Count: 0 Firmware state: Online, Spun Up Inquiry Data: SEAGATE ST973451SS SM043PD1WBN7 Enclosure Device ID: 32 Slot Number: 4 Media Error Count: 0 Other Error Count: 0 Firmware state: Online, Spun Up Inquiry Data: SEAGATE ST973451SS SM043PD1T7EG Enclosure Device ID: 32 Slot Number: 5 Media Error Count: 0 Other Error Count: 0 Firmware state: Online, Spun Up Inquiry Data: FUJITSU MBC2073RC D506BV03P9605GF0
Как видим, это диск [32:1]. Именно так к нему в дальнейшем нужно обращаться. Что бы заменить диск, нужно его перевести в offline, пометить как «пропавший» и удалить:
общий вид команд:
# MegaCli -PDOffline -PhysDrv [E:S] -aN # MegaCli -PDMarkMissing -PhysDrv [E:S] -aN # MegaCli -PDPrpRmv -PhysDrv [E:S] -aN
в нашем случае это будет так:
# MegaCli -PDOffline -PhysDrv [32:1] -a0 # MegaCli -PDMarkMissing -PhysDrv [32:1] -a0 # MegaCli -PDPrpRmv -PhysDrv [32:1] -a0
Да! Но и это ещё не всё. Потом нужно задать команду замены диска (эту команду выполнить уже после замены диска).:
общий вид:
# MegaCli -PdReplaceMissing -PhysDrv [E:S] -ArrayN -rowN -aN
в нашем случае это будет так:
# MegaCli -PdReplaceMissing -PhysDrv [32:1] -Array0 -row1 -a0
Если нужно подсветить диск (что бы было видно, какой нужно менять) делаем так (при этом диск будет непрерывно гореть зелёным светом):
# MegaCli -PdLocate -start -PhysDrv [32:1] -a0
Что бы прекратить:
# MegaCli -PdLocate -stop -PhysDrv [32:1] -a0
Но в моём случае мне повезло, так как в опциях рейда стояло autorebuild:
# MegaCli -adpallinfo -a0 | grep 'Auto Rebuild' Auto Rebuild : Enabled
и поэтому, после замены диска не пришлось выполнять команду замены диска — он сам начал процесс перестройки рейда:
# MegaCli -PDRbld -ShowProg -PhysDrv [32:1] -a0 Rebuild Progress on Device at Enclosure 32, Slot 1 Completed 1% in 0 Minutes.
При этом Firmware state тоже в состоянии Rebuild:
# MegaCli -PDInfo -PhysDrv [32:1] -a0 | grep 'Firmware state' Firmware state: Rebuilding
Как заменить диск в массиве, если rebuild не начался автоматически (пример взят из http://wiki.hetzner.de)?
Статус нового диска должен быть «Unconfigured (good)«. Это можно проверить с помощью PDList. Если статус диска «Unconfigured (bad)«, то его надо сначала сделать пригодным для использования как показано ниже:
root@rescue ~ # megacli -PDList -a0 | grep Firmware Firmware state: Online, Spun Up Device Firmware Level: CC45 Firmware state: Online, Spun Up Device Firmware Level: CC45 Firmware state: Unconfigured(bad), Spun Up Device Firmware Level: CC45 Firmware state: Online, Spun Up Device Firmware Level: CC45
root@rescue ~ # megacli -PDMakeGood -PhysDrv [245:3] -a0
Ещё один момент. Иногда, после того, как вы перевели диск из bad в good, он может оказаться в «не родной» конфигурации:
Foreign State: Foreign
и при попытке что-то с ним сделать получаем ошибку:
# MegaCli -CfgLdAdd -r0[80:17] -a0 The specified physical disk does not have the appropriate attributes to complete the requested command. Exit Code: 0x26 Обнаружить сколько дисков в такой конфигурации можно так:
# MegaCli -CfgForeign -Scan -a0 There are 1 foreign configuration(s) on controller 0. Exit Code: 0x00 Очистить «не родную» конфигурацию:
# MegaCli -CfgForeign -Clear -a0 Foreign configuration 0 is cleared on controller 0. Exit Code: 0x00 Если диск «good«, то им можно заменить отсутствующий диск. Для этого надо указать массив и позицию, где надо произвести замену. Эти значения можно получить, например, из megacli -CfgDsply -a0. Если диск отсутствует в массиве, запись «Physical Disk:» будет показана, но без дополнительно информации. В следующем примере четвёртый диск первого массива (Array0) заменяется диком из Enclosure 245 Slot 3PhysDrv[245:3]«):
root@rescue ~ # megacli -PdReplaceMissing -PhysDrv[245:3] -array0 -row4 -a0 Adapter: 0: Missing PD at Array 0, Row 4 is replaced. Exit Code: 0x00 root@rescue ~ # megacli -PDRbld -Start -PhysDrv[245:3] -a0 Started rebuild progress on device(Encl-245 Slot-3) Exit Code: 0x00 root@rescue ~ # megacli -PDRbld -ShowProg -PhysDrv [245:3] -aAll Rebuild Progress on Device at Enclosure 245, Slot 3 Completed 1% in 0 Minutes.
А что если, у вас массив построен на JBOD дисках и нужно заменить диск в zpool’e? Тогда делаем так:
— после физической замены диска он становится:
Firmware state: Unconfigured(good), Spun Up Foreign State: None Если не выходит его просто сделать JBOD’ом:
# MegaCli -PDMakeJBOD -PhysDrv[68:16] -a0
тогда делаем его просто RAID0:
# MegaCli -CfgLdAdd -r0[68:16] -a0

CopyBack state.
Это состояние диска, при котором информация переносится с hotspare диска на новый:
Enclosure Device ID: N/A Slot Number: 0 ... Firmware state: Copyback ...
Посмотреть, сколько осталось:
# MegaCli -PDCpyBk -ShowProg -PhysDrv[:0] -a0 Copyback Progress on Device at Enclosure N/A, Slot 0 Completed 13% in 60 Minutes. Exit Code: 0x00
По завершению, диск перейдёт в состояние Unconfigured(good), Spun Up. До тех пор RAID будет в состоянии Degrade:
# MegaCli -LDInfo -Lall -aALL | grep State State : Degraded
Дальше, переводим в Online:
# MegaCli -PdReplaceMissing -PhysDrv[:0] -array0 -row0 -a0 # MegaCli -PDOnline -PhysDrv [:0] -a0 # MegaCli -LDInfo -Lall -aALL | grep State State               : Optimal
 

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

Отправить комментарий