So-net無料ブログ作成
検索選択

afp3.xでのファイル名長さ制限 [Netatalk and Samba]

afp3.xのファイル名長さ制限は、結構わかりにくいので一応説明します。
ただし、実際にはかなり長い名前が使えるので、運用上問題になるケースは稀だと思います。

http://dtpwiki.jp/?AFP
http://blog.dtpwiki.jp/dtp/2004/11/netatalk_2.html

結論から書くと実質的な制限は、MacOSX 10.4迄は、
ファイル名をdecomposed UTF-8(UTF-8-MAC)に変換して255byteです。
MacOSX 10.5 Leopardにこの制限はありません。

HFS+やUNIXのファイルシステム上でのファイル名がafp3上に流れるとき、UTF-8-MACに変換されますが、このときバイト数が増える事があります。この増加に耐えられないのがMac OS X 10.4迄のclient動作です。

つまり原因は、UNIX側のファイルシステムではなく、netatalkでもなく、MacOSXのserver動作でもありません。MacOSX 10.4迄のclient動作にあります

なお、MacOSX 10.5 Leopardで実験したところ、この制限はありませんでした。

ファイル共有テストキットでは長さ制限のテストも出来るので、体感したい人は試してみてください。netatalk 2.x and samba 3.xのページからdownload出来ます。

netatalk 2.x and samba 3.x

以下は詳しい説明。

ファイル名の扱いは3種類

afpではファイル名の扱いは3種類あります。

Type名前説明afp2afp3netatalk1netatalk2
Type1short nameDOS互換/8.3形式××
Type2long nameHFS互換/日本語環境ではMacJapanese/31バイト制限
Type3unicode name (AFPname)Unicode (decomposed UTF-8)/実質的に長さ制限なし××

type1(DOS互換)は実際に使うことがあるかどうか知りません。少なくともnetatalkは実装していません。
以前調べた時はPCMacLANはafp3で接続してもtype2を使うので32byte以上で変な動作をします。(現在のバージョンは知らない)
MacOSXからnetatalkに接続すると、普通はtype3を使う筈です。

type3に長さ制限はあるか

afp3の仕様書にはtype3では「実質的にファイル名長さ制限はない」と書かれています。
パケットを解析してみると、ファイル名長さを示す部分が2byte確保されているので、UTF-8-MAC(decomposed UTF-8)で0xFFFF=65535byteまで表現出来る筈です。
65535は巨大な数字なので「実質的に制限なし」ということでしょう。

MacOSX 10.4迄はserver動作とclient動作で制限が違う

MacOSX 10.4迄がafp3.x serverとして動作しているとき、結構長いファイル名であってもそのまま報告してきます。ここで注目すべきは、HFS+上でdecomposed UTF-16で保存されているファイル名がdecomposed UTF-8に変換されてafp上を流れるという事です。つまりbyte数が増えることがあります。
一方、MacOSX 10.4迄がafp3.x clientとして動作しているとき、255byteを越えるファイル名で異常が出ます。255byteのところでファイル名が途切れ、Finderでも正常に扱えないようです。この制限はおそらくUNIX(Darwin)の仕様に由来するのではないかと考えています。
従って、MacOSX→MacOSX10.4でafpのやりとりを行なうと、実質的に正常に扱えるのはdecomposed UTF-8で255byteまでで、それ以上は正常に扱えないことになります。

クライアントがMacOSX10.5 Leopardの場合は、この制限はありません。実質的に制限なしです。

netatalkはMacOSXのclient動作に合わせたmanglingをする

netatalkの場合、ファイル名はprecomposed UTF-8、EUC-JP、Shift_JISなどで保存している筈です。これがdecomposed UTF-8に変換されたときに255byteを超える事があります。この場合netatalkはmanglingして255byte以内に収めてからclientに報告します。
従って、netatalk-MacOSX間では最悪manglingされるだけなので、Finderで正常に扱えます。MacOSXのserver動作よりもnetatalkの方が丁寧な動作をしているわけです。

2007.10.28 修正
Leopardでclient動作が修正されている。


nice!(1)  コメント(0)  トラックバック(1) 
共通テーマ:パソコン・インターネット

nice! 1

コメント 0

コメントを書く

お名前:[必須]
URL:[必須]
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1