Восстановление данных на дисках с 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
