web-dev-qa-db-ja.com

Linux samba server:cifs_mount failed with w / return code = -12

サーバー:RHEL 5.9/smbd 3.0.33-クライアント:さまざまですが、すべて現在のmount.cifs(5.2)を使用していました

私はすでにこの問題を解決しましたが、これらのエラーコードを突き止めるのは非常に悪夢であり、普遍的な文書化が必要だと感じました。

症状:1つの特定のCIFSクライアントからLinux Sambaサーバーへの予期しない断続的なマウントの失敗。ログイン時のすべてのLinuxクライアントpam_mountユーザーのホーム。ランダムに、そして散発的に、ホームディレクトリのマウントがoneマシンで失敗し始めました。ログインとマウントは、他のすべてのクライアントで問題なく動作し続けました。当初、壊れたクライアントでの異常な量のアクティビティがsmbdの異常を引き起こしていると思っていましたが、使用率が低下した後も断続的な障害が残りました。

手でマウントしようとすると失敗し、次のように報告されます。

_Errors from underlying mount program
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
_

/etc/security/pam_mount.conf.xmlで_<debug enable="1"/>_を設定して、pam_mountから詳細情報を取得します。

_command: 'mount' '-t' 'cifs' '//my_server/watdo' '/home/watdo' '-o' 'user=watdo,uid=666,gid=666'
pam_mount(misc.c:38): set_myuid<pre>: (ruid/rgid=0/0, e=0/0)
pam_mount(misc.c:38): set_myuid<post>: (ruid/rgid=0/0, e=0/0)
pam_mount(mount.c:64): Errors from underlying mount program:
pam_mount(mount.c:68): mount error(12): Cannot allocate memory
pam_mount(mount.c:68): Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)`
_

/var/log/kern.logもこのイベントについて報告しました:

_kernel: [4316790.256149] CIFS VFS: cifs_mount failed w/return code = -12
_

'echo 1>/proc/fs/cifs/cifsFYI'cranksup.mount.cifs debug(/ var/log/debugに書き込みます)。これが良い部分です(見覚えがありますか?):

_CIFS Session Established successfully
For smb_command 117
Sending smb:  total_len 88
cifs_sync_mid_result: cmd=117 mid=54307 state=4
Mapping smb error code 0xc0000205 to POSIX err -12
_

この時点では、クライアント側で利用できる他の情報は文字通りありません。 cifsマウント要求が出て、クライアントはほぼ即座に終了します。 mount.cifs error(12)はかなり情報がありません(manページは役に立ちません、thxの皆さん)。広範なインターネット検索により、これは一般的なエラーコードであることがわかり、情報がないことも確認されます。

サーバーをチェックする時間です! /etc/samba/smb.confのsmbdに_log level = 3_を設定します(「Sambaの使用」の本から:「3以上のレベルは開発者が使用し、膨大な量の暗号情報をダンプします。」笑!)関連する行は次のとおりです。

[2013/02/08 10:18:03, 3] smbd/error.c:error_packet_set(106) error packet at smbd/reply.c(514) cmd=117 (SMBtconX) NT_STATUS_INSUFF_SERVER_RESOURCES

ほとんどそこに...から smbメーリングリストアーカイブ 個々のsmb接続でのペグされた共有制限として識別される、同様の問題を報告している誰かを見つけました。サーバー上の開いている共有を一覧表示します。

_smbstatus -S | grep <serverIP> | wc -l_が返されました2048。非常に目立ちます。

実際に_smbstatus -S_の出力を調べると、「IPC $」のエントリが数千明らかになっています。 Samba docs on IPC $ 匿名共有の閲覧と「その他のリソース」へのアクセスに関与していることを明らかにします。 /etc/samba/smb.confのサーバーでホスト拒否を設定します。

_[IPC$]
hosts deny = 0.0.0.0/0
_

今はうまくいきます。わかりました。うまくいけば、ここで何かが将来のある貧しい魂を助けるでしょう。

私はサイトの精神で私が質問するだろうと思います:なぜsmbdはIPC $共有をクリーンアップしないのですか?クライアント接続ごとではなく、ユーザー接続ごとに共有へのIPC $を1つ確立するのはなぜですか?クライアント側からIPC $共有の作成を無効にできますか?共有あたりの最大接続数を増やす方法はありますか(この場合、これが役立つとは限りません)?ドキュメントには表示されませんでした。

16
zastard

これは古いですが、答えがなく、IPC $とSambaを調べていたので、ドキュメントのために試してみます。

SmbdがIPC $共有をクリーンアップしないのはなぜですか?

上記の質問へのコメントで述べたように、サービスはリモート管理とサーバー間の通信に使用されます。特にSambaでは、ブラウジングとtcp/ipの目的で使用されます。なんらかの理由で必要になったり、機能しない場合を除き、無効にしても安全です。 [1]

クライアント接続ごとではなく、ユーザー接続ごとに共有へのIPC $を1つ確立するのはなぜですか?

ユーザーが複数のクライアント接続を持つことができるからです。

クライアント側からIPC $共有の作成を無効にできますか?

はいといいえ。 IPC $共有の作成を実際に無効にするわけではありませんが、Windowsクライアントからのアクセスを無効にすることができます。[2]

Windows Vista、Windows 7、Windows 8およびWindows 10の場合、次のレジストリ編集を実行できます。

  1. [スタート]ボタンをクリックし、検索ボックスに「regedit」と入力して、検索結果のregedit.exeをクリックします。 [ユーザーアカウント制御]ダイアログボックスが表示されます。
  2. UACプロンプトで「はい」と言うと、レジストリエディターが開きます。
  3. HKEY_LOCAL_MACHINEブランチを開きます。
  4. SYSTEMブランチを開きます。
  5. CurrentControlSetブランチを開きます。
  6. サービスブランチを開きます。
  7. LanmanServerブランチを開きます。
  8. パラメータブランチを選択します。
  9. [編集]、[新規]、[DWORD(32ビット)値]の順に選択します
  10. 「AutoShareWks」と入力し、Enterキーを押します。 (デフォルト値の0のままにします。)
  11. コマンドプロンプト(DOSまたはターミナル)を使用してサービスを再起動または再起動します。「net stop server」、次に「net start server」。

共有あたりの最大接続数を増やす方法はありますか?ドキュメントには表示されませんでした。

はい[3]。共有の下に入力:

[share]
   max connections = ##

ここで、XXは接続数です。

出典:

1
Leo