[netatalk-ja:0239] Re: Mac OS X serverからのrsyncでのデータコピーで不具合
HAT
hat @ fa2.so-net.ne.jp
2013年 7月 25日 (木) 22:54:44 JST
HATです。
Thu, 25 Jul 2013 16:09:10 +0900, Taiki Kimura <taikimura8182 @ gmail.com>:
> 昨日より、4TBをCCCにてコピーしていましたが、なんと「デバイスに異常がみつ
> かりました」
> というエラーメッセージがGUIで表示され、コピーに失敗してしまいました。。。
これは、
2.2.0の50個のバグに遭遇したか、
未知のバグに遭遇したか、
の、どちらかでしょう。
前者の場合は対応しません。
後者の場合はこのMLにて検証し、パッチが完成した時点で本家に投げます。
パッチができなかったら、本家に丸投げします。
> CCCでのコピーに失敗したこともあったので、
> さきほど、netatalk-2.2.0-2.el6.x86_64をアンインストールし、
> netatalk-3.0.4にて再構築しました。
3.0.4にて同様の現象が発生したら、たぶん未知のバグでしょうねえ。
そうなったら泥沼モードに突入します。
> 私の環境の10.5.8のMacからlinuxサーバへ-Eオプション付きでrsyncできないですね。
> rsync: on remote machine: --extended-attributes: unknown option
>
> こういうエラーメッセージがでてrsync失敗します。
これは、AFPを経由せず、rsyncの独自プロトコルで転送を試みたということですか。
だとすると、検証する意味がありません。やるだけ無駄です。
もしコピーに成功したとしても、メタデータの扱い方が異なるので、
netatalkで運用できません。
> なぜか、Finderから手動でコピーしても開けないファイルがあったので、
> xattrコマンドで拡張属性を確認してみました。
>
> ◆macから確認した結果
> # xattr aaaaaaa.doc
> com.apple.ResourceFork
Mac上のコマンドラインからnetatalkボリュームに移動し、xattrで確認してください。
$ cd /Volumes/CentOSのNetatalkのボリューム名/...
$ xattr aaaaaaa.doc
...
...
この結果がローカルボリュームと一致するかどうかが重要です。
更にメタデータの中身を比較して、一致するかどうかを検証してください。
$ xattr -l aaaaaaa.doc
> ◆linuxから確認した結果
> # getfattr aaaaaaa.doc
> # file: aaaaaaa.doc
> user.org.netatalk.Metadata
クセの強いHFS+のメタデータをLinuxのファイルシステムに保存するには、
色々と面倒くさい無茶をする必要があります。
Netatalk 3.xの場合、FinderInfoとか、Netatalk独自の情報をAppleDouble
フォーマットでuser.org.netatalk.Metadataに保存しています。
これの中身を確認する場合、apple_dumpに-eオプションを付けます。
$ apple_dump -e aaaaaaa.doc
HFS+上のファイルにhogehogeという名前の*本物の*拡張属性があった場合、
Linux上のNetatalkは、user.hogehogeという名前の拡張属性に保存します。
> ※同じフォルダ内に._aaaaaaa.docというファイルがあり、apple_dumpで中を見
> ることができます。
HFS+上のファイルにリソースフォークが付いていた場合、Linux上のnetatalkは
チョーめんどくさい処理をします。
リソースフォークは巨大なので、Linux上の拡張属性に保存できません。
しょーがないので、「._」で始まる隠しファイルを作って、
AppleDoubleフォーマットでファインダ情報とリソースフォークを保存します。
この場合、ファインダ情報がuser.org.netatalk.Metadataと「._FILE」の
両方に保存されるので二重管理になります。気持ち悪いです。
これは、ものすごーーーーーーーく面倒な理由によるものなので、
勘弁してやってもらえませんか。
> MagicNumber: 00051607 : AppleDouble
AppleDoubleフォーマットであることを示すマジックナンバーです。
> Version : 00020000 : Version 2
AppleDoubleフォーマットにはバージョン1とバージョン2があり、
ここではバージョン2であることがわかります。
バージョン1は極めて古いので、最近は見かけません。
> Filler : 4E 65 74 61 74 61 6C 6B 20 20 20 20 20 20 20 20 : Netatalk
Appleが発行した文書において、Fillerは16個の空白文字であると定義されています。
つまり、きちんと仕様を守れば、
" "
になっていなければなりません。
しかしながら、最近のOS XがAppleDoubleを生成する場合、
"Mac OS X "
という文字列になってます。
自分のところで定義したフォーマットを尊守してません。
つまり、将来性も考えずにフォーマットを定義しておいて、あとで困ったことに
なったので、フォーマットを無視しているわけです。愚か者のやることです。
Netatalkの場合、ながらくAppleDoubleフォーマットを尊守して16個の空白を
入れていました。
しかし最近になって、OS X側が作るAppleDoubleと、Netatalk側が作るAppleDouble
が競合するという問題が指摘されました。
そこで現在のNetatalkは
"Netatalk "
という文字列を使うことで区別をして、競合を避けるようにしました。
愚か者のマネをすることにより、問題を回避したわけです。
五十歩百歩です。
> Num. of ent: 0002 : 2
格納されているメタデータが2つです。
> Entry ID : 00000009 : Finder Info
> Offset : 00000032 : 50
> Length : 00000020 : 32
格納されているメタデータの一つ目がFinderInfoであり、その中身は50バイト目
以降に書かれており、サイズが32バイトです。
問題となるのは、コレのあとに書かれている2つ目のメタデータです。
それはリソースフォークです。この中身が一致するかどうかが重要です。
--
HAT
netatalk-ja メーリングリストの案内