Linux sambaサーバー:戻りコード= -12でcifs_mountが失敗しました


16

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

私はすでにこの問題を解決しましたが、これらのエラーコードを追い詰めるのは非常に悪夢でした。

症状:特定のcifsクライアントからlinux sambaサーバーへの予期しない断続的なマウント障害。ログイン時のすべてのLinuxクライアントpam_mountユーザーホーム。ランダムに、そして散発的に、ホームディレクトリのマウントが1台のマシンで失敗し始めました。ログインとマウントは、他のすべてのクライアントで問題なく動作し続けました。当初、壊れたクライアントでの異常な量のアクティビティが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)

<debug enable="1"/>/etc/security/pam_mount.conf.xmlで設定して、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

'エコー1> / procの/ FS / CIFS / cifsFYI' クランクアップmount.cifsデバッグ(への/ var /ログ/デバッグ書き込み)。良い部分はここにあります(見慣れていますか?):

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 guys)。広範なインターネット検索により、これは一般的なエラーコードであることが明らかになり、情報価値がないことも確認されました。

サーバーをチェックする時間です!log level = 3/etc/samba/smb.confでsmbdを設定します(Using 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 -l2048を返しました。とても目立つ。

実際の出力調べてsmbstatus -S明らかにした何千人も「IPC $」のエントリを。IPC $のSambaドキュメントは、匿名共有ブラウジングと「その他のリソース」へのアクセスに関与していることを明らかにしています。/etc/samba/smb.confのサーバーでホスト拒否を設定します。

[IPC$]
hosts deny = 0.0.0.0/0

うまく動作します。OK、うまくいけばここの何かが将来のある貧しい人の魂を助ける。

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


「ランダムに、そして散発的に」、「断続的な障害」およびメモリ割り当てエラー- (物理的な)メモリエラーをチェックしましたか?
-ckujau

1
IPC $共有は、実際には(MSFTの世界では)リモートプロシージャコール(RPC)インターフェイスであるため、常にユーザーごとのコンテキストでアクセスされます。つまり、IPC $共有は、ユーザーにサーバーサービスへの認証チャネルを提供し、RPC呼び出しを行えるようにします。必要のない場合は無効にすることをお勧めします(そして、だれもそうしないと信じるのに苦労しています)。
-AlwaysLearning

Sambaのトラブルシューティングの詳細な例をありがとう。抽象的なエラーメッセージは悪夢です。
mmv-ru

回答:


1

これは古いものですが、未解決であり、IPC $とSambaを検討していたことを考慮して、ドキュメントのために試してみます。

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

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

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

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

クライアント側から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は接続の数です。

ソース:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.