Tomcat アプリが Windows Samba 共有フォルダーで読み取り/書き込みできるようにするために、次の fstab エントリがあります。
//dc/docs /media/docs cifs credentials=...,rw,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777,sec=ntlm,uid=tomcat7,gid=tomcat7,dir_mode=0770,file_mode=0770 0 0
問題は、一定時間が経過するとアンマウントされ続けることです。これはWindowsの障害ではなく、他の場所から共有にアクセスできます。
$ sudo ls /media/docs
finance postsale repository
#after e.g. 10 minutes...
$ sudo ls /media/docs
[sudo] password for user:
ls: cannot access '/media/docs': Connection reset by peer
#this takes ages to complete
$ sudo umount /media/docs
#this fails immediately after, succedes after about 5/10 seconds
$ sudo mount /media/docs
mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
$ sudo mount /media/docs
mount error(104): Connection reset by peer
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
$ sudo mount /media/docs
$ sudo ls /media/docs
finance postsale repository
これをデバッグしたり、ドロップを防ぐにはどうすればよいですか?
Tomcat アプリのユーザーには再マウントする権限がないため、毎回 IT にチケットを提出する必要があります。
同じ共有上のこのマウントはドロップしないことに注意してください (私が見つけた唯一の違いは、上記user
では sudoer が使用されてtomcat7
いないことです)。
//dc/share /media/share cifs credentials=....credentials,rw,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777,sec=ntlm,uid=user,gid=user,dir_mode=0770,file_mode=0770 0 0
アップデート:
フォルダー/var/log/samba
が空です。Samba のログ記録を設定するにはどうすればいいですか?
フォルダーをリストし続けると、削除されません。
while true; do date; ls /media/docs; sleep 5; done
更新2:
出力は次のようになりますmount
:
//fs-mxp/ZZZshare on /media/share type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=XXX,domain=YYY-it,uid=1000,forceuid,gid=1000,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//fs-mxp/ftp on /media/ftp type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=XXX,domain=YYY-it,uid=1000,forceuid,gid=1000,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//sql-mxp/C$ on /media/sql type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=administrator,domain=YYY-it,uid=1000,forceuid,gid=1000,forcegid,addr=10.39.52.11,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//fs-mxp/ZZZdocs on /media/docs type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=YYYdoc,domain=YYY-it,uid=113,forceuid,gid=123,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//fs-mxp/ZZZshare/ASTE on /home/esales/aste type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=XXX,domain=YYY-it,uid=1001,forceuid,gid=1002,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
//fs-mxp/ftp/YYYvendor on /home/esales/YYYvendor type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=XXX,domain=YYY-it,uid=1001,forceuid,gid=1002,forcegid,addr=10.39.52.6,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,actimeo=1)
答え1
これは、ランサムウェア攻撃を防ぐために Windows アップデートで配信されたパッチに関係していると思います。共有フォルダを保持するサーバーが CIFS V1 リクエストを拒否しているようです。デフォルトでは、マウントは CIFS V1 を使用します。vers=2.0
マウント コマンドの最後に を追加して試してみてください。私も同じ問題を抱えていましたが、この方法で解決できました。PS / FYI: 私のコマンドは次のようになります。
//192.168.1.10/public/mount /media/windowsshare cifs credentials=/home/MY_USERNAME/.smbcredentials,iocharset=utf8,sec=ntlm,vers=2.0 0 0
答え2
質問に追加されたマウント出力から、まだ CIFS 1.0 を使用していることがわかります。
サーバーがサポートしている場合は、CIFS 2.1 としてマウントすることをお勧めします。CIFS v2.0 または 2.1 では、プロトコルが接続のスリープ/切断からのより優れた回復をサポートするためです。これを行うには、オプションを使用しますvers=2.1
。
耐久性のあるハンドル(2.02、2.1) - 一時的な切断があった場合に、透過的にサーバーに再接続できるようにします。
また、while ループを追加する代わりにオプションを追加することをお勧めしますecho_interval=60
。その方法では、SMB クライアント コードが 1 分ごとにキープアライブ ビーコンをサーバーに送信するようになります。
@Thillina の回答で警告して訂正したように、オプションはすべて 3 番目のフィールドにあり、カンマで区切られていることに注意してください。
詳細については、CIFS が Windows 共有への接続をランダムに失う
私の投稿で引用している記事を読んでみると:
3.0 - Microsoft Windows 8 および Windows Server 2012 で導入された SMBv3.0 プロトコル。
つまり、Windows Server 2012 を使用している場合は、少なくとも Windows 側で CIFSv3.0 以下がサポートされていることになります。
再ネゴシエートされたかどうか、またどのバージョンで再ネゴシエートされたかを確認するには、ファイル内のオプションを変更してfstab
、次の操作を実行します。
#mount -o remount /media/docs
次に、mount
マウントが実行/ネゴシエートされたバージョンを確認するコマンドを実行します。
答え3
最終的には、接続を維持するために、各cifs
共有のファイルを 3 分ごとに操作する cron ジョブを作成しました。mount
今のところ、株式は通常の入手可能状態に戻っています。
cifs_keepalive:
#!/bin/bash
while read spot; do
touch --no-create "${spot}/.cifs_keepalive"
done <<< "$(mount | awk '/cifs/{ print $3; }')"
/etc/cron.d/cifs_keepalive:
*/3 * * * * root /home/bcait/bca_util/bin/cifs_keepalive >/dev/null 2>&1
クレジット: このアイデアはこのブログ投稿。
答え4
私の場合、切断された他のネットワークインターフェースがありました。それらのインターフェースのDHCPリースの期限切れによりマウントがドロップされました。http://ubuntuforums.org/showthread.php?t=1140094Samba がリロードされます。
私の場合、これらのインターフェースを無効にしました。別の解決策としては、タイムアウトが 0 の autofs が考えられます。