4

У меня есть образ файловой системы HFS+, восстановленный с неисправного жесткого диска Mac, и я могу смонтировать его на моем компьютере с Linux. Как я могу получить доступ к ветвям ресурсов для файлов в этой файловой системе с компьютера с Linux?

(У меня нет Mac с возможностью хранить такое большое изображение.)

3 ответа3

3

Я не думаю, что это возможно с драйвером ядра по умолчанию (fs/hfsplus в исходниках ядра).

У меня есть том HFS+, смонтированный в Linux, и файлы, в которых есть ветвь ресурса. Я попробовал оба широко используемых специальных синтаксиса имен файлов FILENAME/rsrc и FILENAME/..namedfork/rsrc . Первый работал на Mac OS, а второй теперь работает на Mac OS, но ни один не работает на Linux. Они возвращают ошибку ENOTDIR , "Не каталог". Я попытался сделать это с файлами, которые имеют ветвь ресурсов и не имеют данных, и файлами, которые имеют и то, и другое.

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

Мне бы очень хотелось, чтобы меня это доказало, но я не смог найти никакой информации об обратном.

1

Добавьте /rsrc в конец имени файла, чтобы получить доступ к ветке ресурса. Я понятия не имею, где это задокументировано, если где-нибудь.

Изменить: просто чтобы уточнить, я имел в виду использование командной строки; например, cp somefile/rsrc destfile скопирует ветвь ресурса somefile в файл с именем destfile. Все функции командной строки работают таким образом. Я не проверял это ни с чем графическим.

Этот механизм существовал в ядрах 2.xx, но был удален позже. см. https://evilpiepirate.org/git/linux-bcache.git/plain/fs/hfsplus/inode.c

* hfsplus_file_lookup содержит следующее:

if (HFSPLUS_IS_RSRC(dir) || strcmp(dentry->d_name.name, "rsrc"))
        goto out;

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

1

Это не поможет вам сейчас, но для дальнейшего использования в инструментах разработчика Apple есть утилита SplitForks которая превращает один файл с ветвью ресурса в два файла. Второй, скрытый, файл имеет ._ предшествующий исходному имени файла. Он находится в формате AppleDouble и также содержит метаданные Finder, такие как тип файла и коды создателя. Это тот же формат, который используется для хранения специфичных для Mac данных в архивных форматах, таких как zip и tar , и для передачи с использованием rsync .

SplitForks может работать иерархически на целых деревьях каталогов, которые затем могут быть перенесены в файловую систему не Mac без потери данных. Есть также сопутствующая утилита под названием FixupResourceForks которая снова объединяет разделенные файлы, если дерево каталогов позднее перемещается на другой Mac.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .