Уроки на будущее для владельцев компьютеров:
- Делайте резервные копии системы
- Делайте резервные копии системы регулярно
Бывает так, что установленная в дуалбут режиме система подводит. К примеру, вы использовали 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. А вы уже сделали резервную копию? :)