サーバー: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 $共有の作成を無効にできますか?共有あたりの最大接続数を増やす方法はありますか(この場合、これが役立つとは限りません)?ドキュメントには表示されませんでした。
これは古いですが、答えがなく、IPC $とSambaを調べていたので、ドキュメントのために試してみます。
SmbdがIPC $共有をクリーンアップしないのはなぜですか?
上記の質問へのコメントで述べたように、サービスはリモート管理とサーバー間の通信に使用されます。特にSambaでは、ブラウジングとtcp/ipの目的で使用されます。なんらかの理由で必要になったり、機能しない場合を除き、無効にしても安全です。 [1]
クライアント接続ごとではなく、ユーザー接続ごとに共有へのIPC $を1つ確立するのはなぜですか?
ユーザーが複数のクライアント接続を持つことができるからです。
クライアント側からIPC $共有の作成を無効にできますか?
はいといいえ。 IPC $共有の作成を実際に無効にするわけではありませんが、Windowsクライアントからのアクセスを無効にすることができます。[2]
Windows Vista、Windows 7、Windows 8およびWindows 10の場合、次のレジストリ編集を実行できます。
共有あたりの最大接続数を増やす方法はありますか?ドキュメントには表示されませんでした。
はい[3]。共有の下に入力:
[share]
max connections = ##
ここで、XXは接続数です。
出典: