Страница 1 из 1

Исправление ошибок RAID на контроллерах 3ware

Добавлено: 27 янв 2022, 22:16
xor

Источник: https://www.lissyara.su/articles/freebs ... re/tw_cli/

Исправление ошибок RAID на контроллерах 3ware

[p]На одном из серверов установленных в датацентре произошла странная ситуация - пропал диск =). На всякий случай машину перезагрузил - не помогло. Пришлось написать тикет, чтоб погасили, выдернули второй справа хот-сваповый диск, воткнули на место и включили. Диск появился, но, состояние массива было "DEGRADED". Контроллер был от правильного производителя - 3ware (недавно их купил убогий LSI, очень хочу надеяться что они не станут производить такие же кривые контроллеры...). После часа ковыряний с tw_cli, пришлось просить IP-КВМ и запускать пересборку из BIOS контроллера - утилиту на боевой системе я ниасилил (многие вещщи делать было стрёмно - дока скудная, а предложения из буржуйского сектора инета, типа разрушить массив для пересборки - доверия не внушали). Просто так ребилдинг запускаться не хотел, ругаясь на неверную конфигурацию диска который я пытался воткнуть на место.[/p]
[p] В общем, через пару недель в руки попал такой же контроллер и два одинаковых SATA диска. Решил разобраться, как же это сделать наживую.[/p]
[p] Эмулируем проблему: выдёргиваю из одного диска шнурок, прям на ходу. Гашу тазик, втыкаю шнурок обратно, включаю. Получаю то что и в датацентре:[/p]

Код: Выделить всё

bsd-test-2$ dmesg | grep Degraded
twed0: <Unit 0, TwinStor, Degraded> on twe0
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     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$   

(Команда дана с намереной ошибкой, поскольку на Linux оно прокатывает в сингл-моде...)
После получаса тыканий/раскуривания man'a получилась последовательность команд, позволяющая пересобрать массив без физического доступа.
Для начала удаляем деградировавший диск:

Код: Выделить всё

bsd-test-2$ tw_cli maint remove c0 p1
Removing port /c0/p1 ... Done.

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     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:

Код: Выделить всё

srv5$ grep 3ware  /etc/periodic.conf
# 3ware based RAID controllers
daily_status_3ware_raid_enable="YES"
srv5$  

P.S.2 Если во время ребилда машину перезагрузить, пересборка начинается с нуля, но не сразу, а минут через 10. Это, кстати, плюс - если будет fsck работать - не будет ему мешать.

Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=25725.