Восстановление данных с битого диска
Небольшая предыстория
Обратилась ко мне недавно родственница с проблемой: любимый котик уронил внешний жесткий диск с архивом любимых фото на (не менее любимый) пол. И диск (на 2 Тб) сдох. Ну, как сдох: включаешь его, а он какое-то время подумав, начинает стучать головками. Информация, естественно не читается.
Ну, я решил помочь, тем более, что интересно стало: получится или нет? Раньше, когда ко мне обращались с такими дисками, я посылал [в ремонт, восстановление данных на спец. аппаратуре, 20 000 руб. и выше]. С этой целью я взял [неиспользуемый] комп, заставил купить запасся жестким диском заведомо большего (3 Тб) размера, и решил осуществить посекторное копирование всего, что удастся скопировать (а там уже вытаскивать файлы).
Подключаю [по SATA] 2 диска к компьютеру, загружаюсь с реаниматора (виндового) и пробую сделать посекторную копию диска с помощью Symantec Ghost (с пропуском битых секторов естественно). Не тут-то было: копирование начинается, проходит 1, 5, 10…20 минут, доходит до битого сектора… и начинается постукивание головок, а с диска только ошибки, полезной инфы нет. После перезагрузки какое-то время всё ок, а потом та же картина.
Пробую dd для linux: то же самое. Начинаю рыть в инете, и натыкаюсь на чудные утилиты: ddrescue и dd_rescue. Они обе умеют копировать диск и вести лог (хотя это не совсем лог, а скорее что-то типа базы данных) своей работы, причем после перезагрузки компьютера скормишь им этот лог - и они уже продолжают с прерванного места.
Беру дистрибутив убунту (Linux Lite), загружаюсь с CD, с двумя подключенными дисками (2Тб-битый, 3Тб-новый) и флешкой (куда писать лог). Запускаю ddrescue - нет такого пакета, надо ставить. Ставлю, запускаю, указал лог, пошло копирование… через 5 минут диск начал стучать.
Останавливаю копирование, выключаю компьютер, жду когда диск остынет (пару минут в данном случае) и … СНОВА:
- включаю компьютер
- загружаюсь с CD с linux lite
- устанавливаю пакет ddrescue
- запускаю процесс копирования, указав ему тот же лог файл, что и в прошлый раз.
Наверное после 30-го выключения/включения компьютера мне это надоело и я подключил битый диск через USB коробочку. Однако, мне по-прежнему приходилось слушать, не начнет ли стучать диск: это значило, что пора опять прерывать процесс копирования, отключать/включать коробочку с диском и снова запускать копирование.
Где-то дня через 4 мне это надоело, и я нашел такой параметр как тайм-аут: если последние ххх секунд успешных считываний с диска не было - останавливать копирование. С этой опцией мне уже не нужно было сидеть наготове "как бы ddrescue весь диск не пометил как битый":
- запустил копирование
- ушел
- пришел через какое-то время
- увидел,что копирование прервалось по тайм-ауту
- выключил коробочку с битым диском / подождал, пока диск остынет / включил коробочку
- запустил копирование снова
Итог: за неделю было скопировано свыше 1800 Гб из 2000 Гб. Возможно, что потратив еще неделю, я бы смог "вытянуть" еще сотню гигабайт, но поскольку я даже не знал объема потерянной инфы (может, там 5 Гб на весь 2Тб диск?), я решил заняться восстановлением.
Программа R-Studio вполне справилась со своей задачей: менее, чем через сутки я увидел, что там есть "удаленные" файлы (NTFS испорчена) и смог их восстановить.
Итог: восстановлено свыше 60 000 фоток, кроме того какое-то там видео, MP3 и т.п. Да, часть из фоток (возможно - бОльшая, я просмотрел менее 1% фото) испорчена, но минимум 20-30% фотографий спасти удалось.
Итак, алгоритм работы с битым диском
Исходные данные и требования:
- Битый диск должен читаться (посекторно, хоть какие-то места диска - не обязательно первые секторы) хоть по 5-10 минут сразу после включения, но должен. Если диск не читается вообще никак - тут программы бессильны.
- Нужен еще один чистый диск такого же или большего объема
- USB коробочка, в которую можно вставить битый диск чтобы его отключать, когда он перестает читаться - такая коробочка существенно сэкономит Вам время (хотя и без нее можно обойтись)
- Нужна флешка или еще один жесткий диск, куда будет записываться лог-файл.
- Требуется компьютер, на котором будут выполняться длительные операции посекторного копирования с диска на диск.
- Ну и еще нужен LiveCD с linux, на котором уже есть или можно установить пакет ddrescue или dd_rescue
Процедура копирования диска
- Подключаете все устройства (диски, флешку, устройство с linux) к компьютеру
- Загружаетесь с LiveCD
- Устанавливаете ddrescue (если это необходимо). В случае Linux Lite это будут команды:
sudo apt update
sudo apt install gddrescue
- Определяете пути:
- к битому диску (откуда копировать - пусть это будет /dev/sda)
- к хорошему диску (куда копировать - пусть это будет /dev/sdb)
- путь на (смонтированной) флешке к лог файлу (пусть это будет /mnt-flash/logs/ddrescue.log)
- Первый проход копирования запускаете командой:
sudo ddrescue --no-split -T 10s --verbose /dev/sda /dev/sdb /mnt-flash/logs/ddrescue.log
команда выполняется долго, но она делает минимум попыток чтения и просто пробегается по всему диску (если это возможно). После первого подвисания диска на ошибке (и прекращении копирования) переходим к следующему пункту
- Запускаете команду:
sudo ddrescue --direct -f -T 10s -vvvvvvvvvvv /dev/sda /dev/sdb /mnt-flash/logs/ddrescue.log
- Когда диск начинает сбоить, отображается таймер
- По истечении 10 секунд операция копирования останавливается
- Выключаете диск и даете ему остыть, если это необходимо.
- Включаете диск
- Возвращаетесь к пункту 6
Нюансы
- Бывает, что у диска слишком большие битые области. Поэтому даже после выключения/включения он сразу начинает сбоить. В этом случае просто увеличьте таймаут (за таймаут отвечает опция "-T", просто измените на -T 20s или на -T 30s )
- ddrescue иногда бывает "слишком умный" и после очередного запуска команды начинает сканировать диск в другую сторону (например, не от начала в конец, а обратно в сторону начала скан пошел). Если Вам такое поведение не нужно, используйте опцию: "-u" команда будет такая:
sudo ddrescue --direct -f -u -T 10s -vvvvvvvvvvv /dev/sda /dev/sdb /mnt-flash/logs/ddrescue.log
- Вы уже просканировали диск от начала к концу и хотите проверить битые области еще раз, с меньшим тайм-аутом. для этого нужно все битые области пометить как несканированные. используйте опцию: "-A", команда при этом будет такая:
sudo ddrescue -A --direct -f -T 10s -vvvvvvvvvvv /dev/sda /dev/sdb /mnt-flash/logs/ddrescue.log
- Количество попыток считывания с диска можно увеличить (или уменьшить) это задается опцией "-r":
sudo ddrescue -r 10 --direct -f -T 10s -vvvvvvvvvvv /dev/sda /dev/sdb /mnt-flash/logs/ddrescue.log
- Советуем просканировать диск в разных направлениях: от начала к концу и от конца к началу, несколько раз и с разными таймаутами. Это поможет вытащить максимум информации (хотя и занимает уйму времени). Программа ddrescue дойдя (от начала) до конца диска автоматически начнет сканировать диск в обратном направлении, так что о смене направления сканирования беспокоиться не нужно. Но если Вы хотите, можете использовать опцию "-R" для смены направления сканирования:
sudo ddrescue -R --direct -f -T 10s -vvvvvvvvvvv /dev/sda /dev/sdb /mnt-flash/logs/ddrescue.log
- Для ламеров в linux: когда подключено несколько жестких дисков, как определить, какой из них битый, а какой - новый? Откуда куда копировать? Если на диске читается MBR/GPT, то используйте команду:
fdisk -l /dev/sda
fdisk -l /dev/sdb
fdisk -l /dev/sdc
fdisk -l /dev/sdd
- Если mbr недоступна, то получить информацию об устройстве можно такой командой:
lsblk
или такой:
fdisk -l
или вот:
blkid
и вот еще:
hwinfo --block --short
кроме того, есть утилита gparted, которая также может отображать информацию о дисках:
parted -l
Источниками статьи послужили следующие материалы:
- Спасаем данные в Linux с помощью ddrecovery
- ddrescue(1) - Linux man page
Статья опубликована 18.10.2017
|