Отделяем хорошие файлы от плохих или работа со снимками файловых систем

Обычная фотография в формате .jpg занимает несколько тысяч секторов, если хотя бы один из них не будет прочитан — мы не сможем полностью открыть файл. От фотоснимка на пляже останется лишь кусочек неба. Клиенту он вряд ли будет нужен. Если у диска не читается одна из голов — проблемных файлов будет очень много.

Возникает задача разделения хороших файлов (прочитанных полностью) и плохих (с хотя бы одним непрочитанным сектором). Для решения таких задач мы добавили в Data Extractor возможность создания снимков файловых систем. В этой статье мы подробно расскажем как ими пользоваться.

Нативные и виртуальные файловые системы

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

  • Нативная (от английского «native») ФС — это файловая система, которая открывается штатным образом. Чтобы открыть каталог или построить карту файла Data Extractor будет читать и разбирать метаданные с диска-пациента, примерно так же, как это делает операционная система. Например, при работе с файловой системой FAT будут читаться каталоги FAT и таблица FAT, при работе с NTFS — таблица MFT и индексы.
    Для нативной ФС можно запустить логический анализ, построить карту занятого, карту метаданных и тому подобное.

    Нативная NTFS. Из контекстного меню можно запустить, например, "Сканирование MFT"

    Нативная NTFS. Из контекстного меню можно запустить, например, «Сканирование MFT»

  • Виртуальная ФС — это почти всегда результат логического анализа, такого как «сканирование MFT» или «анализ данных раздела». Чтобы открыть каталог или построить карту файла ничего с диска-пациента читать не нужно — вся информация хранится в специальной базе данных в каталоге задачи.
    Для виртуальной файловой системы нельзя построить карту занятого по Bitmap или запустить анализ данных раздела. Зато можно сгруппировать файлы по дате создания или отфильтровать их по расширению.

    Результат сканирования MFT - виртуальная ФС. Доступна фильтрация, группировка, но нет характерных для NTFS методов.

    Результат сканирования MFT — виртуальная ФС. Доступна фильтрация, группировка, но нет характерных для NTFS методов.

Если виртуальная ФС получена после логического анализа, то она может сильно отличаться от нативной ФС, анализ найдет файлы, до которых не удалось добраться штатным образом. Обычно это не вызывает проблем, чем больше файлов — тем лучше. Но если необходимо получить виртуальную ФС, максимально близкую к нативной, то можно воспользоваться методом создания «простого» (без всяких условий) снимка системы.

Создание простого снимка нативной ФС

Создание простого снимка нативной ФС

Первый шаг к отделению хороших файлов от плохих — это создание виртуальной ФС, теперь мы знаем что это и как ее сделать. Для любой виртуальной ФС можно создавать снимки (новые виртуальные ФС) с учетом карты голов, легенды, целостности метаданных и произвольной карты. Рассмотрим примеры из практики, когда такие снимки могут пригодиться.

Меню с методами создания снимков

Меню с методами создания снимков

Диск с «больной» головой

Возьмем для примера диск с 8ю головами (от hd0 до hd7) одна из которых не читает, например, hd2. Определимся, что есть хорошие файлы, а что плохие.

  • Хороший файл — файл, у которого ни один сектор не относится к больной голове hd2. Другими словами, все сектора файла относятся только к здоровым головам (нулевой, первой и с третьей по седьмую).

    Пример хорошего файла. Он размещен только на 3, 4 и 5 голове

    Пример хорошего файла. Он размещен только на 3, 4 и 5 голове

  • Плохой файл — файл, у которого хотя бы один сектор относится к головке hd2.

    Пример плохого файла. Два сектора попал на вторую (проблемную) голову.

    Пример плохого файла. Два сектора попал на вторую (проблемную) голову.

Как отобрать только хорошие файлы

  1. Для виртуальной ФС запускаем метод создания снимка с учетом карты голов
  2. Отмечаем здоровые головы

    Отмечены все здоровые головы - все кроме второй

    Отмечены все здоровые головы — все кроме второй

  3. Выбираем «файлы без проблем»

По завершению режима получим новую виртуальную ФС, в которой будут только хорошие файлы.

Новая виртуальная ФС, с файлами размещенными только на здоровых головах

Новая виртуальная ФС с файлами, размещенными только на здоровых головах

Как отобрать только плохие файлы

Алгоритм почти такой же:

  1. Для виртуальной ФС запускаем метод создания снимка с учетом карты голов
  2. Отмечаем здоровые головы
  3. На этот раз выбираем «файлы с проблемами»

Диск с BAD’ами и непрочитанными секторами

Возьмем другой пример. Попался проблемный диск, который уже частично вычитан. Есть сектора которые удалось успешно прочитать (зеленые), есть BAD-сектора (черные) и есть сектора, которые мы еще даже не пытались читать (белые и желтые). Если оставить надежду перечитать BAD’ы, то у нас будут:

  • Однозначно хорошие файлы — файлы, у которых все сектора уже прочитаны.

    Пример однозначно хорошего файла. Все сектора прочитаны (зеленые).

    Пример однозначно хорошего файла. Все сектора прочитаны (зеленые).

  • Однозначно плохие файлы — файлы, которые уже содержат хотя бы один BAD.

    Пример однозначно плохого файла. Файл содержит один BAD сектор (черный).

    Пример однозначно плохого файла. Файл содержит один BAD сектор (черный).

  • Потенциально хорошие файлы — файлы без BAD, но с секторами, которые не читались. Именно для этих файлов есть смысл запускать дальнейшее вычитывание.

    Пример потенциально хорошего файла. В нем есть непрочитанные сектора, но нет ни одного BAD'а

    Пример потенциально хорошего файла. В нем есть непрочитанные сектора, но нет ни одного BAD’а

Как отобрать однозначно хорошие файлы

  1. Для виртуальной ФС запускаем метод создания снимка с учетом легенды
  2. Выбираем легенду «плохих» и непрочитанных секторов

    Плохие и непрочитанные сектора

    Плохие и непрочитанные сектора

  3. Выбираем файлы, исключающие легенду

Останутся файлы, в которых нет ни одного плохого или непрочитанного сектора, т.е. все сектора прочитаны.

Как отобрать однозначно плохие файлы

  1. Для виртуальной ФС запускаем метод создания снимка с учетом легенды
  2. Выбираем легенду только «плохих» секторов

    Только плохие сектора

    Только плохие сектора

  3. Выбираем файлы, включающие легенду

Останутся файлы, в которых есть хотя бы один плохой сектор.

Как отобрать потенциально хорошие файлы

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

  1. Для виртуальной ФС запускаем метод создания снимка с учетом легенды
  2. Выбираем легенду только «плохих» секторов

    Только плохие сектора

    Только плохие сектора

  3. Выбираем файлы, исключающие легенду

Получится снимок в котором нет файлов с плохими секторами. Сам снимок — это тоже виртуальная ФС, поэтому мы можем сделать снимок из снимка. Уберем однозначно хорошие, оставив только потенциально хорошие:

  1. Для готового снимка запускаем метод создания снимка с учетом легенды
  2. Выбираем легенду непрочитанных секторов

    Непрочитанные и пропущенные сектора

    Непрочитанные и пропущенные сектора

  3. Выбираем файл включающие легенду

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

Диск с логическими проблемами файловой системы

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

Снова разделим файлы на плохие и хорошие:

  • Хороший файл — файл, размещение которого полностью известно

    Пример хорошего файла. Все метаданные, необходимы для построения размещения, целы

    Пример хорошего файла. Все метаданные, необходимы для построения размещения, целы

  • Плохой файл — файл, размещение которого известно не полностью

    Пример плохого файла. Часть метаданных повреждена, поэтому не удалось построить полное размещение

    Пример плохого файла. Часть метаданных повреждена, поэтому не удалось построить полное размещение

Как отобрать только хорошие файлы

  1. Для виртуальной ФС запускаем метод создания снимка с учетом целостности метаданых
  2. Выбираем «файлы без проблем»

Как отобрать только плохие файлы

  1. Для виртуальной ФС запускаем метод создания снимка с учетом целостности метаданых
  2. Выбираем «файлы с проблемами»

Переформатированный раздел

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

  • Хорошие файлы — файлы, в которых ни один сектор не был переписан при создании новой файловой системы

    Пример хорошего файла, ни один сектор не переписан (мы использовали зеленый цвет для обозначения "старых" секторов)

    Пример хорошего файла, ни один сектор не переписан (мы использовали зеленый цвет для обозначения «старых» секторов)

  • Плохие файлы — файлы, в которых хотя бы один сектор был переписан

    Пример плохого файла, в нем есть переписанные сектора (мы использовали красный цвет для переписанных, зеленый - для не переписанных секторов)

    Пример плохого файла, в нем есть переписанные сектора (мы использовали красный цвет для переписанных, зеленый — для не переписанных секторов)

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

Если мы говорим о свежесозданной файловой системе, то, в теории, переписанные сектора должны точно совпадать с картой занятого новой файловой системы, плюс место которое занимают дисковые структуры (MBR, GPT и прочие). Но на практике бывают разные случаи. Например, для HFS+ это правило работает, а для Ext4 — нет, она резервирует большое количество секторов для хранения метаданных, но не переписывает их в момент создания. 

Карта переписанных позволяет нам уточнить критерий:

  • Хорошие файлы — файлы, в которых ни один сектор не попадает в карту переписанных.
  • Плохие файлы — файлы, в которых хотя бы один сектор находится в карте переписанных.

Как отобрать только хорошие файлы

  1. Сторим карту переписанных (плохих) секторов
  2. Строим карту непереписанных секторов (хороших), как инверсию карты переписанных
  3. Для виртуальной ФС запускаем метод создания снимка с учетом учетом карты, указываем карту непереписанных секторов
  4. Выбираем «файлы, лежащие в пределах карты»

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

Как отобрать только плохие файлы

  1. Сторим карту переписанных (плохих) секторов
  2. Для виртуальной ФС запускаем метод создания снимка с учетом учетом карты, указываем карту переписанных секторов
  3. Выбираем «файлы, выходящие за пределы карты»

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

Другие случаи

Приведем еще пару примеров, когда может пригодиться создание снимков с учетом карты.

Разваленное зеркало

Предположим, был RAID-1 из двух участников, который по какой-то причине разсинхронизировался и какое-то время один диск работал самостоятельно. Нужно понять, есть ли различия между участниками и на какие файлы они приходятся.

Эту задачу легко решить с помощью Data Extractor RAID Edition:

  1. Создаем виртуальный RAID-1
  2. Запускаем «проверку целостности», чтобы обнаружить все невалидные (отличающиеся) сектора
  3. Открываем карту RAID и строим субкарту невалидных секторов
  4. Создаем снимок нативной ФС или выполняем логический анализ, чтобы получить виртуальную ФС
  5. Создаем снимок с учетом карты, чтобы выбрать файлы, выходящие за пределы карты невалидных секторов (т.е. содержащие хотя бы один невалидный сектор)

Поиск файлов, не содержащих определенную сигнатуру

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

Этот случай почти такой же, как случай, в котором мы строили снимок с учетом легенды. Отличие в том, что самой легенды нет. Но задача все же решаема:

  1. С помощью поиска GREP находим все прописанные паттерном сектора
  2. Строим их карту — это карта плохих секторов
  3. Строим инверсию этой карты, чтобы получить карту хороших секторов
  4. Создаем снимок нативной ФС или выполняем логический анализ, чтобы получить виртуальную ФС
  5. Создаем снимок с учетом карты, чтобы выбрать все файлы целиком лежащие внутри карты хороших секторов

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (7 голосов, средний: 5,00)
Loading...Loading...

Об авторе Александр Леоненко

Разработчик Data Extractor и Data Extractor RAID Edition
Запись опубликована в рубрике Data Extractor с метками , , , , , . Добавьте в закладки постоянную ссылку.

Один комментарий на «Отделяем хорошие файлы от плохих или работа со снимками файловых систем»

  1. Зенков Андрей говорит:

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>