Как стать автором
Обновить

Занимательная история о «бэдблоках» и RAID 0

Эта статья не руководство к действию, а скорее рассказ о моем эксперименте по замещению сбойного диска в RAID 0 массиве с сохранением всех данных. Раньше я часто задавался вопросом «зачем в WinHEX возможность редактирования диска?», теперь я знаю.

Жил был в одном системнике RAID 0 массив из трех одинаковых дисков по 250 Гб на контроллере Intel. Крутилась на этом массиве система, лежали важные данные да куча всякого разного барахла. И все было благополучно долгое время, пока однажды не пришла беда: во время копирования большого файла с раздела на раздел все стало дико тормозить и один из дисков выпал с ошибкой.

Сказка кончилась. Один из дисков стал потихоньку покрываться badblock'ами. Вариантов тут было два:
  1. «Правильный» — купить новый диск; сделать бэкап; пересобрать массив с новым диском; восстановить данные из бэкапа.
  2. «Простой/Временный» — переключить контроллер из RAID в AHCI; используя live CD производителя жестких дисков сделать remap для сбойных секторов; переключиться обратно в RAID; делать почаще бэкапы и надеяться, что больше проблем не будет и диск внезапно не умрет.

Недолго думая я выбрал вариант №2: не было денег на новый диск; некуда было забэкапить весь массив, чтобы не переустанавливать систему и не терять файловый архив; лень. Прошел год, я разжился новым диском на замену сбойному, но полный бэкап мне был все еще недоступен, так что за это время мне еще раз пришлось повторить вариант №2.

В одни из выходных запасшись пивом я уже было решился на пересборку массива, переустановку системы, смирился с потерей части файлового архива, как вдруг проскочила шальная идея — а что, если просто посекторно склонировать содержимое сбойного диска на новый?

Эксперимент начался. Перевел RAID контроллер в режим AHCI, загрузился с live CD, посекторно склонировал сбойный диск на новый, отключил старый диск, переключился с AHCI обратно в RAID, пробую загрузиться — не получается, контроллер не опознает новый диск.
Вспоминаю, есть же еще какие-то метаданные описывающие RAID массив, и хранятся они, вроде бы, в последнем секторе каждого диска. Загружаюсь с live CD, запускаю WinHEX, открываю последний сектор диска, сразу вижу, указаны серийники дисков из массива, заменяю серийник старого диска на новый, повторяю для всех дисков, пробую загрузиться — не помогает, опять «non RAID disk».
Есть, видимо еще какие-то поля, но как узнать формат метаданных? В результате долгих поисков выясняю: для аппаратных контроллеров единого стандарта нет, даже для разных чипов одного производителя, вот почему многие любят software RAID; у меня вовсе не настоящий аппаратный RAID, а полуаппаратный fakeRaid и для него есть поддержка в Linux (dmraid).
Скачиваю исходники Linux kernel, нахожу нужный файл, разбираюсь с форматом — нужно вставить правильную контрольную сумму. Пишу программку на C для подсчета CRC, правлю CRC, пробую — неудача. Снова копаюсь в исходниках, есть еще одна контрольная сумма для заголовка, как считать не понял, но есть чудо флаг — игнорировать CRC.

Итак, устанавливаю флаг, запускаю — все работает, победа: диск опознался, система грузится, все файлы целы, consistency check не выявил ошибок! Слава WinHEX и Linux kernel!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.