Восстановление файлов на NTFS разделе под Linux

Уроки на будущее для владельцев компьютеров:

  1. Делайте резервные копии системы
  2. Делайте резервные копии системы регулярно

Бывает так, что установленная в дуалбут режиме система подводит. К примеру, вы использовали Windows, затем установили ubuntu, она вам понравилась, и с тех пор больше года в старую систему не загружались. Внезапно вам понадобились какие-то старые файлы с той системы, но… Загрузчик не определяет ваш ntfs диск, загрузки системы не происходит, установщик винды  в rescue режиме — так же не видит раздел, и (о боже!) драйвер ntfs-3g под Linux так же не монтирует этот раздел! Согласитесь, проблемка?

Восстановление данных с жесткого диска не такое уж сложное занятие, в особенности если винчестер всё еще работает ;)

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

Хорошо подходит для этой работы утилита GNU ddrescure (так же может называться ddrescue или gddrescue в зависимости от того какой у вас дистрибутив Linux). Убедитесь что у вас GNU версия программы, так как могут попасться с похожими названиями, но не такие юзерфрендли. Снятие образа с жесткого диска может занимать довольно много времени и очень удобно, если есть возможность вывести состояние о ходе копирования, остановке или перезапуске на любом этапе. Для создания  образа просто запустите под root:

ddrescue -r3 /dev/sda2 imagefile logfile

/dev/sda2 — это раздел с которого снимается образ.

imagefile — путь/название файла образа который мы делаем

logfile — путь/название файла лога, куда будет вносится служебная информация о состоянии диска.

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

# Rescue Logfile. Created by GNU ddrescue version 1.13
# Command line: ddrescue -r3 /dev/sda2 imagefile logfile
# current_pos current_status
0x30D31E00 +
# pos size status
0x00000000 0x309EB000 +
0x309EB000 0x00001000 —
0x309EC000 0x00073000 +
0x30A5F000 0x00002000 —
0x30A61000 0x00073000 +
0x30AD4000 0x00002000 —
0x30AD6000 0x00073000 +
0x30B49000 0x00002000 —
0x30B4B000 0x000FC000 +
0x30C47000 0x00001000 —
0x30C48000 0x00074000 +
0x30CBC000 0x00001000 —
0x30CBD000 0x00074000 +
0x30D31000 0x00001000 —
0x30D32000 0x7F5409E00 +

После того как вы снимите образ с вашего жесткого диска, самое время получить из него файлы. Полученный образ можно посмотреть к примеру из Sleuth Kit. Это фронтенд вызывающий Autopsy. Для использования — запустите Autopsy указав место куда сохранять файлы и относительный путь в брузере:

mkdir autopsydir
autopsy -d autopsydir
firefox http://localhost:9999/autopsy

При просмотре вы сможете убедиться что нужные вам файлы всё еще живы. Возможно вам захочется извлечь каждый файл который только возможно из образа диска. Slueth Kit это консольная программа и она умеет это делать; fls для листинга файлов, icat для получения файлов. Используя эти команды вы можете извлекать один файл за раз… но что делать если их много и вам хочется это дело автоматизировать? Тут на помощь приходят скрипты:

#!/bin/sh
IMAGE=../imagefile
fls -urp $IMAGE |
while read type inode name; do
echo $name
case $type in
d/d) mkdir -p «$name» ;;
r/r) [ ! -f «$name» ] && icat $IMAGE $(echo $inode | sed ‘s/://g’) > «$name» ;;
esac
done

Это занимает довольно продолжительное время, особенно если это образ с раздела где установлена Windows — в ней много мелких файлов. Так что скрипт сделан таким образом что его можно остановить, и при следующем запуске он продолжит с того места где остановился.  Только не останавливайте его во время извлечения важных или больших файлов. Так же, возможно, вам будет лучше изначально создать пустые файлы hiberfil.sys и pagefile.sys в директории куда вы извлекаете файлы, потому что извлекать и хранить несколько гигабайт ненужных данных — вам вряд ли нужно.

Ну вот, так вот можно вывернуться при несчастье и без резервной копии, но все же лучше бы она была. Неправдали? ;)

P.S. А вы уже сделали резервную копию? :)

Автор: Mirivlad

Скромный труженик консоли и окошек.