Доброго времени суток, читатели!
Я хочу рассказать вам о том, как я восстанавливал прошивку RAID-контроллера LSI MegaRAID после неудачного обновления.
Когда эта беда случилась со мной, то информации об этом я практически не нашел, хотя, допускаю, что плохо гуглил.
Анамнез
В своей работе я уже достаточно давно использую серверы Supermicro, так как у них есть большой выбор платформ, достаточно демократичная цена и приличная надежность.
Зачастую, особенно в случае с 1U серверами я беру их уже с интегрированным контроллером LSI MegaRAID.
Но проблема с ними заключается в том, что сама Supermicro не очень охотно выкладывает прошивки для встроенных контроллеров, так что я их обычно прошиваю актуальной прошивкой (масло масляное, да) от аналогичного контроллера LSI. Проблем не возникало до этих пор.
Недавно привезли несколько серверов с контроллерами LSI 2208 на борту и достаточно старой прошивкой.
Т.к. дискретные контроллеры на этих чипах я тоже активно использую, то особо не сомневаясь загрузился с флешки с Linux-ом, запустил привычное:
./MegaCli64 -AdpFwFlash -f mr2208.rom -a0
и пошел заниматься дальше своими делами.
Когда я в следующий раз обратил взор на терминал сервера, то увидел ту же самую картину, что и была — «Flashing firmware...» и никакого результата. Беда, подумал Штирлиц.
Вход на сервер по SSH не удавался, посмотрев на VGA-консоль увидел сообщения что корневая ФС перешла в режим Read Only и вообще всё очень плохо, а в любой момент будет еще хуже.
Делаю Reset и вижу такую картину:
Да, беда. Поиски в интернетах не привели к какому-либо результату. Судя по всему, проблема достаточно редкая.
Лечение
Я попробовал загрузиться с флэшки и прошить контроллер заново, но ни под DOS, ни под Linux утилита MegaCli его уже не определяла вообще. Прошивать, соответственно, тоже отказывалась.
Так что я обратился в саппорт LSI, где добрый человек с индусским именем указал мне на документацию к MegaRAID, а именно на страницу 305, где есть такой достаточно незаметный подраздел, который толком не объясняет зачем же делать то, что в нем написано:
Ага, подумали партизаны, наверное это прошивка в режиме восстановления, и взялись за дело.
Под Windows флэшку с FreeDOS сделать проще всего используя утилиту Rufus, буквально в один клик.
Под Linux сделать аналогичное можно подручными средствами (используя syslinux или GRUB), на эту тему есть много статей.
Заливаем на нее MegaCli.exe и найденную на просторах ftp.supermicro.com прошивку.
Грузимся, запускаем:
MegaCli.exe -AdpM0Flash -f smc2208.rom
Обращаю внимание, что указывать адаптер (опция -a) не нужно, судя по всему он прошивает все какие найдёт, либо первый попавшийся на PCI шине.
Дело пошло:
Прошивка в этом режиме занимает достаточно долгое время, около 15 минут, так что наберитесь терпения.
Когда он закончит — выключаем сервер по питанию, включаем его обратно и ждем чуда.
Но вместо чуда видим мы такую вот безрадостную картину:
Гугление по такой ошибке приводит к единственной ссылке на блог нашего соотечественника, где он на чистом английском советует отключить от контроллера BBU, вынуть контроллер из сервера и потом поставить обратно.
В моем случае вынуть карту из сервера можно только лобзиком, BBU у меня нет, так что не вариант.
Пробую прошить стандартным способом, MegaCli обнаруживает контроллер, но говорит то же самое, мол F/W is in fault state, так что ничего делать не буду.
Обращаемся опять в саппорт, который разводит руками и советует попробовать LSI Pre-Boot USB and CD tool, а если он не поможет, то сдавать железо назад.
Ок, качаем ISO, подключаем его через IPMI к серверу и грузимся.
Выбираем в меню загрузки пункт recovmr, затем нам предлагают написать в командной строке recover и наступит счастье. Но не наступило.
BAT-файл не может найти подключенный диск D:, видимо драйвер CDROM в FreeDOS на этом образе LSI не дружит с виртуальным приводом IPMI.
Хорошо, заглядываем в BAT файл и смотрим, что же он там собирался делать:
MegaCli.exe -AdpFwFlash -f D:FWRECOVERTB_16MB.ROM -aALL
Открываем ISO, ищем этот загадочный файл и видим, что он размером аж 16 мегабайт (да, мы уже догадывались из названия), что вдвое больше стандартной прошивки. Видимо, этот образ ROM полностью переписывает микросхему Flash на контроллере.
Пытаемся прошить его так же, как это собирался делать BAT-ник, но получаем знакомое: F/W is in fault state
Да, так себе Recovery-образ подготовила нам LSI.
Ладно, используем наш предыдущий опыт и пытаемся прошить этот файл через Mode0.
На этот раз прошивка заняла минут 30, так как файл вдвое больше обычного. После прошивки обесточиваем сервер, включаем его обратно и видим заветный экран:
Салют, шампанское, сервер спасён!
Но этот живительный образ содержит не самую свежую версию прошивки, так что я с легким сердцем опять загрузился с FreeDOS-флешки и пошел прошивать его свежей прошивкой от Supermicro… и опять получил зависание на той же стадии, как в самом начале:
Круг замкнулся. Я даже для верности оставил его в таком виде на ночь, но ничего не изменилось.
После перезагрузки имеем опять битую прошивку.
Методом проб и ошибок было выяснено, что после прошивки образа восстановления нужно сделать сброс к заводским настройкам:
MegaCli.exe -AdpFacDefSet -a0
и выключить-включить сервер.
После этого прошивается уже без зависания, и мы видим свежую версию прошивки:
Всё, на этот раз получилась 100% победа над непокорным железом!
Выписка
Мораль сей басни такова: если не хочется потратить пару дней на восстановление или еще больше на возврат оборудования, то лучше все-таки прошиваться предназначенными производителем железа прошивками (если он их выкладывает, у того же Supermicro я ее нашел только копаясь в дебрях FTP — на странице сервера или материнской платы ссылок нет), либо ничего не трогать и жить с той, которая уже есть.
Хотя я не уверен что проблема была вызвана именно «инородной» прошивкой, а не каким-то случайным глюком, но проверять это еще раз мне не хочется.
Бывают и такие случаи, когда прошивка просто по какой-то причине портится (выключили электричество во время прошивки или еще какой гамма-всплеск случился в ближнем космосе), и тогда придётся прибегнуть к аварийному восстановлению.
Надеюсь, что эта статья поможет тем, кто наткнётся на похожую проблему в будущем.
Автор: blind_oracle