Как сопоставить физические сектора диска с файлами, которые их содержат, на томе HFS+ в Mac OS X

Я восстанавливал жесткий диск с помощью dd_rescue, который предоставляет мне список все сектора устройства не удалось скопировать из-за аппаратных ошибок.

Я хотел бы взять этот список и написать инструмент, который даст мне все файлы, содержащие эти плохие сектора, чтобы я мог их удалить. Я не уверен, какие API я могу использовать для этого - по сути, я хочу получить список всех файлов на диске и для каждого файла список диапазонов секторов, которые он занимает на диске.

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


person Joey Hagedorn    schedule 05.09.2009    source источник


Ответы (3)


Если вы хотите сопоставить расположение данных файла с физическим блоком (сектором), вы можете использовать fcntl(2) с помощью команды F_LOG2PHYS. Не все файловые системы поддерживают эту команду, но HFS+ поддерживает. Просто используйте lseek, чтобы выбрать смещение файла, и вы сможете получить смещение диска из F_LOG2PHYS (оно возвращается в структуре log2phys в поле l2p_devoffset). См. fcntl.h для более подробной информации.

person Don J Brady    schedule 05.03.2011

Не существует API для поиска через файловые системы HFS+, но исходный код файловой системы доступен в Apple как часть ядра XNU. Также ознакомьтесь с инструментом hfsdebug, который может помочь понять fs.

person Community    schedule 09.09.2009
comment
Спасибо за ответ, Грэм. Я обнаружил функцию hfsdebug, которая не только поможет мне понять файловую систему, но и поможет реализовать решение этой проблемы. Можно написать (osxbook.com/blog/2008/ 23/07/extending-hfsdebug Фильтр) для hfsdebug. Это в значительной степени механизм обратного вызова, который будет вызываться, когда hfsdebug выполняет итерацию по каждому узлу каталога. Я могу сравнить блоки, занимаемые экстентами файла, с рассматриваемыми блоками. - person Joey Hagedorn; 11.09.2009

Это старый вопрос, но, поскольку он по-прежнему входит в число лучших результатов поиска по теме, вот для всех, кто искал:

Начиная с Mac OS X 10.6 fsck_hfs(8) может отображать физические сектора в файлы (см. опцию -B). Замечание по использованию: сопоставление будет успешным только в том случае, если действительно была выполнена проверка каталога. Поэтому вам, возможно, придется принудительно проверить с помощью опций -l или -f.

Кстати, hfsdebug как двоичный файл PPC зависит от Rosetta и, следовательно, не будет работать на Lion или более поздних версиях.

person MacXperte    schedule 08.06.2013