В прошлом я уже писал ряд заметок про RAID-контроллеры семейства LSI MegaSAS - Intel RS2WC040 и Intel RSBL040, которые используются у меня на работе:
Иногда приходится менять диски, подключенные к аппаратным RAID-контроллерам. Замену диска при помощи mfiutil во FreeBSD я уже описывал, а аналогичная задача в Linux решается при помощи утилиты megacli, которая доступна в стороннем репозитории. Процедура замены дисков у меня до автоматизма не доведена, т.к. менять их приходится не часто. Поэтому я завёл для себя страницу в wiki, в которой делал заметки, чтобы не пришлось вспоминать команды и последовательность действий в следующий раз. Несколько раз я исправлял ошибки в заметке и даже дополнил её описанием решения проблемы с добавлением диска, который ранее уже состоял в другом RAID-массиве. Наконец, заметка дозрела до состояния, пригодного к публикации.
Установить утилиту megacli в Debian можно из неофициального репозитория HwRAID. Например, чтобы подключить репозиторий в Debian Stretch, нужно добавить в файл /etc/apt/sources.list такую строчку:
deb http://hwraid.le-vert.net/debian stretch main
Установим в систему GPG-ключ для проверки подлинности репозитория при помощи команды:
# wget -O - https://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | apt-key add -
Теперь можно обновить список пакетов, доступных для установки из репозиториев:
# apt-get update
И установить утилиту megacli для управления RAID-контроллером:
# apt-get install megacli
Чтобы просмотреть модель, серийный номер, настройки RAID-контроллера:
# megacli -AdpAllInfo -aAll
Смотрим список и состояние RAID-массивов в поле Sate:
# megacli -LdInfo -Lall -aALL
Если там Degraded, значит массив развалился. Смотрим, есть ли строчки Firmware state с состоянием Failed:
# megacli -PdList -a0
Если есть, можно посмотреть состояние диск по SMART. Для этого в выводе команды смотрим идентификаторы дисков в поле Device Id. Дальше указывая эти идентификаторы можно увидеть состояние SMART каждого из дисков и определить его серийный номер:
# smartctl -a -d megaraid,4 /dev/sda # smartctl -a -d megaraid,5 /dev/sda # smartctl -a -d megaraid,7 /dev/sda # smartctl -a -d megaraid,6 /dev/sda
Если диск исправен, можно попробовать перестроить массив. Для этого находим значения полей Enclosure Device ID и Slot Number у неисправного диска и выполняем для него команду запуска перестроения массива. В примере ниже используются значения 252 и 3:
# megacli -PdRbld -Start -PhysDrv[252:3] -a0
Наблюдать за состоянием перестроения массива можно при помощи команды:
# megacli -PdRbld -ShowProg -PhysDrv [252:3] -a0
Если диск неисправен, его нужно заменить. Помечаем его как отключенный:
# megacli -PdOffline -PhysDrv [252:3] -a0
Затем - как отсутствующий в массиве:
# megacli -PdMarkMissing -PhysDrv [252:3] -a0
И теперь - как подготовленный к удалению из системы:
# megacli -PdPrpRmv -PhysDrv [252:3] -a0
Неисправный диск можно подсветить светодиодом:
# megacli -PdLocate -start -PhysDrv [252:3] -a0
Если индикация не заработала, можно попробовать починить её при помощи следующей команды:
# megacli -AdpSetProp \{UseDiskActivityforLocate -1\} -aALL
Заменяем диск (в случае SAS это можно сделать на горячую, если по светодиодным индикаторам видно, какой из дисков неактивен).
Когда новый диск вставлен, убираем подсветку светодиодом:
# megacli -PdLocate -stop -PhysDrv [252:3] -a0
После замены диска смотрим, каких дисков не хватает в RAID-массиве:
# megacli -PdGetMissing -a0 Adapter 0 - Missing Physical drives No. Array Row Size Expected 0 1 1 428199 MB Exit Code: 0x00
Вставляем новый диск в пустующее место в массиве:
# megacli -PdReplaceMissing -PhysDrv [252:3] -array1 -row1 -a0
Если диск не вставляется и выводится ошибка следующего вида:
Adapter: 0: Failed to replace Missing PD at Array 1, Row 1. FW error description: The specified device is in a state that doesn't support the requested command. Exit Code: 0x32
То можно проверить текущее состояние прошивки диска:
# megacli -PdInfo -PhysDrv [252:3] -a0
Если в строке Firmware state отображается состояние JBOD, то исправить это состояние можно следующим образом:
# megacli -PdMakeGood -PhysDrv[252:3] -Force -a0
Если же в строке Firmware state отображается состояние Unconfigured(good), Spun Up, но в строке Foreign State отображается состояние Foreign, то надо просканировать наличие дисков, переставленных из других RAID-контроллеров и снять у таких дисков отметку о других контроллерах:
# megacli -CfgForeign -Scan -aALL # megacli -CfgForeign -Сlear -aALL
Включаем новый диск в работу массива:
# megacli -PdRbld -Start -PhysDrv [252:3] -a0
Если же после замены диска недостающих дисков в RAID-массиве нет:
# megacli -PdGetMissing -a0 Adapter 0 - No Missing Drive is Found. Exit Code: 0x00
То скорее всего место отсутствующего диска занял диск из горячего резерва. В таком случае RAID-массив будет в состоянии деградации:
# megacli -LDInfo -Lall -a0 Adapter 0 -- Virtual Drive Information: Virtual Drive: 0 (Target Id: 0) Name : RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3 Size : 3.268 TB Sector Size : 512 Parity Size : 557.861 GB State : Degraded Strip Size : 256 KB Number Of Drives : 7 Span Depth : 1 Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU Current Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU Default Access Policy: Read/Write Current Access Policy: Read/Write Disk Cache Policy : Disk's Default Encryption Type : None PI type: No PI Is VD Cached: No Exit Code: 0x00
При этом бывший диск из горячего резерва будет в состоянии Rebuild. Узнать его Enclosure Device Id и Slot Number можно с помощью следующей команды:
# megacli -PdList -a0 | egrep -B 17 'Firmware state: *Rebuild' | egrep 'Enclosure Device ID|Slot Number'
Посмотреть продвижение процесса перестроения можно так:
# megacli -PdRbld -ShowProg -PhysDrv [252:3] -a0
P.S. 2 ноября 2022 года добавил описание случая, когда после удаления неисправного диска началось перестроение с использованием диска из горячего резерва.