![]() |
Using SambaRobert Eckstein, David Collier-Brown, Peter Kelly 共著第一版 1999 年 11 月 1-56592-449-5, 注文番号: 4495 416 ページ, 34.95 ドル |
5.4 ファイル名の短縮 (Name Mangling) と大文字小文字
DOSやWindows 3.1の時代を振り返ってみると、全てのファイル名は8文字からなる大文字、ピリオド、そして3文字からなる大文字に制限されていた。これは 8.3 形式として知られ、非常に, やっかいである。Windows 95/98、Windows NTししてUNIXは、ファイル名に大文字小文字が区別され、より長い文字長を可能とすることでこの問題を緩和した。 表 5.6 では、一般的なオペレーティングシステムの幾つかにおける名前づけ規則の現状を示す。
表 5.6: OS毎のファイル名の制限 OS
ファイル名規則
DOS 6.22 以前
8文字、ドット(.)、さらに3文字の拡張子(8.3 形式)。大文字と小文字は区別されない
Windows 3.1 for Workgroups
8文字、ドット(.)、さらに3文字の拡張子(8.3 形式)。大文字と小文字は区別されない
Windows 95/98
127 文字。大文字と小文字を区別
Windows NT
127 文字。大文字と小文字を区別
UNIX
255 文字。大文字と小文字を区別
Samba は現在でも Windows for Workgroups のような 8.3 形式でしかファイルを保存できないクライアントとの下位互換性を保持する必要がある。ユーザが antidisestablishmentarianism.txtという名前のファイルを共有に作成した場合、Windows for Workgroups クライアントは、同じディレクトリにある antidisease.txtという名前のファイルと区別することができない。 Windows 95/98 や Windows NT と同様、Samba は似たようなファイル名同士で名前が重複してしまわないように、長いファイル名を8.3 ファイル名に変換する特別なロジックを実装する必要がある。これは name mangling と呼ばれ、Samba はこれを Windows 95 以降の OS と同様の、しかし同一ではない方式でとりおこなう。
5.4.1 The Samba Mangling Operation
ここで、Samba がどのようにして長いファイル名を 8.3 形式のファイル名に mangle するかをみてみよう:
元々のファイル名がドットから始まっていないのであれば、最後のドットが現れるまで、先頭から5文字分の英数文字を大文字に変換する。これらの文字は、8.3 形式に mangle されたファイル名の最初の5文字になる。
元々のファイル名の先頭がドットで始まっている場合、ドットを削除してから、最後のドットが現れるまでの先頭から5文字分の英数文字を大文字に変換する。これらの文字は、8.3 形式に mangle されたファイル名の最初の5文字になる。
これらの文字の次には、特別な mangle 用の文字が続く。デフォルトではチルダ(~)であるが、Samba ではこの文字を変更することもできる。
最後のピリオドの前までの長いファイル名から2文字のハッシュが生成される。最後のドットに続く部分も必要に応じて利用される。この2文字のハッシュコードは、8.3 形式のファイル名では mangle 文字に続いて現れる。
元々のファイル名で最後のドットに続く3文字が、大文字に変換され、mangle 名の拡張子になる。元々のファイル名がドットから始まっていた場合、三文字のアンダースコア(
___
) が、拡張子として用いられる。以下に幾つかの例を示す:
virtuosity.dat VIRTU~F1.DAT .htaccess HTACC~U0.___ hello.java HELLO~1F.JAV team.config.txt TEAMC~04.TXT antidisestablishmentarianism.txt ANTID~E3.TXT antidiseast.txt ANTID~9K.TXTこの規則により、Windows for Workgroups 経由でネットワークにアクセスしないといけない不幸な人も、二つのファイルを区別することが可能になる。Samba は同じ長いファイル名は、常に同じ mangle 名に短縮することに留意すること。Windows ではその限りではない。この方式では、ファイル名の重複の可能性は皆無ではない。しかしその可能性は激減している。
通常、mangle 設定オプションは、古いクライアントの為にのみ用いられる。そのため、この設定が別のクライアントに悪影響を与えないように、
include
パラメータを smb.conf ファイルに追加することを推奨する:[global] include = /ucsr/local/samba/lib/smb.conf.%mこれは、Windows for Workgroups クライアントがアクセスすると smb.conf.WfWg のように解決される。そこで /usr/local/samba/lib/smb.conf.WfWg というファイルに以下のようなオプションを設定しておこう:
[global] case sensitive = no default case = upper preserve case = no short preserve case = no mangle case = yes mangled names= yesWindows for Workgroups 3.1 を利用していないのであれば、恐らくこれらのオプションをデフォルト値から修正する必要はないであろう。
5.4.1.1 Representing and resolving filenames with Samba
指摘しなければならないもう一つの点は、ファイルを 表示 する方法と 識別 する方法のOSによる違いである。例えば、Windows 95/98/NT を利用している場合、恐らく, you have likely run across a file called README.TXT という名前のファイルをみたことがあるであろう。このファイルは、OSによって、全て大文字のファイルとして表示されている。しかし、MS-DOS プロンプトを開いて
edit
readme.txt
とした場合、全て大文字のファイルが、エディタにロードされる。名前を小文字で入力した場合も同様である。これは、Windows 95/98/NT 系列のOS は、ファイル名を大文字小文字を区別せずに識別している為である。ファイルが大文字小文字を区別するように書かれていても同様である。一方UNIX系列のシステムは、常にファイルを大文字小文字を区別して識別する。例えば README.TXT ファイルを編集しようとして
vi
readme.txt
と入力した場合、恐らく新しいファイルの空のバッファを編集することになるであろう。ここで、Samba が大文字小文字をどのように処理するのかを記述する:
preserve
case
がyes
の場合、 Samba はファイル名を表示(解決ではない)するのに、常に大文字小文字を区別する。no
の場合、大文字小文字の特徴は、default
case
オプションによって決定される。これはshort
preserve
case
についても同様である。このオプションがyes
に設定されていると、Samba は 8.3 ファイル名を表示するのにOSのデフォルトの文字の大きさで行うようになる。そうでない場合は、default
case
オプションで設定された文字の大きさを利用する。最後に Samba はcase
sensitive
オプションの値に基づいて共有内のファイル名を識別する。5.4.2 Mangling Options
Samba では name mangling をどのように行うかについての詳細な制御を行うことが可能である。それには、文字の大きさを識別するかどうかの制御や、mangled 名を形成するときに挿入する文字、また手作業でファイル名の形式を変換する機能などを含まれる。これらのオプションを 表 5.7に示す。
表 5.7: Name Mangling のオプション オプション
パラメータ
機能
デフォルト
範囲
case sensitive
(casesignames)
真偽値
yes
の場合、Samba はファイル名の大文字小文字を区別する(Windows は区別しない)
no
共有
default case
(
upper
orlower
)デフォルトの文字の大きさ(preserve case が
no
の時のみ用いられる)Lower
共有
preserve case
真偽値
yes
の場合、クライアントが提供する文字の大きさを維持する(default case
に従った変換を行わない)
yes
共有
short preserve case
真偽値
yes
の場合、クライアントが提供する 8-3 形式の名前の文字の大きさを維持する
yes
共有
mangle case
真偽値
大文字と小文字が混在している時に名前を mangle する
no
共有
mangled names
真偽値
長い名前を 8.3 の DOS 形式にmangle する
yes
共有
mangling char
文字列 (1文字)
mangle 文字を指定する
~
共有
mangled stack
数値
ローカルな manle スタックに保存する mangle 名の数を指定する
50
グローバル
mangled map
文字列 (パターンのリスト)
形式を変換するときに用いるファイル名のマッピング方式を記述する
なし
共有
5.4.2.1 case sensitive
この共有レベルのオプションには、
casesignames
というよく意味がわからない同義語が存在するが、Samba がある共有内のファイル名を識別する際に文字の大きさを区別するかどうかを設定する。このオプションのデフォルト値はno
であり、これは Windows がファイル名を識別する方法と同じである。クライアントのOSにファイル名の文字の大きさを区別するものを用いている場合は、この設定オプションを以下のようにyes
にできる:[accounting] case sensitive = yesそれ以外の場合は、このオプションをデフォルトのままにしておくことを推奨する。
5.4.2.2 default case
default
case
オプションはpreserve
case
オプションと一緒に用いられる。これはクライアントが共有にファイルを作成した時に Samba が用いるデフォルトの文字の大きさ(大文字/小文字) を設定する。デフォルトの文字の大きさはlower
であり、これは新しく作成されたファイルがクライアントから与えられる文字の大きさが混在した名前を用いることを意味する。必要であればこのグローバルオプションを以下のように設定することもできる:[global] default case = upperこの場合、新しく作成されるファイルの名前は大文字に変換される。プログラムによってこの動作を変更することはできない。Windows for Workgroups 等、
大文字
である必要がある 8.3 クライアントを利用していないのであれば、このオプションはデフォルトの値を用いることを推奨する。5.4.2.3 preserve case
このオプションは、クライアントが Samba に作成したファイルの名前にクライアントのOSから提供された文字の大きさを用いるか、上記の
default
case
設定オプションを用いるかどうかを設定する。デフォルト値はyes
であり、クライアントのOSが提供する文字の大きさを利用する。no
にした場合、default
case
オプションの値が用いられる。このオプションは、クライアントが 8.3 形式のファイルを送付した場合は適用されないことに注意 - 以下の
short
preserve
case
オプションを参照のこと。 このオプションをyes
にすると、アプリケーションが Samba サーバ上に作成したファイルは、 ファイル作成時に用いられた大文字と小文字の情報を識別する。Samba に Windows NT のファイルシステムの動作を模倣させるのであれば、このオプションはデフォルトのyes
のままにしておくこと。5.4.2.4 short preserve case
このオプションは、クライアントが Samba に作成した 8.3形式のファイル名をクライアントのOSのデフォルトの文字の大きさにするか、
default
case
設定オプションで設定された文字の大きさにするかを設定する。デフォルト値はyes
であり、クライアントのOSから提供された文字の大きさの情報を利用する。以下のようにすることで、default
case
オプションで指定した値を利用させることができる:[global] short preserve case = noSamba に Windows NT ファイルシステムの動作を模倣させるのであれば、このオプションはデフォルトの
yes
のままにしておくこと。5.4.2.5 mangled names
この共有レベルのオプションは、Samba が8.3 クライアント用に共有中のファイル名を mangle するかどうかを設定する。このオプションが
no
の場合、Samba は名前を mangle しない、(clientにも依存するが)8.3 形式のOSを利用しているユーザからは、それらのファイルは見えなるか、ファイル名が切り捨てられたようにみえる。デフォルト値はyes
である。ある共有についてこのオプションを設定するには、以下のようにする:[data] mangled names = no5.4.2.6 mangle case
このオプションは
default
case
設定オプションで指定される文字の大きさから構成されていないだけのファイル名も mangle するかどうかを設定する。このオプションのデフォルトはno
である。これをyes
にすると、全てのクライアントが mangled ファイル名を扱えるようになる。ある共有についてこのオプションを設定するには以下のようにする:[data] mangle case = yesこのオプションは、変更する正当な理由がない限りそのままにしておくことを推奨する。
5.4.2.7 mangling char
この共有レベルのオプションは、Samba が 8.3 形式からファイル名を生成するときに用いる mangle 文字を指定する。デフォルトで利用される文字はチルダ(~)である。これは必要に応じて変更することが可能である。以下に例を示す:
[data] mangling char = #5.4.2.8 mangled stack
Samba は最近 mangle した 8.3 ファイル名のスタックを持っている。このスタックは mangle 名をオリジナルの名前に戻す逆変換表に使われる、これは作成したファイルを一度クローズした後で必要とするようなアプリケーションが必要とする。長いファイル名/mangle ファイル名のペアが蓄積されるデフォルトの値は 50 である。ファイル名を mangle するのに利用するCPU時間を短縮したいような時は、このスタックのサイズを必要に応じて増加させる。その代わりメモリの消費量が増え、わずかながらファイルのアクセスが遅くなる。
[global] mangled stack = 1005.4.2.9 mangled map
デフォルトの名前のmangleの動作に不満があれば、
mangled
map
オプションを用いることで、Samba に対してどのようにそれを行うかを指示することが可能である。このオプションは、Samba が名前の mangle を行う前、もしくは行っている最中に用いられるマッピングパターンの指定を可能にする:[data] mangled map =(*.database *.db) (*.class *.cls)これにより、Samba は各々のファイル名について括弧内で指定された最初のパターンにマッチする文字列が存在するかどうかをさがし、8.3 クライアントのファイル名表示のために、括弧内の二番目のパターンに従ってそれを置き換えるようになる。これは、名前の mangle がファイル名を正しく変換せず、クライアントがそれを認識できなくなってしまうような時に有用である。パターンはホワイトスペースで区切られる。
© 1999, O'Reilly & Associates, Inc.