Анализ и восстановление данных с винчестера

Полетел винт. В BIOSе винчестер определяется. Но не видятся логические диски или Windows радушно предлагает их отформатировать? А данные ой как нужны. Что делать?

Подключаем его к другому компьютеру как дополнительный винчестер – вполне возможно что у вас капризничает материнка или ОС. В примерах ниже, если это не оговорено, в качестве операционной системы используется линукс. Подключаем, если это возможно, не через usb, а напрямую к материнской плате, через sata/ide  разъемы. Если есть несколько шлейфов sata/ide – попробуйте каждый – иногда проблема бывает именно в некачественном шлейфе.

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

Если винчестер внешний и подключается только через USB – подключайте его сзади системника. Если не хватает напряжения – передние usb-порты страдают от этого первыми, в такой ситуации, например, флешки, могут примонтироваться только в read-mode.

Подключили? Проблема все та же? Данные все так же нужны?

Тогда действуем прям по списку:

1. Определяем идентификатор винчестера

Для дальнейшей работы с проблемным винчестером необходимо узнать его идентификатор в системе (это название вида /dev/sd*, где * – буква a-z). Цифры после третьей буквы – номер обнаруженного раздела. Таким образом /dev/sdg – идентификатор винчестера, а /dev/sdg5 – один из его разделов. Определить идентификатор винчестера в системе можно несколькоми способами:

Если разделы винчестера корректно определяются системой – можно воспользоваться утилитой fdisk:

sudo fdisk -l|grep NTFS

/dev/sda1   *           1        1030     8271872    7  HPFS/NTFS
/dev/sda2            1030        6130    40962045    7  HPFS/NTFS
/dev/sda5            6130       91202   683336704    7  HPFS/NTFS
/dev/sdb5               1      807237  1953511424    7  HPFS/NTFS
/dev/sdd1               1      182402  1465135104    7  HPFS/NTFS

Данная команда выведет информацию по всем NTFS разделам всех жестких дисков и вам останется только выбрать диск с проблемным разделом.

Если же система не может распознать что за файловая система расположена на винчестере можно воспользоваться утилитой lshw, выводящей детальную информацию о любой железке:

lshw -C disk -short

H/W path                 Device       Class       Description
=============================================================
/0/100/1c.4/0/0.0.0      /dev/sdc     disk        320GB ST3320620A
/0/100/1f.2/0.0.0        /dev/cdrom1  disk        DVD RW AD-7260S
/0/100/1f.2/0.1.0        /dev/sda     disk        750GB WDC WD7501AALS-0
/0/100/1f.5/0.0.0        /dev/sdb     disk        2TB WDC WD20EARS-00S
/0/1/0.0.0               /dev/sdd     disk        2TB SCSI Disk
/0/2/0.0.0               /dev/sde     disk        32GB SCSI Disk

Вывод данной команды будет содержать краткую информацию по всем винчестерам, вам необходимо выбрать  идентификатор жесткого диска, данные с которого необходимо восстановить.

С помощью графической утилиты gparted, которая отображает разметку обнаруженных разделов на каждом устройстве также можно определить который из винчестеров нуждается в профилактике.

Если ничего из вышеописанного в системе нет и установить по каким-то причинам невозможно – идем “в лоб”:

cat /proc/partitions и cat /proc/mount

и сравнивая списки успешно примонтированных разделов со списком всех обнаруженных разделов – выбираем идентификатор винчестера при работе с которым возникли трудности.

Зная идентификатор винчестера – мы можем его продиагностировать – какого рода болезнь его одолела – софтверного или хардверного толку.

2. Проверяем винчестер на bad-blocks

Во всех примерах ниже, используемый идентификатор жесткого диска – /dev/sda необходимо заменить на идентификатор вашего винчестера, полученный на предыдущем этапе. Учтите – все подробные проверки могут выполняться долго, конкретное время зависит от объема вашего жесткого диска, оставлять его на ночь – обычная практика и то, не все проверки успевают завершиться.

1) с помощью утилиты badblocks пакета e2fsprogs:

badblocks -nvs /dev/sda

или использовать флаг -e 1 – тогда программа закончить проверку при первом же найденном поврежденном секторе. Проверка осуществляется независимо от SMART. Важно указать флаг -n – в таком случае проверка будет производиться в “мягком” режиме не разрушая данные. флаги -s и -v служат для подробного отображения хода проверки.

2) С помощью утилит пакета smartmontools. Применима только для устройств поддерживающих SMART – т. е. для подавляющего большинства современных жестких дисков.

Быстрая проверка:

smartctl -H /dev/sda
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

К сожалению даже благополучный диагноз PASSED еще не значит, что винчестер механически здоров, потому проверим, были ли ошибки во время работы:

smartctl -l error /dev/sda
=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
No Errors Logged

Показать общую информацию о жестком диске:

smartctl –all /dev/sda

Атрибуты SMART на которые необходимо обратить внимание. Чем меньше их значение (столбец RAW_VALUE) – тем лучше здоровье нашего винчестера.

Raw Read Error Rate – частота аппаратных ошибок при чтении данных с диска.
Spin Up Time – время раскрутки пакета дисков из состояния покоя до рабочей скорости.
Spin Up Retry Count – число повторных попыток раскрутки дисков до рабочей скорости, в случае если первая попытка провалилась.
Seek Error Rate – частота ошибок при позиционировании блока головок.
Reallocated Sector Count – число операций переназначения секторов.
Reallocated Event Count – число операций переназначения
Current Pending Sector – число подозрительных секторов, кандидатов на переназначение.

В частности, если при выполнении команды

sudo smartctl -a /dev/sda|grep -i reallocated
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       –       0

последняя цифра не равна нулю – у нас на лицо проблемы аппаратного характера.

Перед тем как провести детальное тестирование, полезно знать сколько оно будет продолжаться:

smartctl -c /dev/sda

Вывод будет длинный. Важные для нас строчки:

Short self-test routine
recommended polling time:        (   2) minutes.
Extended self-test routine
recommended polling time:        ( 185) minutes.

Если smartctl не выводит нужную нам информацию и не запускает проверки – проверьте – быть может именно у вас тот винчестер что не поддерживате SMART? Проверьте, что в выводе команды smartctl -c /dev/sda в разделе “Offline data collection capabilities” есть отметка о “Self-test supported” – это подтверждает, что проверяемый винчестер поддерживает SMART. Если smartctl не понимает какой у вас винчестер можно ей помочь указав через флаг -d (–device=) его тип. Наиболее распространенные: ata/scsi/sat, полный список в man smartctl.

Запуск краткого тестирования:
smartctl -t short /dev/sda
Запуск подробного тестирования:
smartctl -t long /dev/sda
Вывод результатов тестирования:
smartctl -l selftest /dev/sda

Вот там разобраны некоторые интересные моменты по смарт-технологии:
http://sourceforge.net/apps/trac/smartmontools/wiki/FAQ

3) Программы сканирующие жесткий диск на наличие bad-блоков для Windows:
MHDD, Victoria, Vivard

3.1 Если на винчестере не обнаружено bad-секторов, но файловая система повреждена и ее необходимо восстановить.

То есть нам нужны не только данные, но и их названия, системные файлы, программы, дерево папок и т.п.

Если данные очень-очень важны – настоятельно рекомендуется сделать копию диска и работать с ней. Как это сделать описано в следующем разделе. Все что указано ниже – используется на оригинальном накопителе.

1) для NTFS-разделов запустить из под Windows

chkdsk /f DRIVE-LETTER: (chkdsk /f C:)

/f  – этот флаг указывает, что необходимо исправлять ошибки на жестком диске
DRIVE-LETTER – буква диска

2) Под линуксом для NTFS разделов есть утилита ntfsfix из пакета ntfsprogs. Запускать как:

ntfsfix /dev/sda

По моему опыту – родная проверка из под Windows в большинстве случаев оказывается более эффективной.

3) Под линуксом, если файловая система линукс-специфичная, можно попробовать запустить e2fsck с флагом -c (или -cc) будет проведена проверка всего диска. Все найденные поврежденные сектора будут занесены в специальный список и не будут доступны для работы.

4) Под линуксом для других типов разделов необходимо использовать утилиту fsck. Она самостоятельно пробует определить тип файловой системы и соответствующим образом проводит проверку и восстановление структуры файловой системы.

5) Если все вышеописанное не помогло – обратимся к тяжелой “артелерии” – утилите testdisk:

  1. Запускаете програму testdisk (testdisk.exe под Windows)
  2. Выбираете создать новый лог-файл (при перезапуске выбирайте пункт “Добавлять к существующему”, это позволит возобновлять остановленные проверки не с начала)
  3. Выбираете диск для анализа
  4. Выбираете тип раздела (для обычных бытовых винчестеров скорее всего обычный Intel)
  5. Выбираем первый пункт – Analyse
  6. Далее вам будем отображена текущая разметка диска – если вас не устраивает, что вы видете – выбирайте пункт “quick search” при выборе которого запускается быстрая проверка винчестера на предмет поврежденных разделов
  7. Как правило быстрый поиск ничего не дает и приходится прибегать к deeper search, который занимает существенно больше времени однако, если на винчестере нет механических повреждений способен эффективно восстанавливать структуру файловой системы.
  8. После завершения поиска полезно проверить содержимое разделов – нажимаем кнопку P и изучаем список обнаруженных на разделе файлов.
  9. Если результаты нас устраивают – найденным разделам, которые нам нужны, с помощью стрелок “влево-вправо”, необходимо присвоить соответствующий статус. L – логический, * – загрузочный и т.д. Некорректные разделы – помечаем как D – deleted – удаленные.
  10. Важно после этого записать все изменения разметки диска – выбираем пункт write
  11. Перезагружаемся
  12. Если же результаты нас не устраивают – придется вручную указывать характеристики диска – число цилиндров, тип файловой системы и после этого вновь запускать глубокий поиск.

В том случае, если NTFS раздел не определяется после восстановления структуры с помощьюtestdisk, необходимо, после перезагрузки в Windows, запустить “родную”  проверку диска – chkdsk.

Вот там прекрасное описание (на английскомй) со скриншотами: http://www.cgsecurity.org/wiki/TestDisk_Step_By_Step

Платные утилиты:
Acronis Disk Director, Active Partition Recovery

3.2 Если винчестер без bad-секторов, файловая система повреждена, но нам нужны только данные и необходимости восстанавливать сам раздел нужды нет.

Для восстановления данных из разделов мы можем использовать следующие утилиты:

Photorec, foremostscalpel, scrounge-ntfs – детальное описание в разделе 5: Как восстановить данные с жесткого диска или образа диска применительно к созданному образу винчестера. Для восстановления данных непосредственно с устройства, порядок действий тот же, просто вместо файла содержащего побайтовую копию накопителя, необходимо указывать идентификатор устройства.

под Windows:
Recuva

Платные:
Get data back, R-studio

4. Что делать если на винчестере обнаружены bad-блоки?

Для начала, необходимо создать копию всего жесткого диска, чтобы работать с ней и проблемы железа не отражались на скорости анализа, не усугубляли здоровье винчестера и т.д.

Копируем жесткий диск:

1 вариант – с помощью dd:

dd if=/dev/sdg of=/dev/sda bs=8K conv=noerror,sync

/dev/sdg – ЧТО будем зеркалить
/dev/sda – КУДА будем зеркалить
bs=8K – указываем размер блоков данных для считывания/записи.
noerror  – флаг указывает что не смотря на ошибки копирование должно быть завершено
sync – флаг указывает, что в проблемные блоки можно понавтыкать нулей, чтоб не возникло смещений на приемнике.

2-ой вариант – делать копию диска с помощью ddrescue. Данная утилита корректно обрабатывает аппаратные ошибки чтения, способна производить реверсивное копирование и может быть гибко настроена с помощью соответствующих ключей. Для копирования диска с механическими повреждениями рекомендуется использовать именно ее – так как многие проверки в ней активизированы по умолчанию и вам нет нужды, заслышав пощелкивание головок, перезапускать реверсивное копирование или явно указывать о необходимости пропустить участок с ошибками.

В общем случае, достаточно такой последовательности команд:

Копируем свободные от ошибок блоки данных:

ddrescue –no-split /dev/sdg /path/to/image-file/image-file /path/to/log-file/log-file

Далее пробуем считывать проблемные сектора добавляя вычитанные данные к существующему образу и используя созданный на предыдущем шаге лог-файл.

ddrescue –direct –max-retries=3 /dev/sdg /path/to/image-file/image-file /path/to/log-file/log-file
ddrescue –direct –retrim –max-retries=3 /dev/sdg /path/to/image-file/image-file /path/to/log-file/log-file

–no-split – указываем заполнять не считанные области нулями (в расчет на то, что при последующей попытке удастся часть данных считать)
–max-retries – максимальное число попыток считывания
–direct -считываем напрямую с устройства, не используя данные считанные на предыдущих этапах из кеша
–retrim – помечаем все битые блоки

Там достаточно подробно описаны детали использования утилиты ddrescue в зависимости от ядра линукс системы, которые вы используете: http://www.forensicswiki.org/wiki/Ddrescue

После того как был создан образ проблемного диска на здоровом носителе, сбойный жесткий диск необходимо от системы отключить.

5. Как восстановить данные с жесткого диска или образа диска.

Нижеописанные приемы подходят не только для использования при восстановлении данных с копии жесткого диска, но и для работы непосредственно с винчестером, однако, настоятельно рекомендуется для сохранности данных и ускорения анализа – все-таки сделать образ жесткого диска и работать с ней.

Итак, у нас есть:

/user/home/badhdd.img – копия винчестера, которую мы побайтово считали на предыдущем (линк) этапе (можно использовать и идентификатор проблемного жесткого диска – /dev/sdw).
/dev/sdz – чистый диск, на который мы будем записывать всю информацию найденную на копии жесткого диска.

Очищаем диск-приемник:

dd if=/dev/zero of=/dev/sdz bs=8K (аккуратней – эта команда удаляет ВСЕ данные на вашем винчестере)

Теперь пришла пора искать данные:

1). Используя утилиту foremost – мощный инструмент для поиска скрытых данных на шифрованных разделах. Общий формат команды:

sudo foremost -i (address of corrupted hard drive) -o (address of external drive) -T -v

в нашем случае будет:

sudo foremost -i /user/home/badhdd.img -o /dev/sdz -T -v

-T – временная метка будет добавлена к имени выходного каталога, что исключает возможность перезатирания восстановленных данных при повторном перезапуске
-v – verbose mode –  при работе будет выводиться подробная информация

Можно указать искать файлы определенного типа (флаг -t), указать искать заголовки файлов, пропустив заданное число блоков в начале устройства (флаг -s), для ускорения процесса можно указать флаг -k размер блока данных считываемый в память. Перед началом анализа полезно запускать foremost с флагом -w – будет выведен список обнаруженных файлов, которые foremost может попытаться восстановить.

2) scalpel – аналог foremost, ориентированный на слабые машины.

3) Программа photorec, ее интерфейс очень похож на testdisk:

  1. Запускаем photorec (photorec.exe под windows)
  2. Выбираем интересующий нас диск
  3. Выбираем тип раздела (в большинстве случаев, для бытовых винчестеров – Intel)
  4. Выбираем раздел диска в котором хотим искать данные
  5. В разделе FileOpt мы можем выбрать какие типы файлов мы хотим восстанавливать
  6. Далее мы выбираем в какой файловой системе на выбранном ранее разделе хранятся наши данные
  7. Выбираем где искать данные – во всем разделе или только в области помеченной как нераспределенная
  8. Наконец выбираем куда сохранять найденные данные

Подробное описание со скриншотами на английском – там – http://www.cgsecurity.org/wiki/PhotoRec_Step_By_Step

Photorec может быть запущена для анализа образа диска как:

photorec /path/to/my-image/image.dd

6. Ссылки по теме восстановление данных с винчестера

Список утилит для восстановления данных – http://www.forensicswiki.org/wiki/Tools:Data_Recovery

Подробная статья про восстановление данных используя Ubuntu:  https://help.ubuntu.com/community/DataRecovery

Неплохие статьи про восстановление информации:

http://www.howtogeek.com/howto/15761/recover-data-like-a-forensics-expert-using-an-ubuntu-live-cd/

http://geekyprojects.com/storage/how-to-recover-data-even-when-hard-drive-is-damaged/

Здесь подробно расписано про восстановление данных с файловых систем ext2/ext3/ReiserFS: http://smartmontools.sourceforge.net/badblockhowto.html

Любопытный пример описания того, как извлечь скрытые данные с помощью foremosthttp://mydebianblog.blogspot.com/2007/01/1-foremost.html

В интернетах бродят сборки всяческих средств для восстанавления данных – можно искать по этим словам:
alkid live cd
rescue cd – http://www.sysresccd.org/Main_Page

Записки ремонтника:

http://nnm.ru/blogs/X-Hunter777/zapiski-remontnika-iz-rabochego-zhurnala/
http://nnm.ru/blogs/X-Hunter777/zapiski-remontnika-iz-rabochego-zhurnala-chast-2/

19 pings

Skip to comment form

  1. Visitor recommendations…

    […]one of our visitors recently recommended the following website[…]……

  2. Tumblr article…

    I saw someone talking about this on Tumblr and it linked to…

  3. Wow!…

    A very awesome post….

  4. Wow!…

    A very awesome post….

Leave a Reply

Your email address will not be published.