[netatalk-ja:0229] Re: Mac OS X serverからのrsyncでのデータコピーで不具合

HAT hat @ fa2.so-net.ne.jp
2013年 7月 24日 (水) 22:10:49 JST


HATです。

テスト用のファイルを添付します。
ディスクイメージをマウントするとICONandEA.txtというファイルがでてきます。
このファイルはファインダ情報とリソースフォークと拡張属性が付いています。
このファイルが正常に保存できないAFPサーバは、多かれ少なかれ問題が発生
します。

> 昨日、切り分けの一つとして、4TBのデータのうち問題が顕著に発生していた
数GB程度の1フォルダを
> Carbon Copy CloneでCentOS6.4側へコピーしてみました。

CCC !
10年以上続いてますね、このソフト。
一番最初にリリースされたときから、完全にコピーするのが売りだったので、
これで決まりじゃないでしょうか。
これって起動ディスクも完全コピーして、そのディスクから起動できるんですよね。

> HATさん、書き忘れましたが、実は、netatalk-2.2.0-2.el6.x86_64で問題が出た
> 直後、
> netatalk-2.2.0-2.el6.x86_64をアンインストールしNetatalk
> 3.0.4をインストールしてrsyncでのコピーを試したのですが、
> それでも同じ事象が発生しました。

つまり、たぶんnetatalk側の問題ではないということでしょうね。

> 2.2.0系は怪しいということでしたら、Netatalk3系の最新版に変更したほうが
> よいでしょうか?

2.2.0が怪しいと言っているのであって、2.2系は怪しくありません。
https://github.com/Netatalk/Netatalk/blob/branch-netatalk-2-2/NEWS
2.2.1から2.2.5までのChangesをみてみると、FIXが50個あります。
50個のバグに出会わず4TBのサーバが長期稼働できるか疑問です。

2.2系は2年、3.0系は1年経過しており、どちらも極めて安定しています。
2.2系と3.0系のどちらを選ぶかは、管理者の判断でしょう。

> ・Netatalk/Samba混在だと排他処理
> →いま発生している問題が落ち着いたら、過去のMLを読んでみたいとおもいますが、
> 弊社は、MacOSのPCを業務端末として利用しているユーザと、Windowsを業務端末
> としているユーザとで、
> それぞれ職種が大きく異なり、通常業務で扱うファイル・ディレクトリも大きく
> 異なるため、
> 排他制御を気にしなければ行けない状況はあまり発生しないかもしれません。

MacユーザはWindowsとのデータ交換を考えていないということは、
各種メタデータ(拡張属性、リソースフォーク、ファインダ情報等)が引き起こす
問題点を把握していないということになります。
ならば、これらのメタデータをじゃんじゃん平気で使っている可能性が大きいです。
従って、サーバを移行する場合は、これらのメタデータを完全にコピーしなければ、
トラブルが発生する可能性が極めて高いです。
問題点に気付くのはサーバ移行後なので、時既に遅しであり、重要なデータを
永久に喪失する可能性があります。

> ・man rsync
> -a, --archive               archive mode, equivalent to -rlptgoD
> -8, --8-bit-output          leave high-bit chars unescaped in output
> -E  --extended-attributes   copy extended attributes, resource forks
> 
> 少し前に、-Eを指定してrsyncを試してみましたが、コピー先となるlinuxサーバ「-E対応していない」といったようなエラーメッセージが出て失敗しました。

これはおかしい。
-Eオプションを付けないとメタデータ類が喪失します。
netatalkは全メタデータを保存するのが使命のファイルサーバです。
対応していないわけがありません。

> ・リソースフォーク、拡張属性、ファインダ情報等は重要でしょうか
> すみません、これに関して知識が非常に乏しいのですが、現在の環境は前任担当者が構築しており
> ls -leで確認するとこのような状態となっており、

まず、リソースフォーク、拡張属性、ファインダ情報の3つを確実に理解して
ください。これらが完全にコピーできていないと、かなりヤバいです。
理解しない状態でNetatalkを管理するのは不可能です。

Mac上ではxattrコマンドで拡張属性を確認できます。

$ xattr ICONandEA.txt
com.apple.FinderInfo
com.apple.ResourceFork
com.apple.TextEncoding
com.apple.metadata:kMDItemFinderComment

大昔から、MacにはFinderInfoとResourceForkというメタデータがあります。
これらはMac以外のOSには存在しないので厄介者です。
更に、近年のOS Xでは拡張属性(EA)というメタデータが増えました。
拡張属性はメジャーなUnix系OSでも使えます。
近年のOS Xは、昔からあるFinderInfoとResourceForkを拡張属性のように扱う
というトリックを使います。
上の例では、ファインダ情報とリソースフォークを
com.apple.FinderInfoとcom.apple.ResourceForkという名前の拡張属性に
見せかけているわけです。
com.apple.TextEncodingとcom.apple.metadata:kMDItemFinderCommentは、
本物の拡張属性です。

Linux上ではgetfattrコマンドで拡張属性が確認できます。
上のファイルをFinderを使ってCentOS 6.4上のnetatalk-2.2.0-2.el6にコピーし、
CentOS 6.4上で確認すると次のように見えます。

$ getfattr ICONandEA.txt
# file: ICONandEA.txt
user.com.apple.TextEncoding
user.com.apple.metadata:kMDItemFinderComment

本物の拡張属性が完全にコピーされています。名前の最初にuserが付いてますが、
これはLinuxの仕様です。ユーザ定義の拡張属性という意味になります。

ファインダ情報とリソースフォークに関しては、隠しディレクトリ .AppleDouble
に保存されます。

$ ls .AppleDouble/
ICONandEA.txt

このファイルの内容はnetatalkに付属するapple_dumpコマンドで確認できます。

> ・設定ファイル
> ++++++++++++++++++++++++++++++++++++
> ++++++
> → AppleVolumes.default
> :DEFAULT: options:upriv,usedots cnidscheme:dbd maccharset:MAC_JAPANESE
> dperm:0777 fperm:0777 ea:sys
> 
> →netatalk.conf
> #### machine's AFPserver/AppleTalk name.
> #ATALK_NAME=machinename
> 
> #### server (unix) and legacy client (<= Mac OS 9) charsets
> ATALK_UNIX_CHARSET='UTF8'
> ATALK_MAC_CHARSET='MAC_JAPANESE'
> 
> #### Don't Edit. export the charsets, read form ENV by apps
> export ATALK_UNIX_CHARSET
> export ATALK_MAC_CHARSET
> 
> #########################################################################
> # AFP specific configuration
> #########################################################################
> 
> #### Set which daemons to run.
> #### If you use AFP file server, run both cnid_metad and afpd.
> CNID_METAD_RUN=yes
> AFPD_RUN=yes
> 
> #### maximum number of clients that can connect:
> AFPD_MAX_CLIENTS=100
> 
> #### UAMs (User Authentication Modules)
> #### available options: uams_dhx.so, uams_dhx2.so, uams_guest.so,
> ####                    uams_clrtxt.so(legacy), uams_randnum.so(legacy)
> #AFPD_UAMLIST="-U uams_dhx.so,uams_dhx2.so"
> 
> #### Set the id of the guest user when using uams_guest.so
> #AFPD_GUEST=nobody
> 
> #### config for cnid_metad. Default log config:
> #CNID_CONFIG="-l log_note"
> 
> #########################################################################
> # AppleTalk specific configuration (legacy)
> #########################################################################
> 
> #### Set which legacy daemons to run.
> #### If you need AppleTalk, run atalkd.
> #### papd, timelord and a2boot are dependent upon atalkd.
> ATALKD_RUN=no
> PAPD_RUN=no
> TIMELORD_RUN=no
> A2BOOT_RUN=no
> 
> #### Control whether the daemons are started in the background.
> #### If it is dissatisfied that legacy atalkd starts slowly, set "yes".
> #ATALK_BGROUND=no
> 
> #### Set the AppleTalk Zone name.
> #### NOTE: if your zone has spaces in it, you're better off specifying
> ####       it in afpd.conf
> #ATALK_ZONE=@zone

特に問題ないように見えます。

> →afpd.conf
> - -tcp -noddp -uamlist uams_dhx2.so,uams_dhx.so -maccodepage MAC_JAPANESE
> -setuplog "default log_info /var/log/netatalk.log"

特に問題ないように見えます。

> ・ログファイル
> ++++++++++++++++++++++++++++++++++++++++++
> 事象発生した際、netatalkサーバのlogファイルにまともなログはほとんどでないのですが、
> まれに、こういったlogがでます。
> 
> afpd[2311] {ea_sys.c:185} (E:AFPDaemon):
> sys_getextattr_content(com.apple.quarantine): error: No such file or
> directory

なんだっけこれは。
忘れました。
拡張属性で問題が発生しています。
最近のnetatalkだと直ってるかもしれません。

> それと、クライアントのMacOS側で、/var/log/system.logにまれにこういったlogがでています。
> 
> filecoordinationd[172]: Warning: Exception caught during decoding of
> received message, dropping incoming message.
>         Exception: Exception while decoding argument 5 of invocation:
>         <NSInvocation: 0x7fa369910510>
>         return value: {Vv} void
>         target: {@} 0x0
>         selector: {:} addSubscriber:forID:appBundleID:fileURL:
>         argument 2: {@} 0x7fa369913940
>         argument 3: {@} 0x7fa369912f30
>         argument 4: {@} 0x7fff7e8777c0
>         argument 5: {@} 0x0
> 
>         Exception: decodeObjectForKey: Object of class "NSURL" returned nil
> from -initWithCoder: while being decoded for key (null)

わかりません。

-- 
HAT
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: testvolume.dmg.gz
型:         application/octet-stream
サイズ:     24287 バイト
説明:       無し
URL:        </mailman/archives/netatalk-ja/attachments/20130724/a4449472/attachment-0001.obj>


netatalk-ja メーリングリストの案内