web-dev-qa-db-ja.com

Linuxでhfs +ファイルシステムのリソースフォークにアクセスする方法

故障したMacハードドライブからHFS +ファイルシステムイメージを回復し、Linuxマシンにループバックマウントできます。 Linuxマシンからこのファイルシステム内のファイルのリソースフォークにアクセスするにはどうすればよいですか?

(私はこれほど大きな画像を保存できるMacを持っていません。)

5
retracile

追加 /rsrcファイル名の末尾に移動してリソースフォークにアクセスします。どこにあるのか、どこに文書化されているのかわかりません。

編集:明確にするために、私はコマンドラインの使用法について言及していました。例えば ​​cp somefile/rsrc destfileは、somefileのリソースフォークをdestfileというファイルにコピーします。すべてのコマンドライン関数はこのように機能します。グラフィカルなものでテストしたことはありません。

このメカニズムは2.xxカーネルに存在していましたが、後の時点で削除されました。 seec 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;

これは後で削除されました。文書化されたことはなく、すべてのシステムで機能したとは限りません。いずれにせよ、「Neil Mayhew」が指摘しているように、現在のカーネルメインラインソースはこれを行いません。さらに、OS X Appleは新しいリソースフォークの作成を停止したため、レガシーファイルのみがそれらを持ちます。

デフォルトのカーネルドライバではこれが不可能だと思います(fs/hfsplusカーネルソース内)。

LinuxにマウントされたHFS +ボリュームと、リソースフォークのあるファイルがあります。一般的に使用される特別なファイル名構文の両方を試しましたFILENAME/rsrcおよびFILENAME/..namedfork/rsrc。前者は以前はMacOSで動作し、後者は現在Mac OSで動作しますが、どちらもLinuxでは動作しません。エラーENOTDIR、 "ディレクトリではありません"を返します。リソースフォークがあるファイルとデータフォークがないファイル、および両方があるファイルでこれを試しました。

ドライバソースを調べたところ、特別なファイル名構文またはioctl呼び出しを使用して、リソースフォークに明示的にアクセスできる兆候は見られませんでした。ドライバーはリソースフォークに関係しますが、ファイルが移動されたときにファイルの残りの部分と一緒に保持し、ファイルが削除されたときにそれらを削除することのみを目的としています。

私はこれについて間違っていると証明されたいのですが、それとは反対の情報を見つけることができませんでした。

3
Neil Mayhew

これは今は役に立ちませんが、将来の参考のために、リソースフォークを持つ単一のファイルを2つのファイルに変換するユーティリティがApple開発者ツールSplitForksと呼ばれます。 2番目の非表示のファイルには、元のファイル名の前に._が付いています。これはAppleDouble形式であり、ファイルのタイプや作成者コードなどのFinderメタデータも含まれています。これはMac固有のデータを保存するために使用される形式と同じです。 Ziptarなどのアーカイブ形式、およびrsyncを使用した転送用。

SplitForksは、ディレクトリツリー全体で階層的に機能し、データを失うことなくMac以外のファイルシステムに転送できます。ディレクトリツリーが後で別のMacに移動された場合に、分割されたファイルを元に戻すFixupResourceForksと呼ばれるコンパニオンユーティリティもあります。

1
Neil Mayhew