Восстановление аппаратно-софтового RAID в FreeBSD
Опубликовано ср, 08/19/2015 - 14:26 пользователем alitius
На одном из удаленных серверов случилась довольно обычная ситуация, начал подтупливать и выдавать ошибки один из двух дисков зеркала (RAID-1). Сервер Supermicro 5037MC-H8TRF, IPMI присутствует и доступ к нему имеется, но захотелось понять как восстановить полную рабоспособность сервера не прибегая к использованию утилит BIOS, а только из консоли операционной системы (FreeBSD 9.3)
Немного теории, большинство дешевых серверов Supermicro (да и многих других производителей) имеют на борту так называемый "недорейд" или софтовый рейд, который хранится в постоянной памяти (ROM), ицнициализируется при загрузке, после прохождения проверок BIOS и позволяет стартовать операционной системе уже с инициализированного RAID массива. То бишь получается аппаратная поддержка программного рейда, которая не зависит от типа операционной системы и функционал которого доступе еще до загрузки ОС. Возможные уровни RAID зависят от конкретного оборудования.
Итак, сначала смотрим состояние дисков, а точнее просматриваем их SMART, для этого используем утилиту smartctl. Если она отсутстувует в системе, то ставим из портов -
cd /usr/ports/sysutils/smartmontools make install clean
Проверям (читаем только данные смарта, именование дисков можно посмотреть в папке /dev/, у меня это ad4 и ad6)
smartctl -А /dev/ad4 SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 115 099 006 Pre-fail Always - 83988872 3 Spin_Up_Time 0x0003 096 096 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 30 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 078 060 030 Pre-fail Always - 59970468 9 Power_On_Hours 0x0032 082 082 000 Old_age Always - 15945 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 14 183 Runtime_Bad_Block 0x0032 099 099 000 Old_age Always - 1 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 0 0 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 075 068 045 Old_age Always - 25 (Min/Max 22/32) 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 10 193 Load_Cycle_Count 0x0032 001 001 000 Old_age Always - 503694 194 Temperature_Celsius 0x0022 025 040 000 Old_age Always - 25 (0 20 0 0 0) 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 11952h+31m+11.444s 241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 13968719199 242 Total_LBAs_Read 0x0000 100 253
Этот диск еще будет жить.
Проверяем второй -
smartctl -А /dev/ad6 SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 118 099 006 Pre-fail Always - 193414840 3 Spin_Up_Time 0x0003 094 094 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 30 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 030 029 030 Pre-fail Always FAILING_NOW 281470741881288 9 Power_On_Hours 0x0032 082 082 000 Old_age Always - 15942 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 14 183 Runtime_Bad_Block 0x0032 099 099 000 Old_age Always - 1 184 End-to-End_Error 0x0032 099 099 099 Old_age Always FAILING_NOW 1 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 0 0 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 074 067 045 Old_age Always - 26 (Min/Max 22/33) 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 11 193 Load_Cycle_Count 0x0032 001 001 000 Old_age Always - 502622 194 Temperature_Celsius 0x0022 026 040 000 Old_age Always - 26 (0 20 0 0 0) 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 11962h+53m+00.346s 241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 8160199857 242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 34647230851
С этим диском все несколько хуже и из-за него возникают ошибки, соответственно менять будем его. После замены диска он имеет статус - Non-Raid и естественно не входит в состав нашего рейда. Для работы с аппаратно-софтовыми рейдами в FreeBSD используется утилита graid, которая зависит от модуля ядра geom_raid.ko. Данный модуль включен в ядро по умолчанию (GENERIC) начиная с версии 9.1. Если необходимо, он может быть загружен вручную с помощью graid load.
Итак смотрим состояние RAID после замены диска:
/usr/home/alex1812 # graid status Name Status Components raid/r0 DEGRADED ada1 (ACTIVE (ACTIVE))
Как я писал выше, второй диск в рейд не входит, поэтому добавляем новый (замененный) диск в состав рейда с дальнейшим зеркалированием данных на него -
graid insert raid/r0 ada0
Проверяем статус рейда -
graid status Name Status Components raid/r0 DEGRADED ada1 (ACTIVE (ACTIVE)) ada0 (ACTIVE (REBUILD 0%))
По прошествию нескольких часов, мы получаем полностью рабочих рейд -
graid status Name Status Components raid/r0 DEGRADED ada1 (ACTIVE (ACTIVE)) ada0 (ACTIVE (ACTIVE))
На этом задача по востановлению выполнена. Другие возможности утилиты graid, которая позволяет выполнять большинство необходимых операций с аппаратно-софтовыми рейдами вы можете посмотреть в официальной документации FreeBSD
Голосов пока нет