短いファイル名が同一になる

提供:Samba-JP
ナビゲーションに移動検索に移動
KB番号 J0049
最終更新日 2001/08/07
作成者 たかはしもとのぶ
最終更新者

対象

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

  • Samba 2.0.9日本語版リリース1.0

現象

先頭5文字が同一のファイルが同じディレクトリに存在した場合、ファイル名によってはSambaの生成する短いファイル名が同一になってしまう場合があります。 例えば、

 d20010215.hnf
 d20010404.hnf

というファイルは、いずれも同一の短いファイル名D2001~76.HNFを持ちます。これが原因で、ファイル操作時に様々な不具合が発生することがあります。最悪の場合書き込むファイル名が混同されてしまい、意図しないファイルが書き変わってしまうこともあります。

同一の原因によって発生する現象に ドラッグアンドドロップで異なるファイル名のファイルが開く があります。

原因

これはSambaの仕様で、smb.conf(5)でも解説されています。

Samba は長いファイル名の文字列から得られるハッシュ値を元に短いファイル名を生成します。このハッシュ関数は一対一ではなく多対一であるため、異なるファイル名から同一のハッシュ値が得られることがあります。 このような場合、短いファイル名のハッシュ値以外の部分の文字列までもが同一であると、短いファイル名の文字列全体が全く同一のものになってしまいます。

同一になる確率は、約1/1300ですが、ファイル名の6バイト目以降が数字のみの場合は1/20で短いファイル名の重複が発生します。

Windows の場合、短いファイル名の「~」に続く数値はハッシュ値ではなく単に通し番号になっています。これはファイル生成時に作られ、長いファイル名と同様ファイルシステム上に保存されるので、常に一定の値となります。 Samba では短いファイル名は保存されないため、毎回同じ短いファイル名を生成するために、ハッシュ値を利用しています。

対処策

基本的に、この問題は運用で対処するしかありません。

可能であれば、同一ディレクトリに、先頭4バイトが同一のファイルを作成しないようにしてください。 ただし、短いファイル名を基本的に利用しない場合は、samba mangle_name問題のページにあるパッチを適用することで、短いファイル名が重複する可能性を下げることが可能です。

ただし、このパッチを適用してもファイル名重複の可能性が完全に排除されるわけではありませんので、注意してください。

なお、このパッチを適用すると、短いファイル名が暗号のような文字列になりますので、元々の長いファイル名を連想することが不可能になります。 従って、対話的な作業で短いファイル名を利用する古いアプリケーションを利用する場合は、このパッチの適用は避けた方がよいでしょう。 J0027:ドラッグアンドドロップで異なるファイル名のファイルが開くのように、対話的に利用しているのは長いファイル名のみの場合は、このパッチを適用することで予期しない不具合を避けることが可能になります。

なお、この問題は Samba Team にも認識されており、VFS モジュール中で対処される予定となっています。

この技術情報は sugj-tech:3017, samba-jp:10017 からの一連のスレッドの議論を元に作成されています。