Как получить доступ к ветке ресурсов файловой системы HFS + на Linux

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

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

5 ответов

Решение

Добавлять /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 прекратила создавать новые ветки ресурсов, так что только старые файлы будут иметь их.

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

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

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

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

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

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

После некоторых поисков я нашел ссылку на параметр монтирования (?), который забыл:fork=netatalk. В какой-то момент этот код, очевидно, был выброшен из ядра Linux.

Он по-прежнему доступен в ядре 2.4.18 (Debian Woody = 3), но не доступен в ядре 2.6.8 (Debian Sarge = 3.1).

Вот один из способов сделать это:

  1. Извлеките файл из образа диска в формате MacBinary или BinHex, используяhfsutils:

    1. Использоватьhmount <path to disk image> [partition number]прикрепить к диску.
    2. Использоватьhls,hcd <folder name>, иhcopy <file name> .чтобы получить файлы.
    3. Использоватьhumountотсоединиться от образа диска.
  2. Использоватьmacunpackиз (MacBinary),hexbinотmacutils(БинХекс) илиunar(либо) отделить ветки данных и ресурсов как отдельные файлы.

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

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