[samba-jp:23095] 「宛先には既に...ファイルが存在します」
ARAI Shun-ichi
hermes @ ceres.dti.ne.jp
2020年 9月 20日 (日) 14:34:58 JST
あらいと申します。
初めまして。昨日この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 メーリングリストの案内