Первый раз к нам попал для восстановления данных накопитель SSD Samsung EVO 850 емкостью 1 ТБ. Отнюдь не дешевое устройство (330 зеленых денег на сайте Samsung), надежное и быстрое (по поводу надежности у нас есть большие сомнения; то, что быстрое – оно и понятно, SSD все-таки). Приехал к нам этот накопитель со стандартной бедой: BIOS его не видит, ни одна система не может определить. Накопитель был обильно орошен слезами заказчицы, но пластик не ржавеет =)
.
Работа с такими устройствами всегда полна сюрпризов. Во-первых, неисправными могут быть (чуть не сорвалось с языка головки чтения-записи; ох уж эти мне ЖД :D) микросхемы NAND (недостаточно качественная пайка, температурная деформация платы электроники с отслоением чипов и т.п.). Во-вторых, могут выходить из строя SMD-элементы на плате (в основном, работающие в цепях питания). В-третьих (и в самых главных), могут случаться ошибки микропрограммы, приводящие к зависанию накопителя на долгое время – так называемые циклические ошибки. Наиболее известным примером такой ошибки является попытка скрыть несуществующий дефектный сектор в один из дефект-листов НЖМД: поскольку сектор уже скрыт и такого адреса в логическом пространстве накопителя больше нет, работа микропрограммы ЖД останавливается в ожидании «чуда» (внешнего события, которое прервет состояние ступора).
С SSD все несколько сложнее. Микропрограмма такого накопителя оперирует не секторами (ими оперирует интерфейсная часть, которая дает отказы крайне редко, так как уже давно хорошо отработана и оттестирована), она оперирует страницами. Размер страницы обычно значительно больше размера сектора (скажем так, в разы, а иногда и на порядки). Естественно, слабым местом в этом случае будет связь между интерфейсной частью накопителя и его внутренней огранизацией – эта часть микропрограммы называется «транслятор», так как микропрограмма «транслирует» (т.е. переводит) данные из страничного формата, понятного SSD, в формат секторов, понятный операционной системе.
Так вот, обычно, если у вас внезапно отказывается работать SSD, это означает проблемы с транслятором: что-то пошло не так, и диск «завис», остановив микропрограмму и перестав реагировать на любые запросы. Проблема таких накопителей в том, что прервать «зависание» обычными методами невозможно: накопитель встает намертво, в микропрограмму не заложена возможность обработки таких ошибок, он ждет, пока его разблокируют вручную. Такая разблокировка возможна, однако требует определенных навыков.
Во-первых, накопитель никогда не выйдет в готовность самостоятельно: его придется особым образом инициализировать. Обычно это установка перемычки (замыкание технологических контактов) для перевода накопителя из режима штатной работы в так называемый boot-mode – режим работы загрузчика. При этом накопитель выходит в готовность, определяется заводским именем и не показывает полного объема и правильный серийный номер. Это все для нас и не важно – важно то, что накопитель вышел в готовность и готов принимать данные.
Теперь начинается самое интересное – какие данные накопителю нужно отправить. Обычно boot-mode используется для перепрограммирования (или начального программирования) накопителя. Соответственно, при перепрограммировании мы гарантированно потеряем доступ к данным, так как будет утерян исходный транслятор. Тут важно понимать, что транслятор – структура уникальная для каждого диска, и после ее потери восстановить данные будет просто невозможно. Поэтому любые действия, которые мы производим с накопителем, должны учитывать тот факт, что терять транслятор нам нельзя ни в коем случае. Берем бубен, начинаем медитировать.
Мы должны загружать в накопитель, ожидающий от нас каких-то данных, своеобразный лоадер, содержащий минимальный набор необходимых модулей микропрограммы, способных «завести» накопитель, позволить считать таблицы трансляции и дать нам доступ к технологическому режиму, в котором мы можем перечитать эти самые таблицы и применить (инициализировать) их в памяти SSD. После этого у нас будет полный доступ к области данных твердотельного диска, и мы сможем вычитать данные заказчика.
Для работы с SSD Samsung мы используем программно-аппаратный комплекс РС-3000. К сожалению, на текущий момент в нем нет поддержки накопителей Samsung EVO 850, однако это нам не помешает: мы же не просто так приготовили бубен! Прежде всего, мы изготовили лоадер для нашего накопителя, использовав апдейт микропрограммы (упакованный файл для обновления версии встроенного ПО SSD). Не будем утомлять читателя, как мы это делали, определим лишь ключевые моменты: распаковка апдейта, расчленение его на модули, соединение модулей, которые нам нужны, в правильном порядке, формирование заголовков и выделение пакетной команды, после которой накопитель примет весь этот винегрет так, чтобы мы могли с ним работать.
После двух часов непрерывного секса искомый лоадер был получен (проверки велись, естественно, на диске-доноре, который не был обременен данными клиента), отработал корректно и дал нам доступ к «поляне». Пришло время зарамсить проблему с больным диском!
Вооружившись пинцетом и произнеся магические слова «ну не дай бог у вас разные алгоритмы работы», мы подцепили накопитель на порт РС-3000, открыли АТА-shell и, описывая вокруг компьютера круги и стуча в бубен, замкнули перемычку технологического режима. Диск дал готовность; поблагодарив Великий Дух Маниту, решительным движением пальца мы отправили в накопитель заранее заготовленный лоадер. Диск немного помигал регистрами и остановился в готовности, предоставив нам полный карт-бланш. Победа!
Дальнейшее описывать скучно: получив доступ к поляне, мы увидели 300 гигов данных заказчика, скопировали их на другой диск, после чего обновили накопителю прошивку и получили работающий SSD. Клиент был рад вдвойне: его восстановление данных мгновенно окупилось, так как он получил не только свои данные, но и работающий дорогостоящий накопитель.