Чтение Суперблока

Я знаю, что в Unix (в частности, Mac OS X) суперблок хранит информацию о расположении данных на диске, включая адреса дисков, с которых начинаются и заканчиваются inode. Я хочу отсканировать список inode в моей программе, чтобы найти удаленные файлы. Как я могу найти адрес диска, с которого начинаются иноды? Я посмотрел на команду statfs, но она не предоставляет эту информацию.

2 ответа

Решение

Поскольку вы упоминаете Mac OS X, давайте предположим, что вы хотите сделать это только для HFS+. Страница Wikipedia предоставляет некоторую информацию о возможных способах запуска, например, она говорит об этом на макете на диске:

Секторы 0 и 1 тома являются загрузочными блоками HFS. Они идентичны загрузочным блокам в томе HFS. Они являются частью оболочки HFS.

Сектор 2 содержит заголовок тома, эквивалентный главному блоку каталогов в томе HFS. Заголовок тома хранит самые разнообразные данные о самом томе, например размер блоков выделения, отметку времени, которая указывает, когда том был создан, или расположение других структур тома, таких как файл каталога или файл переполнения экстента. Заголовок тома всегда находится в одном и том же месте.

Файл распределения, который отслеживает, какие блоки выделения свободны, а какие используются. Это похоже на битовую карту тома в HFS, каждый блок выделения представлен одним битом. Ноль означает, что блок свободен, а один означает, что блок используется. Основное отличие от битовой карты тома HFS состоит в том, что файл размещения хранится как обычный файл, он не занимает специальное зарезервированное пространство в начале тома. Файл размещения также может изменять размер и не должен храниться непрерывно в томе.

После этого становится все сложнее. Читайте, например, о деревьях B *.

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

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

Если вы удаляете файл в файловой системе FAT (или UDF), его запись в каталоге просто помечается как "удаленная", при этом большая часть записи dir остается неизменной.

На томах HFS из-за использования B-деревьев удаленные изменения должны быть удалены из каталога, иначе поиск элементов не будет работать более эффективно (ну, этот аргумент может быть немного слабым, но факт заключается в том, что удаленные записи удалить и перезаписать).

Таким образом, если удаление не произошло путем случайной записи в сектор каталогов или повторной инициализации тома, вы не найдете много.

Другие вопросы по тегам