会社でVMware上のCentOS 7で先月、久しぶりに再起動かけてからマウントしているCIFSがらみのエラーでプロセスが止まることがあります。/etc/fstabに以下のように記述してWindows Server 2008R2の共有をマウントして使っていますがアクセスのたびに止まることはなく、しばらく後のアクセスで恐らく再接続においてたまに発生する現象です。
//winsrv/files /mnt/files cifs username=user,password=pass,domain=dom,iocharset=utf8,defaults 0 0
止まるときは該当のファイルシステムに/bin/lsなどを実行すると、そのまま応答がなくなり5分以上たってマウントが復帰してようやくlsの結果が表示されます。システム全体は止まらずlsのプロセスだけがハングしている感じですね。/bin/dfコマンドでも同様です。その時のログとしては、
Jun 13 10:24:42 srv kernel: CIFS VFS: Server winsrv has not responded in 120 seconds. Reconnecting...
や
Jun 15 13:37:01 srv kernel: INFO: task df:2572 blocked for more than 120 seconds.
のように記録されていました。
上記ログで検索すると以下のRed Hat Knowledgebaseがヒットするのですが会員でないので見られません。そのものずばりの解決方法が載っていそうなのですが残念です。
https://access.redhat.com/ja/node/1555533
https://access.redhat.com/solutions/443473
Windows Serverの名前を/etc/hostsに追加したり、CIFSのマウント方法がマズイのかもとこちらの記述を参考にsystemedのautomount機能を使うようにfstabの内容で以下のようにnoauto,x-systemd.automountを追加してみましたが問題は解決しませんでした。
//winsrv/files /mnt/files cifs username=user,password=pass, domain=dom,iocharset=utf8,noauto,x-systemd.automount 0 0
ちなみにこのsystemedのautomountはautofsパッケージとは無関係でautofsをインストールしてなくても動作します。
プロセスが数分間停止しているだけで他には影響ないと思っていたのですが、先日、再起動かけたときにこのCIFSのumountが原因で、再起動に15分以上かかってしまいました。いつもなら1、2分で完了するのですが。これは困った何か解決方法はと、さらに検索して昔の話題ではなく最近の問題で絞ってみるとこちらのページに行き当たりました。
要約するとLinux側の問題ではなく4月にあったWindowsのパッチが原因ではないか。CIFSのマウントオプションでvers=3.0と指定して解決した。versの種類はこちらのページを参照のこと。
ということみたいです。さっそくうちのCentOS 7で相手がWindows Server 2008R2なのでvers=2.1を以下のように追加。
//winsrv/files /mnt/files cifs vers=2.1,username=user,password=pass, domain=dom,iocharset=utf8,noauto,x-systemd.automount 0 0
しばらく様子を見ましたが大丈夫そうです。たまにhas not responded in 120 secondsが記録されますが、遅くなっているようではないですし。versオプションの詳細についてはこちらのページが詳しいです。versなしのデフォルトだと1.0で接続とのこと。
今回の教訓は、オープンソースを扱っているRed Hatの秘密主義はそれが収入源だから仕方ないとしても、オープンソース界隈にとってどうなのかというところですかね。
6/20 追記
上記対策で収まっていたように見えたのですが、今日になって再発しました。上記オプションは効果なかったみたいです。
どうもCentOSの5月末にあったアップデートが原因みたいです。これは次のアップデート待ちですかね。とりあえずcrontabに
*/10 * * * * /usr/bin/ls /mnt/files
と10分毎にCIFSにアクセスするようにしてしのごうと思います。
9/25 追記
この問題ですが、9月21日頃更新されたsambaの4.6.2-11.el7_4で解決したことを確認しました。