[netatalk-ja:0377] Re: rsync -Eでもコピーされない._ファイルについて
HAT
hat @ fa2.so-net.ne.jp
2014年 9月 16日 (火) 22:52:25 JST
Tue, 16 Sep 2014 12:13:35 +0900, Taiki Kimura <taikimura8182 @ gmail.com>:
> ._ResourceForkをメールに添付してお送りしますが、「._」つきだとMacOSからは
> みえない仕様であることを理解したので、
> CentOSから当該ファイルのファイル名を変更し、MacOSから扱えるようにしたので
> そちらをお送りします。
このファイルをapple_dumpコマンドで調べるとわかりますが、
$ apple_dump ResourceFork
Dumping "ResourceFork"...
-------------------------------------------------------------------------------
MagicNumber: 00051607 : AppleDouble
Version : 00020000 : Version 2
Filler : 4D 61 63 20 4F 53 20 58 20 20 20 20 20 20 20 20 : Mac OS X
Num. of ent: 0002 : 2
このファイルのフォーマットはAppleDoubleであり、
バージョンは2であり、
Fillerは「Mac OS X 」であり、
エントリの数は2です。
Fillerと呼ばれる16バイトの領域は、AppleDouble バージョン1の時代は
Home File Systemという名称でした。名前のとおり、どのようなファイルシステムを
使っているかを格納する領域でした。
バージョン2では、名称がFillerに変更され、「 」、つまり16個の
スペースを格納することになりました。ファイルシステムの名前を入れておいても
特に役に立たないからだと思います。
ところが、Mac OS X 10.4では「Mac OS X 」、つまり「Mac OS X」の後ろに
8個のスペースを格納するようになりました。つまり自ら策定した規格を違反しています。
Netatalkが作るAppleDouble header fileも長いこと16個のスペースを格納していました。
しかし、ZIPファイルを展開したときに生成されるAppleDouble header fileがコンフリクト
する問題が発生したので、Fillerに「Netatalk 」という文字列を格納して、
どのソフトが生成したか判定できるようにしました。これも規格違反ですが、Appleが
やっている事と同様なので、堂々と違反しています。
gitのログをみてください。
https://github.com/Netatalk/Netatalk/commit/23e45f681099477f57a58740016ed666e8c4d284
この変更が行われたのは10 Oct 2012なので、Netatalk 3.0.4よりも前です。
Netatalk 3.0.4が生成したFillerは「Netatalk 」になる筈です。
添付されたAppleDouble Header fileのFillerが「Netatalk 」ではなく、
「Mac OS X 」になっていることから、このファイルを生成したのは、
Mac OS Xであると断定できます。
これは異常です。
何故AFP/netatalk経由でファイルを生成したのに、このファイルが存在するのか。
まずこれを確認しなければ、話が進みません。
もしかして、もしかすると、AFPで接続しているつもりになっていますが、実際には
SMBでsambaに接続していませんか?
あと「Num. of ent: 0002」になっていることから、エントリが2つであることが
わかります。
1つめのエントリはFinder Infoです。Finder Infoは32バイト固定です。
前半16バイトはFInfo(昔からあるFinderInfo)であり、オールゼロになっています。
後半16バイトはFXInfo(拡張FinderInfo)であり、これもオールゼロになっています。
結局Finder Infoの32バイトはオールゼロであり、何も設定されていません。
その後ろに拡張属性の情報が付いています。
「num_attrs : 0001」になっているので、拡張属性の数は1個です。
その拡張属性の名前は「com.apple.TextEncoding」であり、内容は「UTF-8;134217984」です。
2つめのエントリはResource Forkです。
「Length : 0000011E : 286」になっているので、Resource Forkのサイズは286バイト
です。
Resource Forkの内容に「This resource fork intentionally left blank」という文字列
が見えます。実際にはResource Forkが存在しないので、286バイトのダミーのResource
Forkを付けているわけです。
> ◆環境情報
> Netatalkボリューム名前:/Volumes/A
> Macmini+外付けストレージのボリューム:/Volumes/Drobo_Main/A
>
> ※netatalkは、3.0.4です。
>
>
> ◆Netatalk上で管理しているMasterデータをMacminiからみた結果
> # pwd
> /Volumes/A/_temporary/kimura/hoge
>
> # ls -ltra
> total 32
> -rwxrwxrwx 1 aid-dcc staff 4096 Sep 16 11:13 ._ResourceFork
> -rwxrwxrwx@ 1 aid-dcc staff 15 Sep 16 11:13 ResourceFork
> drwxrwxrwx 1 aid-dcc staff 330 Sep 16 11:41 ..
> drwxrwxrwx 1 aid-dcc staff 264 Sep 16 11:41 .
ここで「._ResourceFork」が見える原因は2つ考えられます。
a) 「._ResourceFork」はFillerが「Mac OS X 」になっているので、Netatalkは
それを隠蔽していない。
b) SMB/Sambaで接続しているので、「._ResourceFork」がそのまま見えている。
> ◆Netatalk上で管理しているMasterデータをCentOSからみた結果
> # pwd
> /share/A/_temporary/kimura/hoge
>
> # ls -ltra
> 合計 20
> -rwxrwxrwx 1 kimura Domain Users 4096 9月 16 11:13 2014 ._ResourceFork
> -rwxrwxrwx 1 kimura Domain Users 15 9月 16 11:13 2014 ResourceFork
> drwxrwxrwx 9 aid-dcc Domain Users 4096 9月 16 11:41 2014 ..
> drwxrwsrwx 2 kimura Domain Users 4096 9月 16 11:41 2014 .AppleDouble
> drwxrwsrwx 3 kimura Domain Users 4096 9月 16 11:41 2014 .
「._ResourceFork」が存在している理由を知りたいです。
あと、「.AppleDouble」ディレクトリが存在しているのも異常です。
このディレクトリはNetatalk 1.xまたはNetatalk 2.xが作るものであり、この中に
AppleDouble Header fileが存在します。
Netatalk 3.xはこのディレクトリを発見した場合、その中身を調査し、
Resource Forkを発見したら「._」で始まるファイルに変換します。
Resource Forkが存在しなかったら、Finder Infoを拡張属性に変換します。
変換後は.AppleDoubleディレクトリの中が空になるので、ディレクトリ自体を削除します。
つまり、Netatalk 3.xで運用している場合、.AppleDoubleディレクトリは存在しない筈
です。
にもかかわらず、存在しているのは異常です。
この現象が発生する理由として、私が把握しているケースは2つです。
a) .AppleDoubleディレクトリ内に孤立したAppleDouble header fileがある。
この場合、ディレクトリ内を空にできないので、ディレクトリが削除できません。
b) afp.confにて「convert appledouble = no」を設定している。
これは自動変換機能を停止する設定ですが、あまりお勧めしません。
> ◆Macmini+外付けストレージで管理しているバックアップデータ
> # /usr/bin/rsync -aEzuv -8 /Volumes/A/_temporary/kimura/hoge/
> /Volumes/Drobo_Main/A/_temporary/kimura/hoge/
> building file list ... done
> ./
> ResourceFork
> ._ResourceFork
>
> # pwd
> /Volumes/Drobo_Main/A/_temporary/kimura/hoge
>
> # ls -ltra
> total 64
> -rwxrwxrwx@ 1 aid-dcc staff 15 Sep 16 11:13 ResourceFork
> drwxrwxrwx 3 aid-dcc staff 102 Sep 16 11:41 .
> drwxrwxrwx 11 aid-dcc staff 374 Sep 16 11:46 ..
>
> # diff -r /Volumes/A/_temporary/kimura/hoge/
> /Volumes/Drobo_Main/A/_temporary/kimura/hoge/
> Only in /Volumes/A/_temporary/kimura/hoge/: ._ResourceFork
よくわかりませんが、異常です。
あと、Mac側のlsコマンドを使う場合、lオプションと一緒に@オプションを付けて
ください。拡張属性(FinderInfoやResource Forkも含む)の名前やサイズが確認できます。
--
HAT
netatalk-ja メーリングリストの案内