web-dev-qa-db-ja.com

CIFSがWindows共有への接続をランダムに失う

私はWindows共有で、Debian Jessieからリモートでマウントされたいくつかのディレクトリを数か月間持っていました。

この数週間、私はマウントポイントからのランダムな切断の不満を抱え続けており、

_Sudo mount -a
_

マウント接続を回復するには、数回(サーバーは週に1〜2回使用されます)。

例えばマウントは、使用されずに一定期間経過しても回復しないことがよくあります。

Windows管理者は、Windowsサーバーがしばらく再起動されていないことも教えてくれました。

今日、偶然にも_mount -a_を再度実行すると、2回目の試行でのみ機能しましたが、1回目の試行では次のエラーが発生しました。

_Sudo mount -a
mount error(104): Connection reset by peer
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
_

ディレクトリは、次のように_/etc/fstab_からマウントされます。

_//10.2.1.2/XX/ZZ/YY /mnt/mount_point cifs credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0770,dir_mode=0770,uid=1001,gid=1001 0 0_

マウントコマンドを実行すると、オプション_echo_interval_がデフォルトで60分にアクティブになることも確認できます。

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=1.0,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

何をすべきか?

7
Rui F Ribeiro

私はここで興味深い関連する投稿を見つけました cifsマウントされたフォルダーが切断され続ける(ubuntuサーバー) 、同様の問題(同じエラー、Samba共有)について話します。

残りの回答に従うための、ここでの関連情報は、CIFSマウントがmountcommandを発行し、_vers=1.0_フィールドに注意して確認できるように、デフォルトでSMBv1.0プロトコルを使用することです。

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=1.0,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

Stack Overflowの投稿 Mount CIFS Host is down も見つかりました

これは、プロトコルの不一致が原因である可能性もあります。 2017年、MicrosoftはWindowsサーバーにパッチを適用し、SMB1プロトコルを無効にするようアドバイスしました。

今後、mount.cifsでプロトコルネゴシエーションに問題が発生する可能性があります。

表示されるエラーは「ホストがダウンしています」です。しかし、次のようにデバッグする場合:

_smbclient -L <server_ip> -U <username> -d 256
_

エラーが発生します:

_protocol negotiation failed: NT_STATUS_CONNECTION_RESET
_

この記事では、プロトコル/ WannacryなどへのWindowsのパッチが混乱している、またはより正確に混乱していると述べ、v1 CIFS要求機能を無効にした人もいます。 Windowsの前面でも同様の問題が発生しており、タイミングを考えると、問題が関連しているのではないかと思われます。

この特定のサーバーAFAIKでv1 CIFSを無効にしていません(ただし、テストでこれを確認しています)。ただし、MSの掲示では、デフォルトのSMBv1の動作が(わずかに)変更されていることを示しています。

私は、言及されたSambaの質問で提案された一般的なアイデアに従ってしまいました。 From man _mounts.cifs_

_vers=_

    SMBプロトコルバージョン。許可される値は次のとおりです。
    • 1.0-従来のCIFS/SMBv1プロトコル。これがデフォルトです。

    • 2.0-SMBv2.002プロトコル。これは、Windows Vista Service Pack 1とWindows Server 2008で最初に導入されました。WindowsVistaの初期リリースバージョンは、サポートされていないわずかに異なる方言(2.000)を話しました。

    • 2.1-Microsoft Windows 7およびWindows Server 2008R2で導入されたSMBv2.1プロトコル。

    • 3.0-Microsoft Windows 8およびWindows Server 2012で導入されたSMBv3.0プロトコル。

    また、このオプションは使用するプロトコルのバージョンを管理しますが、各バージョンのすべての機能を使用できるわけではないことに注意してください。

_--verbose_

    マウントに関する追加のデバッグ情報を出力します。このパラメーターは_-o_の前に指定する必要があることに注意してください。例えば:
    _ mount -t cifs //server/share /mnt --verbose -o user=username
    _

マニュアルに記載されているように、Windows 8以降の最近のWindowsバージョンでは、少なくとも_vers=2.0_を使用する方が理にかなっています。上記の_--verbose_オプションを使用したコマンドラインの代替構文も、発生する可能性のある複雑さをさらにデバッグするのに役立ちます。

そのため、この質問の対象となっているWindowsサーバーはWindowsサーバー2008 R2なので、_/etc/fstab_を入力します。

_//10.2.1.2/XX/ZZ/YY /mnt/mount_point cifs credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0770,dir_mode=0770,uid=1001,gid=1001,vers=2.1 0 0_

次に、オプションを有効にするために再マウントします。

_Sudo mount -o remount /mnt/mount_point
_

ネゴシエートされたプロトコルを確認するために、再度mountを使用して確認します。

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=2.1,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

そして、実際にSMB使用されているプロトコルが正常に変更されたことを確認できます。

参照 MS Developer Network-[MS-SMB2]:バージョニングと機能ネゴシエーション-1.7バージョニングと機能ネゴシエーション

また、CIFS v1.0は廃止されているだけでなく、新しいバージョンのプロトコルに比べて非常に非効率的で安全ではありません。

から MSブログ-SMB1の使用を停止

SMB1は現代的でも効率的でもありません
SMB1を使用すると、エンドユーザーの主要なパフォーマンスと生産性の最適化が失われます。

  • 大規模な読み取りと書き込み(2.02+)–より高速なネットワークまたは待ち時間の長いWANのより効率的な使用。大きなMTUのサポート。
  • フォルダーとファイルのプロパティのピアキャッシング(2.02+)–クライアントはBranchCacheを介してフォルダーとファイルのローカルコピーを保持します
  • 耐久性のあるハンドル(2.02、2.1)–一時的な切断があった場合に、サーバーに透過的に再接続するための接続を可能にします
  • クライアントoplockリースモデル(2.02+)–クライアントとサーバー間で転送されるデータを制限し、高遅延ネットワークのパフォーマンスを向上させ、SMBサーバーのスケーラビリティを向上させます。
  • マルチチャネル&SMB Direct(3.0+)–クライアントとサーバー間で複数のパスが利用可能な場合のネットワーク帯域幅とフォールトトレランスの集約、およびRDMAインフラストラクチャ全体での最新の超高使用
  • Directory Leasing(3.0+)–キャッシングによりブランチオフィスでのアプリケーションの応答時間を改善

興味深いことに、この最後の記事では、プロトコル(= 2.01)を使用している場合、切断(Durableハンドル)後に切断の問題が発生する可能性が低いことを示唆しているため、CIFS v1.0の使用を継続しないようにもう一度強調します。 (たとえば、1.0の場合、_echo_interval=60_は接続を維持しますが、ネットワークの不具合や他のサーバーの中断がある場合、CIFS v1.0を使用している間、マウントは手動の介入なしにそれ自体を回復しません)

最後のアドバイスとして、_Sudo mount -a_の実行を避け、実行を開始します。

_Sudo mount -o remount -a
_

私の質問も参照してください CIFSが同じマウントポイントに同じ共有の複数のコピーをマウント

12
Rui F Ribeiro