Сборка RAID-массива на контроллере LSI MegaSAS в Linux

В прошлом я уже писал ряд заметок про RAID-контроллеры семейства LSI MegaSAS - Intel RS2WC040 и Intel RSBL040, которые используются у меня на работе:

Иногда приходится менять диски, подключенные к аппаратным RAID-контроллерам. Замену диска при помощи mfiutil во FreeBSD я уже описывал, а аналогичная задача в Linux решается при помощи утилиты megacli, которая доступна в стороннем репозитории. Процедура замены дисков у меня до автоматизма не доведена, т.к. менять их приходится не часто. Поэтому я завёл для себя страницу в wiki, в которой делал заметки, чтобы не пришлось вспоминать команды и последовательность действий в следующий раз. Несколько раз я исправлял ошибки в заметке и даже дополнил её описанием решения проблемы с добавлением диска, который ранее уже состоял в другом RAID-массиве. Наконец, заметка дозрела до состояния, пригодного к публикации.

1. Установка утилиты

Установить утилиту 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

2. Просмотр информации о RAID-контроллере

Чтобы просмотреть модель, серийный номер, настройки RAID-контроллера:

# megacli -AdpAllInfo -aAll

3. Диагностика

Смотрим список и состояние 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

4. Диск исправен - запуск перестроения массива

Если диск исправен, можно попробовать перестроить массив. Для этого находим значения полей Enclosure Device ID и Slot Number у неисправного диска и выполняем для него команду запуска перестроения массива. В примере ниже используются значения 252 и 3:

# megacli -PdRbld -Start -PhysDrv[252:3] -a0

Наблюдать за состоянием перестроения массива можно при помощи команды:

# megacli -PdRbld -ShowProg -PhysDrv [252:3] -a0

5. Диск неисправен - замена диска

Если диск неисправен, его нужно заменить. Помечаем его как отключенный:

# 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

6. Подробнее:

P.S. 2 ноября 2022 года добавил описание случая, когда после удаления неисправного диска началось перестроение с использованием диска из горячего резерва.

Написать автору