Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

Версия 1 Следующий »

В данной статье рассматриваются средства восстановления данных в случаях:

  1. повреждения (отказа) оборудования (физического повреждения носителей информаци);
  2. искажения структуры хранения данных (удаление дисковых разделов, форматирование);
  3. удаления данных (удаление файлов или каталогов);

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

В любом случае следует помнить, что:
  • Никакие инструменты не могут гарантировать восстановление того, что удалено, и лучший способ восстановления данных - это восстановление их из своевременно сделанной резервной копии.
    • Политика резервного копирования и восстановления должна быть обязательной частью общей политики информатизации;
    • Резервные копии должны не просто делаться, но и регулярно проверяться на возможность восстановления данных из них;
    • Для контроля состояния накопителей данных и прогнозирования их отказов следует использовать средства мониторинга: Мониторинг параметров S.M.A.R.T;
  • Для повышения вероятности успешного восстановления данных любые операции записи на носитель, содержащий востанавливаемые данные, должны быть запрещены.
    В случаях физически повреждённых дисковых магнитных или ленточных накопителей также должны быть минимизированы все операции чтения, включения, выключения;
  • Восстановление дисковых накопитеоей следут производить: либо отмонтировав дисковые разделы, либо загрузившись с Live-USB, либо переподключить носитель в другую машину;
  • Восстановление данных, содержащихся в удалённых файлах, при включенном режиме "безопасного удаления" невозможно;
  • Не рекомендуется пытаться извлечь данные с неисправных носителей простым копированием (команды cp, dd и пр.) так как эти команды могут впасть в бесконечный цикл чтения повреждённых участков, что может привести к расширению повреждений и дальнейшей потере данных.

Данная статья применима к:

  • ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.6

GNU ddrescue: Копирование данных с повреждённых носителей

Инструмент GNU ddrescue (не путать с инструментом dd_rescue) копирует данные из одного (повреждённого) источника в другой, предпринимая максимально возможные усилия для максимально возможного извлечения данных.

Инструмент GNU ddrescue входит в дистрибутивы Astra Linux и может быть установлен командой:

sudo apt install gddrescue

Общий синтаксис вызова:

sudo ddrescue [<параметры>] <источник_данных> <приёмник_данных> [<карта>]
После вызова инструмент сначала пытается скопировать данные из указанного источника в указанный приёмник пропуская "сбойные данные". При этом чтение осуществляется в прямом и обратном направлении постепенно уменьшающимися блоками, а результаты копирования запоминаются в "карте" (журнале хода копирования). После завершения копирования легкодоступных данных информация, сохранённая в "карте", используется для  попыток копирования пропущенных "сбойных" участков.  При этом наличие "карты" позволяет в произвольные моменты времени останавливать и возобновлять операцию копирования, не выполняя чтение ранее скопированных участков. Таким образом, возможное нарастание повреждений носителя в процессе работы не повлияет на уже прочитанные данные.

  1. В начале работы всему источнику назнчается статус "не проверенный" (non-tried). Далее на всех этапах заполняется "карта" блоков с регистрацией изменения их статуса;
  2. Первый проход. Выполнается попытка чтения большими блоками. Все блоки, которые не удалось прочитать или чтение котрых было слишком долгим маркируются как "не обрезанные" (non-trimmed);
  3. Второй проход. Выполняется чтение в обратной последовательности только тех блоков, которые не удалось прочитать на предыдущем шаге. Данная операция повторятся несколько раз, с уменьшением размера блока чтения (вплоть до сектора) и переменным направлением чтения. При этом детализируется  “карта” "плохих" зон и максимально быстро считываются  "хорошие" зоны. Каждый блок читается посекторно до тех пор, пока не встретится плохой сектор. Затем этот блок читается с конца до тех пор, пока опять не встретится плохой сектор. Такой блок помечается как “обрезанный”, но не “выцарапанный” (non-scraped);
  4. “Выцарапывание” – последовательное посекторное чтение "обрезанных" блоков, при котором выполняется определённое количество попыток, после чего непрочитанные данные помечаются как окончательно “плохие” (bad-sector).
Параметр "карта" является необязательным, но именно его применение делает инструмент действительно эффективным.

В качестве источника и приёмника могут быть использованы любые блочные устройства в любых сочетаниях: накопители (например, /dev/sdb), дисковые разделы (/dev/sdb1), файлы.

В параметрах вызова команды могут быть указаны (подробнее см. man ddrescue):

  • -r N - количество повторных попыток чтения повреждённых блоков;
  • -i NNN - начало зоны чтения;
  • -d - прямое чтение без использования буферов ядра;
  • -f - разрешение переписывать данные в приёмнике (используется для записи в приёмники, являющиеся устройствами).
  • -n - быстрое чтение без фазы "выцарапывания" данных;
  • -A - пометить все сбойные области как непрочитанные. Применяется для восстановления после потери источника и его последующего подключения.

Примеры:

Пример 1. Быстро копируем доступные данные с дискового накопителя /dev/sdh в файл-образ file.tmp используя карту map.tmp:

sudo ddrescue /dev/sdh file.tmp map.tmp

GNU ddrescue 1.21
Press Ctrl-C to interrupt
     ipos:  120034 MB, non-trimmed:        0 B,  current rate:   24576 B/s
     opos:  120034 MB, non-scraped:        0 B,  average rate:  23968 kB/s
non-tried:        0 B,  bad-sector:        0 B,    error rate:       0 B/s
  rescued:  120034 MB,   bad areas:        0,        run time:  1h 23m 27s
pct rescued:  100.00%, read errors:        0,  remaining time:         n/a
                              time since last successful read:         n/a
Finished                                     
Пример 2. В приведённом выше примере использован исправный диск, ошибок нет. При возникновении ошибок чтения - повторно копируем даные с накопителя, извлекая данные из повреждённых частей. Используются карта и файл образа, созданные при первой попытке копирования, извлечённые данные добавляются в образ, выполняются 3 попытки повторного чтения повреждённых данных, и используется прямой доступ к данным (-d):
sudo ddrescue -f -d -r3 /dev/sdh file.tmp map.tmp

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

  • Перед дальнейшими манипулциями создать резервную копию образа в ещё одном файле; 
  • Исследовать образ с помощью описанного ниже инструмента testdisk - попробовать восстановить испорчененную структуру дисковых разделов и файловых систем;
  • Исследовать образ с помощью описанного ниже инструмента photorec - попробовать извлечь фото и видео из испорченной файловой структуры;
  • Примонтировать дисковые разделы и изучить их содержимое. Обратите внимание - копировался диск целиком, и полученный образ может содержать внутри себя один или несколько дисковых разделов. Для монтирования дисковых разделов, находящихся в таком образе - см. команды:
    • partx и kpartx (соответственно пакеты partx и kpartx);
    • losetup (пакет klibc-utils);
    • mount - эта команда позволяет монтировать дисковый раздел, находящийся внутри образа диска, если указать смещение этого раздела от начала образа (см. соответствующую документацию).

Копировать весь диск не обязательно, можно копировать отдельные дисковые разделы или даже только важные файлы (если они доступны, на повреждённом диске разделы и файлы могут не определяться).

Пример 3. Копирование отдельно дискового раздела /dev/sdb1 в новый дисковый раздел /dev/sdc1 (новый раздел должен быть создан заранее и иметь достаточный дла размещения данных размер). Команды отличаются от команд в предыдущем примере только названиями истоника и приёмника:

sudo ddrescue -f /dev/sdb1 /dev/sdc1 partmap.tmp
sudo ddrescue -f -r3 /dev/sdb1 /dev/sdc1 partmap.tmp
Пример 4. Перезапуск копирования после отказа и восстановления диска-источника (например, диск-источник перестал отвечать, но удалось заставить его работать после переподключения).

Можно указать смещение, с которого нужно продолжить копирование (для этого использовать информацию о выполненом копировании, полученную в предыдуще попытке копирования):

sudo ddrescue -f -r3 -i 1234567000 /dev/sdb /dev/sdc map.tmp

Можно продолжить копирование в обратном порядке:

sudo ddrescue -f -r3 -R /dev/sdb /dev/sdc map.tmp

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

sudo ddrescue -f -r3 -A /dev/sdb /dev/sdc map.tmp
Пример 5. Отказы носителей-приёмников. Если копирование прервано из-за отказа со стороны диска-приёмника (/dev/sdc), можно скопировать содержимое неисправного приёмника на третий диск (/dev/sdd) и продолжить копирование из источника:
sudo ddrescue -f -m map.tmp /dev/sdc /dev/sdd newmap.tmp
sudo ddrescue -f -n /dev/sdb /dev/sdd newmap.tmp
sudo ddrescue -f -d -r3 /dev/sdb /dev/sdd newmap.tmp

Web-сайт разработчиков GNU ddrescue: https://www.gnu.org/software/ddrescue/

Пакет testdisk: восстановление данных с повреждённых дисковых разделов

Пакет testdisk входит в дистрибутивы Astra Linux, по умолчанию не устаналивается, и может быть установлен командой:

sudo apt install testdisk
В состав пакета входят два инструмента:

  • testdisk - восстановление повреждённой структуры дисковых разделов и повреждённой файловой структуры в этих разделах;
  • photorec - поиск и извлечение видео и изображений из повреждённой файловой структуры путём прямого доступа к данным;

Инструмент testdisk

Инструмент testdisk выполяет анализ информации, хранящейся в заданном блочном устройстве, и пытается найти известные ему структуры данных (дисковые разделы, таблицы файлов, каталоги и пр.). В качестве устройства может использоваться диск (/dev/sdb), дисковый раздел (/dev/sdb1), или файл, содержащий образ диска или дискового раздела. Инструмент может:

  • Исправлять ошибки в дисковых разделах и восстанавливать удалённые разделы;
  • Восстанавливать загрузочные секторы FAT32/NTFS из резервной копии;
  • Пересобирать загрузочные секторы FAT12/FAT16/FAT32/NTFS;
  • Исправлять таблицы FAT;
  • Исправлять таблицы MFT используя зеркала MFT;
  • Обнаруживать резервные суперблоки ext2/ext3/ext4;
  • Восстанавливать удалённые файлы в FAT/exFAT/NTFS/ext2;
  • Копировать файлы из удалённых дисковых разделов FAT/exFAT/NTFS/ext2/ext3/ext4.

Инструмент использует текстовый псевдографический интерфейс.

Пример. Для примера используется образ дискового накопителя в файле file.tmp, сделанный с помощью инструмента ddrescue (см. предыдущую главу). Команда:

sudo testdisk file.tmp

Инструмент photorec

Инструмент photorec не использует файловую структуру, а анализирует непосредственно содержимое заданного устройства, пытаясь по содержимому определить известные ему типы файлов и извлечь их. При таком способе извлечения не сохраняются названия файлов, которые придётся восстанавливать анализируя восстановленные файлы. Как и testdisk, инструмент использует текстовый псевдографический интерфейс, и  может быть запущен из командной строки командой:

sudo photorec file.tmp

После запуска инструмента выводится информация о заданном носителе:

TestDisk 7.1, Data Recovery Utility, July 2019
Christophe GRENIER <grenier@cgsecurity.org>
https://www.cgsecurity.org

TestDisk is free software, and
comes with ABSOLUTELY NO WARRANTY.

Select a media (use Arrow keys, then press Enter):
>Disk file.tmp - 80 GB / 74 GiB


>[Proceed ] [ Quit ]

Note: Disk capacity must be correctly detected for a successful recovery.
If a disk listed above has an incorrect size, check HD jumper settings and BIOS
detection, and install the latest OS patches and disk drivers.

Для продолжения нажать Enter, после чего будут предложены варианты действий с носителем:

TestDisk 7.1, Data Recovery Utility, July 2019
Christophe GRENIER <grenier@cgsecurity.org>
https://www.cgsecurity.org


Disk file.tmp - 80 GB / 74 GiB

Please select the partition table type, press Enter when done.
[Intel ] Intel/PC partition
[EFI GPT] EFI GPT partition map (Mac i386, some x86_64...)
[Humax ] Humax partition table
[Mac ] Apple partition map (legacy)
>[None ] Non partitioned media
[Sun ] Sun Solaris partition
[XBox ] XBox partition
[Return ] Return to disk selection



Hint: None partition table type has been detected.


В рассматриваемом примере testdisk определил, что ему преложено работать с носителем без дисковых разделов ("Non partitioned media"). Более общим случаем является диск, 

WEB-сайт разработчиков TestDisk: http://www.cgsecurity.org

Документация от разработчиков: TestDisk Documentation

Инструмент extundelete



  • Нет меток