長いファイル名を扱うことができない
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 からの一連のスレッドの議論を元に作成されています。