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

ARAI Shun-ichi hermes @ ceres.dti.ne.jp
2020年 9月 27日 (日) 12:30:49 JST


あらいです。

 この件、自分でクローズのように言っておきながらなのですがその後わかっ
たこともありますので、ご報告させていただきます。

 まず、前回「なんとか対処するつもり」と言ったのは、まあ利用の状況から
して "ea support = no" の設定でも問題なかろうと思ったのでそうするとい
う意味でした。でも一応、影響も少しは見ておこうと思って作業を進めたとい
う次第です。

 まず、"getfattr -d -m - ファイル" のコマンドで様子を見たのですが、
ext4でnouser_xattrを設定している場合とNILFS2では異ることに気付きました。
ext4(nouser_xattr)の場合は何も返って来ないのに対し、NILFS2では

> security.selinux="unlabeled"

という結果が得られたのです。恥ずかしながらSELinuxについては不勉強でよ
くわからないのですが、FS以外から答えが返ってくるのでしょうか。とすると
カーネルコンフィグにもよるのかも知れません。
 拡張属性がサポートされないであろうVFATで試してみたら、同じ結果が得ら
れました。

 Sambaの中で、listxattr(2)の結果が0であるかどうかを見ている箇所があり、
またcreate_file_unixpath()(source3/smbd/open.c)ではea_listがNULLかど
うかで判断しており、それらの整合が取れていないことも考えられるため、試
験的にソースをいじってみました。
 具体的には、get_ea_names_from_file()(source3/smbd/trans2.c)で
sizeret == 0を見てreturnしている箇所で、ea_namelistが上記の
"security.selinux" のみだった場合も同様にreturnするようにしてみました。

 すると、Windows側で新しく作ったファイルでは、現象が再現しなくなりま
した。
 また、既に現象が発生するようになっているファイルでは動作は変らず、コ
ピーの際に「ファイルが存在します」のダイアログが出ました。

 Samba側としては、拡張属性をサポートしないFSの場合はnouser_xattrを指
定したext4のように何も返らないことを想定しているのかも知れません。

 なお、Sambaは今回4.13.0を使用していますが、上記の改変をしないソース
からビルドすると、現象は以前通りに再現します。

 今のところ、以上のようなことがわかったというだけなのですが、ご相談し
てアドバイスもいただいた問題なのでご報告させていただきました。
 ただ、内容がSamba内部に踏み込み始めたので、もし今後も報告したいこと
があった場合もしかすると開発者のMLに移った方がいいかも知れないとも思い
ました。
 もしそのようでしたらご指摘ください。

In Msg <20200923.195552.1437439100204350198.hermes @ ceres.dti.ne.jp>;
   Subject "[samba-jp:23099] Re: 「宛先には既に...ファイルが存在します」":

> あらいです。
> 
> コメントありがとうございます。帰宅したので早速試してみました。
> 
> In Msg <87v9g52j64.wl-fumiyas @ osstech.co.jp>;
>    Subject "[samba-jp:23097] Re: 「宛先には既に...ファイルが存在します」":
> 
>> さとうふみやす @ OSSTech です。
>> 
>> On Sun, 20 Sep 2020 14:34:58 +0900,
>> ARAI Shun-ichi wrote:
>>>  Windowsからファイルをコピーする際に、サーバ側にないのに既に存在する
>>> という確認ダイアログが出ることがあります。
>> 
>>>  自分なりに発生条件等調べてみたところ、次のようなことがわかりました。
>>> 
>>>  まずこの現象が起きるのは、一度サーバから「切り取り」してなくなったファ
>>> イルをWindows側からコピー等しようとする場合のようです。
>>>  また、サーバ側のFSにも依存するようで、NILFS2だと起きてext4だと起きず、
>>> どうやらxattrをサポートしていないことが条件となっているようです。
>> 
>> ext4 で nouser_xattr マウントオプション付きでマウントしても
>> 再現する → Samba に原因がありそう。
> 
>  これは再現しませんでした。また念のためext3でも試してみましたが、同じ
> く再現しませんでした。もしかするとext2辺りでは……とも思いましたが、そ
> こまでは試しませんでした。
> 
>> NILFS2 で smb.conf に `ea support = no` あるいは
>> `store dos attributes = no` (あるいは両方) を設定したら
>> 再現しない → NILFS2 に原因がありそう。
> 
>  これらの設定条件のうち、`ea support = no` で再現しなくなりました。両
> 方でも再現しません。
>  もう一方の `store dos attributes = no` だけだと再現しました。ただ、
> 上記のnouser_xattrを設定しないext4にファイル(.txt)をコピーして
> getfattr -d をしてみたら、user.DOSATTRIB=... の行しか出力されなかった
> ので、ちょっとよくわからない部分があるようにも感じました。
> 
>  ともあれどうやら、別のメールでの矢野さんのご指摘のように、やはり
> NILFS2はあまりSamba用のFSとしてはよろしくないようですね。
> 
>  NILFS2固有の問題なのかどうかなど疑問は残るものの、個人的には当面は、
> 今回わかったことだけでなんとか対処するつもりです。が、もしどなたかこの
> 問題を追求したいという方がおられたら協力させていただきます。
> 
>  アドバイスどうもありがとうございました。
> 
>> -- 
>> -- Name: SATOH Fumiyasu @ OSS Technology Corp. (fumiyas @ osstech co jp)
>> -- Business Home: https://www.OSSTech.co.jp/
>> -- GitHub Home: https://GitHub.com/fumiyas/
>> -- PGP Fingerprint: BBE1 A1C9 525A 292E 6729  CDEC ADC2 9DCA 5E1C CBCA


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