[samba-jp:23096] Re: 「宛先には既に...ファイルが存在します」

takasi.yano @ nifty.com takasi.yano @ nifty.com
2020年 9月 23日 (水) 09:24:10 JST


矢野です。

nilfsはPOSIX ACLをサポートしていないなどSamba用ファイルシステムとしては機
能が不十分なところがあるような気がします。


ARAI Shun-ichi <hermes @ ceres.dti.ne.jp>さん:
あらいと申します。

初めまして。昨日このMLに登録させていただきました。
よろしくお願いいたします。

 さて、恐縮ですが、初めましてでいきなりがっつりとご相談をさせていただ
きたいと思います。

 Windowsからファイルをコピーする際に、サーバ側にないのに既に存在する
という確認ダイアログが出ることがあります。

 ダイアログのタイトルは「ファイルの置換またはスキップ」で、「宛先には
既に"..."という名前のファイルが存在します」というメッセージが書かれて
いるものです。
 キャンセルすると、サイズ0のその名前のファイルが残るのですが、動作中
に見ていると、それはダイアログが出た時点で既にできているようです。

 OSはGentoo Linuxで、Sambaは4.12.6ですが、4.11でも発生していましたし、
検索してみるとどうやらだいぶ前から起きている現象のようです。

 自分なりに発生条件等調べてみたところ、次のようなことがわかりました。

 まずこの現象が起きるのは、一度サーバから「切り取り」してなくなったファ
イルをWindows側からコピー等しようとする場合のようです。
 また、サーバ側のFSにも依存するようで、NILFS2だと起きてext4だと起きず、
どうやらxattrをサポートしていないことが条件となっているようです。

 他に、以下のようなこともわかりました。
- サーバやクライアントPCを再起動しても発生する(永続する)
- 一度発生したファイルでは、切り取りでなく削除しても発生する
- 切り取りしたファイルの名前をWindows側で変更してからコピーしても発生する
- 同様にWindows側でコピーしてできたファイルをコピーする場合でも発生する
- 同じ名前で同じ内容のファイルでも、別途作成すると発生しない

 ログを多めに出力すると、この現象が起きている時には、コピーのために
create_file_default()が呼び出された際に、既に存在しない筈のファイルの
情報がどこからか持ち出され、ea_listで渡されていることがわかりました。
 わかりましたとは言っても、これまでSambaのソースを見たことがなかった
のでこのea_listtとやらが何者かよくわからないのですが、どうやらxattrを
サポートしているFSではそこに保存しているようです。だからかその場合、ファ
イルが存在しなければログではea_listは(nil)と表示されます。

 推察するに、通常であればxattrに格納する情報を、どこかのDBに、ファイ
ルの何かの情報のハッシュのようなものをキーにして保存していて、切り取り
の際にそれを消去していない、などということではないでしょうか。

 この現象について、もし回避する手段等ご存じだったり改修の案があるよう
でしたら、コメントをいただけたらと思います。
 よろしくお願いいたします。


samba-jp メーリングリストの案内