понедельник, 27 октября 2008 г.

Восстановление данных с Windows-систем с использованием Linux

Юникс и другие » Blog Archive » Восстановление данных с Windows-систем с использованием Linux

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

Другой вариант использования Linux - это создание образа отказавшего HDD для последующего его анализа. Конечно же, эти образы не идеальны (для подобных работ используется специально оборудование), но могут помочь разобраться с причинами выхода из строя.
Предполагается, что все восстанавливаемые данные можно скопировать на машину с Linux либо имеется USB-диск достаточного объема. В любом случае для попытки успешного восстановления данных необходимо иметь объем свободного места, равный объему диска для восстановления и плюсом, по меньшей мере, 2 гигабайта. Чем больше у вас свободного места, тем легче будет работать с данными. В обратном случае вероятность успешного заверешения процесса снижается.
Если ситуация становится совсем критичной, то рекомендую вам попробовать сторонние утилиты, такие как Coroner's Toolkit, но им необходимо гораздо больше свободного места для успешной работы. Как правило, необходимый объем места для подобных программ равняется удвоенному размеру диска, который необходимо восстановить.

Я предполагаю, что читатель свободно себя чувствует в командной строке Linux и может выполнять базовые операции по работе с файловой системой (т.е знаком с такими командами как, например, cp, mv, rm, ls и т.п.) В данном случае командная строка является более предпочтительным интерфейсом, нежели GUI. Когда на карту поставлены данные, лучше пользоваться узкоспециализированными утилитами для выполнения всех действий и иметь полный контроль над процессом.

Команды, используемые в этом документе, являются общеупотребительными в среде Unix и могут легко использоваться на многих платформах. Но некоторые сложные скрипты могут потребовать повторного прочтения man-страниц.

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

И напоследок: если образы дисков снимаются для юридических целей, то фиксируйте процесс при помощи авторитетного представителя законодательных органов, который сможет подтвердить легальность ваших действий при судебном расследовании. Но эта тема выходит за рамки статьи.

Создание образа
Первым шагом при восстановлении данных обычно является создание образа восстанавливаемых разделов и сохранение их на другом носителе. Например, на другом винчестере, USB-диске или сетевой папке.

Созданием образа мы преследуем две цели: первое - мы получаем право на ошибку и возможность вернуться к старту процесса в случае неверных действий. И второе - мы перестаем проводить операции ввода/вывода с поврежденным устройством, что необходимо для обеспечения его дальнейшего функционирования.

Самое простое - это создать собственный образ для каждого восстанавливаемого раздела.

Жесткие диски в Linux обычно находятся в каталоге /dev/ и имеют некоторые правила именования, которые нужно запомнить. IDE диски начинаются с букв "hd". Третья буква означает "статус" диска. a (hda) - это primary master, b (hdb) - primary slave, c (hdc) - secondary master и d (hdd) - secondary slave. Все остальные устройства хранения данных (к ним относятся USB, SATA и SCSI-диски) подключаются через SCSI-интерфейс и начинаются с букв "sd" В ядре версии 2.4 была возможность подсоединить IDE-привод через SCSI-интерфейс, но нам это не понадобится.

После подготовки всех "кандидатов" на восстановление, их неплохо бы проверить при помощи команды sfdisk -l Это лучше, чем fdisk, так как посылаемые команды более просты и выполняются в неинтерактивном режиме. Команда требует привилегий суперпользователя.

bash# /sbin/sfdisk -l /dev/hda

Вывод команды содержит информацию о винчестере (количество головок, секторов и цилиндров) и список доступных разделов с краткой информацией о них.
Разделы должны начинаться и заканчиваться на границе цилиндров. К сожалению, старые версии Windows имеют проблемы с дисками, у которых несколько головок и большое количество цилиндров, в результате чего некоторые версии BIOS передавали неверную информацию о реальном положении дел. Поскольку Linux считывает информацию о диске напрямую с винчестера, а windows использует информацию, предоставленную BIOS, то эти данные могут иметь отличаться для различных ОС.

Вот вывод этой команды для винчестера с установленным Linux:

Disk /dev/hda: 9729 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes,
counting from 0

Device Boot Start End #cyls #blocks Id System
/dev/hda1 * 0+ 12 13- 104391 83 Linux
/dev/hda2 13 9728 9716 78043770 8e Linux LVM
/dev/hda3 0 - 0 0 0 Empty
/dev/hda4 0 - 0 0 0 Empty

А вот для винчестера, на котором Linux и Windows находятся в режиме DualBoot:

Disk /dev/sda: 19457 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes,
counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 0+ 891 892- 7164958+ 27 Unknown
/dev/sda2 * 892 10196 9305 74742412+ 6 FAT16
/dev/sda3 10197 10209 13 104422+ 83 Linux
/dev/sda4 10210 19456 9247 74276527+ 5 Extended
/dev/sda5 10210+ 19456 9247- 74276496 8e Linux LVM

Раздел с меткой FAT16 в приведенном примере на самом деле отформатирован в NTFS. Не стоит слишком доверять меткам на разделах. Очень часто windows-разделы имеют метки FAT16, W95 FAT32, NTFS или похожие на них.

Основная команда для создания образа - это:

bash# dd if=[device] of=[imagename] conv=noerror

dd производит чтение из входного файла (if - input file), пропускает данные через указанные фильтры и записывает в конечный файл (of - output file). Если опция of не указана, то вывод производится в стандартный поток. Опция conv=noerror говорит о том, что dd следует продолжить считывание несмотря на ошибки чтения, которые, в большинстве случаев, присутствуют на поврежденных дисках.

Многие руководства по восстановлению данных предупреждают: не делайте образ на восстанавливаемом разделе!!! Мне кажется очевидным хранить образ на другом разделе (а лучше носителе), но подобные ситуации возникают сплошь и рядом, пожтому я счел нужным упомянуть о них.

простейшая команда для переноса образа на примонтированный раздел выглядит так:

bash# dd conv=noerror if=/dev/sda1 of=/root/recovery.img

Эта команда скопирует содержимое раздела /dev/sda1 в файл /root/recovery.img Этот файл может быть примонтирован как стандартное устройство loopback.

Так как dd может писать в стандартный поток, мы можем использовать пайп для передачи информации на удаленную систему, посредством ssh. Это делается так:

bash# dd conv=noerror if=/dev/sda1 | ssh user@host 'cat >
recover.img'

Для уменьшения объема передаваемой информации можно воспользоваться архиватором:

bash# dd conv=noerror if=/dev/sda1 | gzip | ssh user@host
'gunzip > recover.img'

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

Монтирование образа
После создания образа необходимо сделать две папки (для точки монтирования и для восстановления):

bash# mkdir recover_src recover_dst

После чего можно примонтировать туда образ (как стандартное устройство loopback) при помощи следующей команды:

bash# mount -t [type] -o loop /path/to/image recover_src

К примеру, если ваш образ recovery.img снят с NTFS-раздела, то замените [type] на ntfs. Все FAT-разделы монтируются как vfat.

Не все дистрибутивы Linux имеют встроенную поддержку NTFS. Например, у Knoppix она есть, у Fedora нет. Вы можете найти драйвера для поддержки NTFS на сайте сторонних производителей или пересобрать ваше ядро с поддержкой этой файловой системы. (довольно нетривиальная задача для новичка в linux - прим. переводчика) Если вы не можете найти драйвера, используйте Knoppix.

В linux обеспечена поддержка лишь чтения с NTFS-разделов. Запись на них из linux считается небезопасной и может привести к повреждению или полной потере данных. Тем не менее имеются решения для записи на NTFS из linux. Однако их обзор вызодит за рамки этой статьи.

Восстановление данных в безопасное место
Как только образ примонтирован, вы можете использовать cp или подобную команду для копирования ваших данных в безопасное место. Также вы можете записать их на CDROM или перенести на USB-диск.

Или вы можете перенести данные на flash-диск, примонтировать его и продолжать процесс восстановления уже используя его в качестве носителя.

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

Несколько слов о mkisofs и cdrecord
Часто необходимо записать восстановленную информацию на CDROM. Из командной строки это делают с помощью двух утилит: mkisofs и cdrecord На компакт-дисках используется файловая система, определенная стандартом ISO 9660. Это ФС со многими возможностями, но и с довольно большими ограничениями (например на длину имени файла, имена файлов нечувствительны к регистру, не сохраняет права доступа к файлам) Для того, чтобы немного снизить имеющиеся ограничения были разработаны два расширения для нее: это Joilet, используемое в Windows и RockRidge, используемое в UNIX.

Мы рекомендуем использовать оба расширения для улучшения переносимости.

Следующая команда создает iso-образ recovery.iso из содержимого директории recovery_dst:

bash# mkisofs -JR -o recovery.iso recovery_dst

Однако полученный образ еще и необходимо записать на диск. Это делается при помощи cdrecord:

bash# cdrecord dev=/dev/cdrom –data recovery.iso

Для более подробной информации о процессе копирования можно использовать ключ -v

После проверки записанного диска смонтируйте его и проверьте его читаемость. Я заметил, что некоторые CD-R плохо читаются после записи на высоких скоростях. Поэтому можно искусственно ограничить скорость записи диска:

bash# cdrecord dev=/dev/cdrom speed=4 -v –data recovery.iso

Последние средства
Иногда файловые системы могут быть слишком повреждены или, например, отформатированы. В этом случае штатными средствами решить проблему не удастся. Но есть некоторые приложения, которые способны помочь в решении этой проблемы. Правда понадобится немного больше терпения, времени и дискового пространства.

Coroner's Toolkit (TCT) - так называется набор приложений для работы с теми файловыми системами, которые настолько повреждены (например после "горячего" выключения), что не видятся штатными средствами ОС. Этот набор можно найти на http://www.porcupine.org/forensics/tct.html

В Coroner's Toolkit входит несколько утилит для "экстремального" восстановления данных. Одна из них, lazarus, мощный кроссплатформенный инструмент. Она читает структуры данных напрямую с поверхности диска и пытается восстановить файловую систему по полученным результатам. Иногда она находит фрагменты, которые будут использованы намного позже, а в некоторых случаях, если не было перезаписи, находятся фрагменты удаленных файлов, которые в большинстве случаев могут быть восстановлены.

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

Когда диск имеет значительные повреждения внутренний структуры или серьезные физические повреждения (например, упал на пол), то лучше оценить стоимость данных, находящихся на нем и обратиться в организации, профессионально занимающуюся восстановлением данных. Такие организации помимо программного обеспечения имеют еще и мощные аппаратные средства и, в большинстве случаев, ваши данные будут успешно восстановлены.
К сожалению, услуги подобных специалистов довольно дорогие.

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

Оригинальный текст

Комментариев нет: