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)
これには、ランサムウェア攻撃を防ぐためにWindowsUpdateによって提供されるパッチに関連するものがあると思います。共有フォルダーを保持するサーバーをシームし、CIFSV1要求を拒否します。デフォルトでは、マウントはCIFSV1を使用します。マウントコマンドの最後に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
質問に追加されたマウント出力から、まだCIFS1.0を使用していることがわかります。
サーバーがサポートしている場合は、マウントをCIFS 2.1としてマウントすることをお勧めします。CIFSv2.0または2.1からは、プロトコルが接続のスリープ/カットからのより良い回復をサポートするためです。そのためのオプションはvers=2.1
。
耐久性のあるハンドル(2.02、2.1)–一時的な切断が発生した場合にサーバーに透過的に再接続できるようにする
オプションを追加することもお勧めしますecho_interval=60
whileループを追加する代わりに、SMBクライアントコードは、毎分キープアライブビーコンをサーバーに送信します。
@Thillinaの回答で警告および修正したように、オプションはすべてコンマで区切られた3番目のフィールドにあることに注意してください。
詳細については、 CIFSがWindows共有への接続をランダムに失うことを参照してください
私が私の投稿で引用している記事を読む:
3.0-Microsoft Windows8およびWindowsServer2012で導入されたSMBv3.0プロトコル。
つまり、Windowsサーバー2012を使用しているということは、少なくともWindows側がCIFSv3.0以下をサポートしているということです。
再ネゴシエーションされたかどうか、およびどのバージョンで再ネゴシエートされたかを確認するには、fstab
ファイルのオプションを変更し、次の手順を実行します。
#mount -o remount /media/docs
次に、mount
コマンドを実行して、マウントが行われた/ネゴシエートされたバージョンを確認します。
私の場合、切断された他のネットワークインターフェイスがありました。これらのインターフェースのDHCPリースの有効期限により、マウントがドロップしました http://ubuntuforums.org/showthread.php?t=1140094 Sambaのリロードによると。
私の場合、これらのインターフェイスを無効にしました。別の可能な解決策は、タイムアウトが0のautofsです。
結局、接続を維持するために、3分ごとにcifs
の各mount
共有上のファイルにアクセスするcronジョブが発生しました。
これまでのところ、シェアは通常の可用性に戻っています。
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
クレジット:私は このブログ投稿 からアイデアを得ました。