長いファイル名を扱うことができない

提供: Samba-JP
J46から転送)
移動先:案内検索
KB番号 J0046
最終更新日 2001/06/17
作成者 たかはしもとのぶ
最終更新者

対象

この文書は、以下のプロダクトに付いて説明したものです。

  • Samba 2.2.x
  • Samba 2.0.x

現象

Windows上からSambaサーバ上の長いファイル名を操作(リネーム、コピーなど)しようとすると、操作に失敗することがあります。特に、coding system = CAP/HEXの場合は、比較的短いファイル名でも操作に失敗します。

たとえば Samba 2.0.x では、以下のように長いファイル名のファイルを Samba 上の共有にコピーした場合にファイル名が途中で切れてしまいますが、警告メッセージなどは一切出力されません。 一方 Samba 2.2.x ではこのような場合エラーとなってコピーできません。

 C:\> net use N: \\samba\share
 C:\> copy c:\config.sys N:\01234567890 ... (110文字) ... 0123456789.TXT
 C:\> ren N:\*.TXT X*.TXT
 C:\> dir N:\
 
 Volume in drive N is share
 Directory of N:\
 
 .              <DIR>        06-13-01 11:40a .
 ..             <DIR>        05-29-01  5:06p ..
 X1234~R1                 0  06-13-01 11:40a X123456789 ... (110 文字) ... 012345
          1 file(s)              0 bytes
          2 dir(s)   1,057,292,288 bytes free
 
 C:\>

原因

これは、Sambaの仕様になります。

Windows上でのファイル名の最大長は、Windows 9x系では255バイト(ただし終端のヌルを除く)ですが、Windows NT/ 2000系ではUnicode(UCS-2)で255「文字」(ただし終端のヌル文字を除く)のため、バイト数では、最大510バイトになる可能性があります。 一方UNIX側のファイル名の最大長は通常255バイトですが、Samba 2.2.0より前では、ファイル名を扱うfstring 型が char[128] になっているため、最大でも127バイトのファイル名しか扱えません。

これらの制限のため、Windowsで扱えるファイル名であっても、SambaやUNIX側の最大ファイル名長の制限の為に、利用できない場合があります。

また、coding system = EUC3/UTF8の場合、Samba上で日本語ファイル名1文字あたり使用するバイト数は、最大3バイト、coding system = CAP/HEXなどを利用する場合、最大6バイトとなりますので、Sambaで利用できる最大ファイル名長は更に短くなる場合があります。

対処策

これはUNIX及びSambaの仕様となります。Samba上では長いファイル名を用いる際は英語を利用し、Samba 2.0.xでは文字数も127文字以内にするなど、運用で対処するようにしてください。

この技術情報は linux-users:84278 からの一連のスレッドの議論を元に作成されています。