Восстановление данных на дисках с NTFS

Материал из База знаний Linux.ру

Перейти к: навигация, поиск

Содержание

Предыстория

У моего друга есть дочь Мэри, учащаяся в колледже. Её ноутбук с установленной Windows XP постоянно перезагружался, и мы заподозрили проблемы с её жёстким диском. В итоге, с LiveCD была запущена операционная система (использовалась Ubuntu 9.10 Karmic Koala Desktop) в результате чего получилось прочесть имеющиеся данные. Тем не мнее, во время загрузки LiveCD зафиксировал ошибки на диске и безуспешно попытался их исправить...

Резервное копирование

Сохранность данных да жёстком диске - первоочередная задача. Поскольку мы не знаем, что не так с диском, нам необходимо сделать резервную копию данных перед там как что-то отремонтировать. С помощью командной строки была создана директория /media/server, куда можно было сохранить необходимое содержимое с ноутбука используя окружение доступное с LiveCD.

Мой сервер был настроен с поддержкой NFS, но на LiveCD нет клиента для NFS. К счастью LiveCD Ubuntu может скачивать и устанавливать нужные программы из репозитория.

LiveCD$ sudo apt-get install portmap nfs-common

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

LiveCD$ sudo mount server:/storage/share /media/server

Теперь, когда общий каталог на сервере выглядит как смонтированный локальный /media/server, у нас появилась возможность создать образ:

LiveCD$ sudo fdisk -l

Disk /dev/sda: 250.0 GB, 250000000000 bytes
255 heads, 63 sectors/track, 30394 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000001
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       16708   134206978+   7  HPFS/NTFS

Команда fdisk -l показывает там, что у нас наличествет диск /dev/sda с единственной файловой системой NTFS. Так что мы будем использовать dd для создания образа диска.

Предупреждение: dd читает и пишет напрямую на устройство. Поэтому будьте внимательны с этой командой. Так как она может уничтожить ваши данные. Используйте её с большой осторожностью. И вообще, семь раз отмерьте и один раз отрежьте.

LiveCD$ dd if=/dev/sda of=/media/server/laptop_disk.img

Обычно, dd требуется какое-то время, чтобы сделать образ диска, но в нашем случае, он находил ошибку и немедленно останавливался. Впрочем, имеется программа ddrescue, существующая в двух вариантах. Мы использовали GNU-версию ddrescue. Эта программа работает аналогично dd, за тем исключением, что она предназначена для работы со сбойными дисками и умеет компенсировать ошибки чтения. Программа ddrescue тоже не идёт в комплекте с LiveCD, поэтому требуется её скачать из Сети, а затем установить её в смонтированном каталоге:

LiveCD$ sudo dpkg -i gddrescue_1.11-1_i386.deb
LiveCD$ sudo ddrescue -v /dev/sda mary_inspiron_6000.img mary_inspiron_6000.log

Программа ddrescue благополучно считала диск и записала его в образ. Следующей нашей задачей будет создание копии образа, в связи с тем, что мы попытаемся исправить те проблемы какие возможно, а в случае неудачи откатиться к началу с минимальными усилиями. Всю дальнейшую работу мы будем проделывать над копией образа (mary_inspiron_6000.img), и сохраним первоначальную (mary_inspiron_6000.img.orig) в качестве архива и образца:

LiveCD$ cp -p mary_inspiron_6000.img mary_inspiron_6000.img.orig

Теперь настало время поразвлечься и посмотреть, что же мы можем спасти:

Восстановление

Восстановление, в целом, прошло без сюрпризов, кроме одной детали о которой будет рассказано позднее.

Я смонтировал рабочий образ (mary_inspiron_6000.img) в качестве диска D: в виртуальной машине с установленной там Windows XP, и приготовился к восстановлению используя самые различные утилиты.

Программа diskpart показывает нам информацию о дисках и разделах в WindowsXP:

C:\Documents and Settings\sfrizzell>diskpart
DISKPART> list disk
Disk ###  Status      Size     Free     Dyn  Gpt
  --------  ----------  -------  -------  ---  ---
  Disk 0    Online        12 GB      0 B
  Disk 1    Online        56 GB      0 B
DISKPART> select disk 1
DISKPART> detail disk
QEMU HARDDISK
Disk ID: 41AB2316
Type   : IDE
Bus    : 0
Target : 1
LUN ID : 0
  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 2     D                NTFS   Partition     56 GB  Healthy

Самая первая программа, которая была использована для восстановления - chkdsk.exe. Программа chkdsk - это утилита с интерфейсjм командной строки, для проверки логической целостности файловой системы на томах Windows XP Professional.

C:\Documents and Settings\sfrizzell>chkdsk /r d:

The type of the file system is NTFS.
CHKDSK is verifying files (stage 1 of 5)...
File verification completed.
CHKDSK is verifying indexes (stage 2 of 5)...
Correcting error in index $I30 for file 56146.
Correcting error in index $I30 for file 56146.
Sorting index $I30 in file 56146.
Index verification completed.
CHKDSK is recovering lost files.
Recovering orphaned file 6A82D2~1 (56129) into directory file 56146.
Recovering orphaned file 6A82D25B245A4B1D94281AC1E2272B77 (56129) into directory
 file 56146.
Recovering orphaned file 3BEA32~1.DB3 (56145) into directory file 56146.
Recovering orphaned file 3bea32c5-d9da-4696-a242-338575562c22-inq.db3 (56145) in
to directory file 56146.
Recovering orphaned file 3BEA32~1.XML (56147) into directory file 56146.
Recovering orphaned file 3BEA32C5-D9DA-4696-A242-338575562C22.xml (56147) into d
irectory file 56146.
Recovering orphaned file 3BEA32~2.DB3 (56149) into directory file 56146.
Recovering orphaned file 3bea32c5-d9da-4696-a242-338575562c22-preinq.db3 (56149)
 into directory file 56146.
Recovering orphaned file 3BEA32~3.DB3 (56150) into directory file 56146.
Recovering orphaned file 3bea32c5-d9da-4696-a242-338575562c22-errors.db3 (56150)
 into directory file 56146.
Recovering orphaned file manifest.db3 (56151) into directory file 56146.
CHKDSK is verifying security descriptors (stage 3 of 5)...
Security descriptor verification completed.
CHKDSK is verifying Usn Journal...
Usn Journal verification completed.
CHKDSK is verifying file data (stage 4 of 5)...
File data verification completed.
CHKDSK is verifying free space (stage 5 of 5)...
Free space verification is complete.
CHKDSK discovered free space marked as allocated in the
master file table (MFT) bitmap.
Correcting errors in the Volume Bitmap.
Windows has made corrections to the file system.
  58597055 KB total disk space.
  32117188 KB in 48418 files.
     18992 KB in 6501 indexes.
       264 KB in bad sectors.
    131935 KB in use by the system.
     65536 KB occupied by the log file.
  26328676 KB available on disk.
      4096 bytes in each allocation unit.
  14649263 total allocation units on disk.
   6582169 allocation units available on disk.

С помощью chkdsk раздел бы отремонтирован, теперь проведём обратную процедуру восстановлению и воспользуемся dd в каталоге с NFS, чтобы вернуть отремонтированный образ уже на новый жёсткий диск. Сейчас мы проверим отремонтированный раздел и попробуем с него загрузиться. Получилось! Диск загрузился и мы лицезреем отремонтированную систему.

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

Хотя Windows и имеет программу для расширения разделов, и diskpart увеличивает размер существущего раздела за счёт свободного места, но она не расширяет системные разделы. Без проблем. Мы воспользовались кабалем-переходником с USB на жёсткий диск, чтобы подчлючить диск к имеющейся системе. Поскольку подключенный раздел не являлся системным, то увеличить его размер стало довольно просто и быстро:

DISKPART> list volume

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 2     E                NTFS   Partition     56 GB  Healthy

DISKPART> select volume 2

DISKPART> extend

DISKPART> list volume

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
* Volume 2     E                NTFS   Partition    149 GB  Healthy

После чего диск вернулся в ноутбук и всё заработало без проблем.

Заключение

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

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

ЧаВО

Вопрос: Почему ты не использовал system Rescue CD?

Ответ: Если честно, я не пользуюсь инструментами с которыми не знаком. Я также был очень обеспеокоен тем, что Ubuntu Workstation CD попытался восстановить диск до того, как я успел о чём-либо подумать. Я скачал System Rescue CD и оценю его для будущего использования. Благодарю за рекомендацию.

В случае необходимости я также мог попробовать GetDataBack NTFS, но это платное приложение, а я предпочитаю бесплатное. Как пиццу.

Вопрос: Почему ты не упомянул testdisk?

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

Вопрос: Какую систему виртуализации ты используешь (VirtualBox...)?

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

Вопрос: Вместо использования diskpart для увеличения размера раздела, я бы предложил воспользоваться программой parted/gparted или ntfsresize (частью пакета ntfsprogs).

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

У gparted не получилось изменить размер диска и он вернул мне неизвестную ошибку. Я также предполагал, что сняв образ с диска и поместив его на заведомо рабочий жёсткий диск, некоторые флаги на NTFS-разделе не были сняты программой chkdsk и я получил сообщение о несуществующей ошибке в Linux.

Также не помню, чтобы я пользовался ntfsresize, так что добавлю её в свой инструментарий на будущее.

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

Ссылки

Настройка NFS-сервера и клиента на Debian Lenny

Ddrescue - программа для восстановления данных

Виртуализация с помощью KVM на Ubuntu 9.10

Решение проблем с дисками и файловыми системами в Windows

USB 2.0 to SATA/IDE Hard Drive HDD CD-Rom 3.5/2.5 Converter Adapter Cable


Автор оригинального текста: Скип Фриззелл

Перевод: r0g3r