Обычная фотография в формате .jpg занимает несколько тысяч секторов, если хотя бы один из них не будет прочитан — мы не сможем полностью открыть файл. От фотоснимка на пляже останется лишь кусочек неба. Клиенту он вряд ли будет нужен. Если у диска не читается одна из голов — проблемных файлов будет очень много.
Возникает задача разделения хороших файлов (прочитанных полностью) и плохих (с хотя бы одним непрочитанным сектором). Для решения таких задач мы добавили в Data Extractor возможность создания снимков файловых систем. В этой статье мы подробно расскажем как ими пользоваться.
Нативные и виртуальные файловые системы
В Data Extractor есть виртуальные файловые системы и нативные. Сейчас отделить хорошие файлы от плохих можно только для виртуальной файловой системы. Рассмотрим в чем разница между ними и как отличить одну от другой.
- Нативная (от английского «native») ФС — это файловая система, которая открывается штатным образом. Чтобы открыть каталог или построить карту файла Data Extractor будет читать и разбирать метаданные с диска-пациента, примерно так же, как это делает операционная система. Например, при работе с файловой системой FAT будут читаться каталоги FAT и таблица FAT, при работе с NTFS — таблица MFT и индексы.
Для нативной ФС можно запустить логический анализ, построить карту занятого, карту метаданных и тому подобное. - Виртуальная ФС — это почти всегда результат логического анализа, такого как «сканирование MFT» или «анализ данных раздела». Чтобы открыть каталог или построить карту файла ничего с диска-пациента читать не нужно — вся информация хранится в специальной базе данных в каталоге задачи.
Для виртуальной файловой системы нельзя построить карту занятого по Bitmap или запустить анализ данных раздела. Зато можно сгруппировать файлы по дате создания или отфильтровать их по расширению.
Если виртуальная ФС получена после логического анализа, то она может сильно отличаться от нативной ФС, анализ найдет файлы, до которых не удалось добраться штатным образом. Обычно это не вызывает проблем, чем больше файлов — тем лучше. Но если необходимо получить виртуальную ФС, максимально близкую к нативной, то можно воспользоваться методом создания «простого» (без всяких условий) снимка системы.
Первый шаг к отделению хороших файлов от плохих — это создание виртуальной ФС, теперь мы знаем что это и как ее сделать. Для любой виртуальной ФС можно создавать снимки (новые виртуальные ФС) с учетом карты голов, легенды, целостности метаданных и произвольной карты. Рассмотрим примеры из практики, когда такие снимки могут пригодиться.
Диск с «больной» головой
Возьмем для примера диск с 8ю головами (от hd0 до hd7) одна из которых не читает, например, hd2. Определимся, что есть хорошие файлы, а что плохие.
- Хороший файл — файл, у которого ни один сектор не относится к больной голове hd2. Другими словами, все сектора файла относятся только к здоровым головам (нулевой, первой и с третьей по седьмую).
- Плохой файл — файл, у которого хотя бы один сектор относится к головке hd2.
Как отобрать только хорошие файлы
- Для виртуальной ФС запускаем метод создания снимка с учетом карты голов
- Отмечаем здоровые головы
- Выбираем «файлы без проблем»
По завершению режима получим новую виртуальную ФС, в которой будут только хорошие файлы.
Как отобрать только плохие файлы
Алгоритм почти такой же:
- Для виртуальной ФС запускаем метод создания снимка с учетом карты голов
- Отмечаем здоровые головы
- На этот раз выбираем «файлы с проблемами»
Диск с BAD’ами и непрочитанными секторами
Возьмем другой пример. Попался проблемный диск, который уже частично вычитан. Есть сектора которые удалось успешно прочитать (зеленые), есть BAD-сектора (черные) и есть сектора, которые мы еще даже не пытались читать (белые и желтые). Если оставить надежду перечитать BAD’ы, то у нас будут:
- Однозначно хорошие файлы — файлы, у которых все сектора уже прочитаны.
- Однозначно плохие файлы — файлы, которые уже содержат хотя бы один BAD.
- Потенциально хорошие файлы — файлы без BAD, но с секторами, которые не читались. Именно для этих файлов есть смысл запускать дальнейшее вычитывание.
Как отобрать однозначно хорошие файлы
- Для виртуальной ФС запускаем метод создания снимка с учетом легенды
- Выбираем легенду «плохих» и непрочитанных секторов
- Выбираем файлы, исключающие легенду
Останутся файлы, в которых нет ни одного плохого или непрочитанного сектора, т.е. все сектора прочитаны.
Как отобрать однозначно плохие файлы
- Для виртуальной ФС запускаем метод создания снимка с учетом легенды
- Выбираем легенду только «плохих» секторов
- Выбираем файлы, включающие легенду
Останутся файлы, в которых есть хотя бы один плохой сектор.
Как отобрать потенциально хорошие файлы
Сразу отобрать только потенциально хорошие файлы без однозначно хороших не получится. Будем действовать в два этапа. Сначала отберем и те и другие:
- Для виртуальной ФС запускаем метод создания снимка с учетом легенды
- Выбираем легенду только «плохих» секторов
- Выбираем файлы, исключающие легенду
Получится снимок в котором нет файлов с плохими секторами. Сам снимок — это тоже виртуальная ФС, поэтому мы можем сделать снимок из снимка. Уберем однозначно хорошие, оставив только потенциально хорошие:
- Для готового снимка запускаем метод создания снимка с учетом легенды
- Выбираем легенду непрочитанных секторов
- Выбираем файл включающие легенду
Получится снимок, в котором в каждом файле есть непрочитанные сектора, но нет плохих секторов.
Диск с логическими проблемами файловой системы
Размещение файла хранится в метаданных файловой системы. Если эти метаданные повреждены, то мы не сможем узнать в каких именно секторах хранится файл и в каком порядке они должны следовать. Например, мы будем знать, где хранится начало файла, но не будем знать, где лежит его конец. Data Extractor помечает такие файлы при выполнении логического анализа.
Снова разделим файлы на плохие и хорошие:
- Хороший файл — файл, размещение которого полностью известно
- Плохой файл — файл, размещение которого известно не полностью
Как отобрать только хорошие файлы
- Для виртуальной ФС запускаем метод создания снимка с учетом целостности метаданых
- Выбираем «файлы без проблем»
Как отобрать только плохие файлы
- Для виртуальной ФС запускаем метод создания снимка с учетом целостности метаданых
- Выбираем «файлы с проблемами»
Переформатированный раздел
Ранее мы рассматривали случай, когда пользователь по ошибке создал на диске новую файловую систему. Нам удалось найти старую файловую систему и увидеть старые данные. Однако, в этом случае есть высокий шанс, что какие-то из старых файлов были переписаны, т.е. повреждены. Снова возникает задача разделения на хорошие и плохие:
- Хорошие файлы — файлы, в которых ни один сектор не был переписан при создании новой файловой системы
- Плохие файлы — файлы, в которых хотя бы один сектор был переписан
Первое, что необходимо сделать — построить карту того, что было переписано. Это может быть карта занятого новой файловой системы или карта всех ее файлов.
Если мы говорим о свежесозданной файловой системе, то, в теории, переписанные сектора должны точно совпадать с картой занятого новой файловой системы, плюс место которое занимают дисковые структуры (MBR, GPT и прочие). Но на практике бывают разные случаи. Например, для HFS+ это правило работает, а для Ext4 — нет, она резервирует большое количество секторов для хранения метаданных, но не переписывает их в момент создания.
Карта переписанных позволяет нам уточнить критерий:
- Хорошие файлы — файлы, в которых ни один сектор не попадает в карту переписанных.
- Плохие файлы — файлы, в которых хотя бы один сектор находится в карте переписанных.
Как отобрать только хорошие файлы
- Строим карту переписанных (плохих) секторов
- Строим карту непереписанных секторов (хороших), как инверсию карты переписанных
- Для виртуальной ФС запускаем метод создания снимка с учетом учетом карты, указываем карту непереписанных секторов
- Выбираем «файлы, лежащие в пределах карты»
В результате получим только те файлы, которые целиком находятся в карте не перезаписанных секторов.
Как отобрать только плохие файлы
- Строим карту переписанных (плохих) секторов
- Строим карту непереписанных секторов (хороших), как инверсию карты переписанных
- Для виртуальной ФС запускаем метод создания снимка с учетом учетом карты, указываем карту непереписанных секторов
- Выбираем «файлы, выходящие за пределы карты»
В результате получим все файлы, у которых хотя бы один сектор (а возможно и все) находится в карте перезаписанных секторов.
Другие случаи
Приведем еще пару примеров, когда может пригодиться создание снимков с учетом карты.
Разваленное зеркало
Предположим, был RAID-1 из двух участников, который по какой-то причине разсинхронизировался и какое-то время один диск работал самостоятельно. Нужно понять, есть ли различия между участниками и на какие файлы они приходятся.
Эту задачу легко решить с помощью Data Extractor RAID Edition:
- Создаем виртуальный RAID-1
- Запускаем «проверку целостности», чтобы обнаружить все невалидные (отличающиеся) сектора
- Открываем карту RAID и строим субкарту невалидных секторов
- Создаем снимок нативной ФС или выполняем логический анализ, чтобы получить виртуальную ФС
- Создаем снимок с учетом карты, чтобы выбрать файлы, выходящие за пределы карты невалидных секторов (т.е. содержащие хотя бы один невалидный сектор)
Поиск файлов, не содержащих определенную сигнатуру
Предположим, была создана копия проблемного диска в файл образ. Все непрочитанные BAD-сектора в образе прописаны шестнадцатиричной сигнатурой 0xBADBAD. Кроме образа ничего больше не осталось. Необходимо найти все файлы, прочитанные без ошибок.
Этот случай почти такой же, как случай, в котором мы строили снимок с учетом легенды. Отличие в том, что самой легенды нет. Но задача все же решаема:
- С помощью поиска GREP находим все прописанные паттерном сектора
- Строим их карту — это карта плохих секторов
- Строим инверсию этой карты, чтобы получить карту хороших секторов
- Создаем снимок нативной ФС или выполняем логический анализ, чтобы получить виртуальную ФС
- Создаем снимок с учетом карты, чтобы выбрать все файлы целиком лежащие внутри карты хороших секторов
Создание снимков с учетом карты — мощный механизм, он может быть применен для решения разных практических задач. Главная идея — сформировать карту, а с ее помощью уже можно построить снимок с файлами, полностью лежащими в ней, или файлами, содержащими хотя бы один сектор из нее.
Уметь отличать хорошие файлы от плохих — задача несложная для тех, кто понимает в этом. Важнее, сортировать хорошие файлы в системе, не закинув их туда, откуда будет проблематично вытащить