«Воскрешаем» HDD с помощью Arduino

в 11:14, , рубрики: arduino, seagate barracuda 7200.11, восстановление жесткого диска, Накопители, метки: , ,

Хочу поделиться опытом восстановления жесткого диска Seagate Barracuda 7200.11 ST3500320AS после сбоя. Короткая предыстория: один мой друг решил сделать полное форматирование своему жесткому диску, после чего тот больше не определялся в BIOS. Выкидывать 500-гигабайтный винчестер было жалко, и он отдал жесткий диск мне на растерзание. Забегая наперед, скажу, что прокачанные навыки «гугление» и «очумелые ручки» позволили добиться отличных результатов.

Итак, данный метод подходит для жестких дисков Seagate и Maxtor (для Samsung существует похожий способ, но в этой статье он не освещен). Информации касательно жестких дисков остальных производителей найдено не было. В конце статьи рассматриваются возможные проблемы. Я настоятельно рекомендую прочитать статью полностью, перед тем как повторять описанные здесь действия.

Конвертер

Конвертер можно купить (в продаже есть USB-TTL и COM-TTL) или сделать самому (привожу несколько схем ниже).
«Воскрешаем» HDD с помощью Arduino«Воскрешаем» HDD с помощью Arduino

Для тех, у кого есть Arduino: соединяем GND и RESET, используем контакты RX и TX.
«Воскрешаем» HDD с помощью Arduino

«Воскрешаем» HDD с помощью Arduino Для проверки схемы можно замкнуть RX и TX, — в результате все, что мы введем, должно вернуться.

Подключение

Подключаем RX и TX, как на рисунке ниже, отключаем SATA-кабель, подключаем питание.

«Воскрешаем» HDD с помощью Arduino

Для работы с COM-портом я использовал PuTTY, с задачей также отлично справится ваша любимая программа. Итак, открываем PuTTY, выбираем тип подключения Serial, вводим порт и остальные настройки:

Speed 38400
Data Bits 8
Stop Bits 1
Parity None
Flow Control None

Открываем окно терминала, нажимаем Ctrl+Z и видим приглашение:

F3 T>

«Воскрешаем» HDD с помощью Arduino Чтобы увидеть список команд и описание к ним для вашего жесткого диска, необходимо ввести /C, а затем Q.

Восстановление

Пришло время приступить к восстановлению.

«Воскрешаем» HDD с помощью Arduino Важно: соблюдайте регистр при вводе команд!

  1. Перейдем на уровень 1, введя /1
  2. Очистим S.M.A.R.T. командой N1
  3. Выключаем питанием и ждем, когда остановится двигатель (~10 сек)
  4. Включаем питание и снова нажимаем Ctrl+Z
  5. Очищаем список bad-блоков: вводим i4,1,22
  6. Повторяем пункты 3-4
  7. Вводим в консоли: m0,2,2,0,0,0,0,22 (для жестких дисков «Made in China» — m0,2,2,,,,,22)
  8. Переходим на уровень 2: /2
  9. Останавливаем двигатель: вводим Z
  10. Выключаем питание

После всех манипуляций жесткий диск стал определяться в BIOS. Чтобы не столкнуться с проблемой снова, обновите ПО у винчестера. Эта процедура совсем проста: с сайта производителя скачивается загрузочный образ, который записывается на болванку. Далее — загрузка и обновление прошивки в пошаговом режиме, просто следуйте инструкциям на экране.

Сейчас я описал ситуацию, когда все работает, как надо, но так получается редко. В процессе восстановления возникло несколько трудностей, с которыми, я уверен, вам тоже предстоит столкнуться. Поэтому, все у кого что-то не получилось, ищите решение в последнем разделе этой статьи.

О том, что осталось за кадром

Поскольку эта статья — результат собственных экспериментов, основаных на различных материалах по восстановлению HDD, далее я опишу те проблемы, с которыми столкнулся сам.

Проблема Решение
Шум в консоли Подключите контакт GND к «земле» на блоке питания. Я использовал провод от клавиши включения. Также вытяните джампер SATA I из жесткого диска.
На экране после нажатия Ctrl+Z ничего не появляется Скорее всего, неправильно подключены RX и TX.
При первом включении появляется ошибка
LED:000000CC FAddr:0025BF67

или

LED:000000CC FAddr:0024A7E5
Сначала попробуем отключить головки. Для этого откручиваем плату (заодно можно и почистить контакты ластиком: у меня там было очень много грязи), ложим изолятор (бумага, изолента и т.д.) на контакты, ведущие к головкам, и обратно прикручиваем плату (не всеми винтами, а так, чтобы было питание на мотор). Включаем питание, нажимаем Ctrl+Z, вводим /2, потом Z. Ждем сообщение об успешной остановке.

Spin Down Complete
Elapsed Time 0.138 msecs

Не отключая питания, откручиваем плату, достаем наш изолятор и прикручиваем обратно плату, вводим команду запуска двигателя: U.

Если не помог метод отключения головок, нужно замкнуть контакты на плате острым пинцетом или тонким проводком. На фото (доступны по ссылкам ниже) показаны точки замыкания на разных жестких дисках.

«Воскрешаем» HDD с помощью Arduino Замыкайте контакты после включения питания жесткого диска. Будут слышны стуки головок, а потом и остановка двигателя.
После этих манипуляций подайте команду на остановку двигателя, разомкните контакты и запустите двигатель снова.

Двигатель не запускается с ошибкой

Error 1009 DETSEC 00006008 
Spin Error 
Elapsed Time 53.959 secs 
R/W Status 2 R/W Error 84150180
Вероятно, вы забыли снять изолятор или плохо привинтили плату. Также причиной может служить механическое повреждение.
Остановка двигателя не происходит. Сопровождается ошибкой

LED:000000CE FAddr:00280569
На минуту выключите питание. Если ошибка не уходит, сперва попробуйте запустить двигатель, введя U.

Спасибо за внимание, пусть ваши жесткие диски служат долго.

Автор: valashko


  1. Юра:

    А можно скетч для Ардуино и команды там наверное иные.

    • Анон:

      замыкая GND и reset ардуинка не исполняет свой код! Поэтому arduino становится что-то типа USB-TTL.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js