RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Исправление ошибок RAID на контроллерах 3ware [2010]
На одном из серверов установленных в датацентре произошла странная ситуация - пропал диск =). На всякий случай машину перезагрузил - не помогло. Пришлось написать тикет, чтоб погасили, выдернули второй справа хот-сваповый диск, воткнули на место и включили. Диск появился, но, состояние массива было "DEGRADED". Контроллер был от правильного производителя - 3ware (недавно их купил убогий LSI, очень хочу надеяться что они не станут производить такие же кривые контроллеры...). После часа ковыряний сtw_cli, пришлось просить IP-КВМ и запускать пересборку из BIOS контроллера - утилиту на боевой системе я ниасилил (многие вещщи делать было стрёмно - дока скудная, а предложения из буржуйского сектора инета, типа разрушить массив для пересборки - доверия не внушали). Просто так ребилдинг запускаться не хотел, ругаясь на неверную конфигурацию диска который я пытался воткнуть на место. В общем, через пару недель в руки попал такой же контроллер и два одинаковых SATA диска. Решил разобраться, как же это сделать наживую. Эмулируем проблему: выдёргиваю из одного диска шнурок, прям на ходу. Гашу тазик, втыкаю шнурок обратно, включаю. Получаю то что и в датацентре:
bsd-test-2$ tw_cli /c0 show
Unit UnitType Status %RCmpl %V/I/M Stripe Size(GB) Cache AVrfy
------------------------------------------------------------------------------
u0 RAID-1 DEGRADED - - - 37.2712 W -
Port Status Unit Size Blocks Serial
---------------------------------------------------------------
p0 OK u0 37.27 GB 78165360 N107FJ3G
p1 DEGRADED u0 37.27 GB 78165360 N10ANBCG
bsd-test-2$
Оба диска на месте, но - состояние массива и второго диска (который дёргался) - разрушен. В ДЦ я пытался сразу же воткнуть диск на место (кстати, в БИОС контроллера это именно так и выглядит, видимо, он прячет цепочку операций с целью упрощения интерфейса)
bsd-test-2$ tw_cli maint rebuild c0 u0 p1
Sending rebuild start request to /c0/u0 on 1 disk(s) [1] ... Failed.
(0x0B:0x0035): Replacement drive configuration is invalid for rebuild operation
bsd-test-2$
Облом. Ковыряния в интерентах и попытки удалить массив (ссылки на блог советовавшего идиота не даю, чтоб желающих повторять не нашлось) ни к чему не привели:
bsd-test-2$ tw_cli maint deleteunit c0 u0
Deleting unit c0/u0 ...Failed.
(0x0B:0x0045): Failed to remove device node; Are all filesystems unmounted?
bsd-test-2$
После получаса тыканий/раскуривания man'a получилась последовательность команд, позволяющая пересобрать массив без физического доступа. Для начала удаляем деградировавший диск:
bsd-test-2$ tw_cli /c0 show
Unit UnitType Status %RCmpl %V/I/M Stripe Size(GB) Cache AVrfy
------------------------------------------------------------------------------
u0 RAID-1 DEGRADED - - - 37.2712 W -
Port Status Unit Size Blocks Serial
---------------------------------------------------------------
p0 OK u0 37.27 GB 78165360 N107FJ3G
p1 NOT-PRESENT - - - -
bsd-test-2$
Диска нет. Запускаем сканирование каналов контроллера, с целью найти его снова:
bsd-test-2$ tw_cli /c0 rescan
Rescanning controller /c0 for units and drives ...Done.
Found the following unit(s): [none].
Found the following drive(s): [/c0/p1].
bsd-test-2$
Чё-то нашёл. Смотрим что именно:
bsd-test-2$ tw_cli /c0 show
Unit UnitType Status %RCmpl %V/I/M Stripe Size(GB) Cache AVrfy
------------------------------------------------------------------------------
u0 RAID-1 DEGRADED - - - 37.2712 W -
Port Status Unit Size Blocks Serial
---------------------------------------------------------------
p0 OK u0 37.27 GB 78165360 N107FJ3G
p1 OK - 37.27 GB 78165360 N10ANBCG
bsd-test-2$
Оба диска на месте, оба в статусе "ОК" - что и требовалось для пересборки. Запускаем:
bsd-test-2$ tw_cli maint rebuild c0 u0 p1
Sending rebuild start request to /c0/u0 on 1 disk(s) [1] ... Done.
bsd-test-2$
Процесс пошёл. В /var/log/messages появляется соотвествующая запись:
twe0: AEN: <twed0: rebuild started>
Утилита от производителя показывает более подробно:
bsd-test-2$ tw_cli /c0 show
Unit UnitType Status %RCmpl %V/I/M Stripe Size(GB) Cache AVrfy
------------------------------------------------------------------------------
u0 RAID-1 REBUILDING 1% - - 37.2712 W -
Port Status Unit Size Blocks Serial
---------------------------------------------------------------
p0 OK u0 37.27 GB 78165360 N107FJ3G
p1 DEGRADED u0 37.27 GB 78165360 N10ANBCG
bsd-test-2$
По окончании пеерборки в логи будет записано и это событие:
twe0: AEN: <twed0: rebuild done>
Ну а с массивом станет всё отлично:
bsd-test-2$ tw_cli /c0 show all
/c0 Driver Version = 1.50.01.002
/c0 Model = 8006-2LP
/c0 Available Memory = 512KB
/c0 Firmware Version = FE8S 1.05.00.068
/c0 Bios Version = BE7X 1.08.00.048
/c0 Boot Loader Version = ME7X 1.01.00.040
/c0 Serial Number = L18501A5151327
/c0 PCB Version = Rev5
/c0 PCHIP Version = 1.30-66
/c0 ACHIP Version = 3.20
/c0 Total Optimal Units = 1
/c0 Not Optimal Units = 0
Unit UnitType Status %RCmpl %V/I/M Stripe Size(GB) Cache AVrfy
------------------------------------------------------------------------------
u0 RAID-1 OK - - - 37.2712 W -
Port Status Unit Size Blocks Serial
---------------------------------------------------------------
p0 OK u0 37.27 GB 78165360 N107FJ3G
p1 OK u0 37.27 GB 78165360 N10ANBCG
bsd-test-2$
Надеюсь кому-нибудь пригодиться. Ибо я надёргался прилично пока удалённо на боевом ковырялся и пытался всё это сделать.
P.S. Для включения отчёта о состоянии рейда в ежденевный отчёт сервера, необходимо добавить такую строку в /etc/periodic.conf:
P.S.2 Если во время ребилда машину перезагрузить, пересборка начинается с нуля, но не сразу, а минут через 10. Это, кстати, плюс - если будет fsck работать - не будет ему мешать.