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

StackOverflow https://stackoverflow.com/questions/1384436

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top