Server: RHEL 5.9 / smbd 3.0.33 - Klien: beragam, meskipun semuanya menggunakan mount.cifs saat ini (5.2)
Saya sudah memecahkan masalah ini, tetapi merupakan mimpi buruk untuk memburu kode kesalahan ini, saya merasa perlu mendokumentasikan secara universal.
Gejala : Kegagalan pemasangan terputus-putus yang tidak dapat diprediksi dari satu klien cifs tertentu ke server samba linux. Semua klien linux saya pam_mount rumah pengguna saat masuk. Secara acak, dan secara sporadis pemasangan dir home mulai gagal pada satu mesin. Login dan mount terus bekerja dengan sempurna pada semua klien lain. Awalnya saya pikir sejumlah aktivitas yang tidak biasa pada klien yang rusak menyebabkan smbd menjadi aneh, tetapi kegagalan yang terputus-putus tetap ada bahkan setelah penggunaannya mereda.
Upaya untuk memasang dengan tangan gagal dan melaporkan:
Errors from underlying mount program
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Set <debug enable="1"/>
di /etc/security/pam_mount.conf.xml untuk mendapatkan info lebih lanjut dari 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 juga melaporkan acara ini:
kernel: [4316790.256149] CIFS VFS: cifs_mount failed w/return code = -12
'echo 1> / proc / fs / cifs / cifsFYI' engkol up mount.cifs debug (menulis ke / var / log / debug). Inilah bagian yang baik (terlihat familier?):
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
Pada titik ini sebenarnya tidak ada informasi lain yang tersedia di sisi klien. permintaan mount cifs padam dan klien segera mati. kesalahan mount.cifs (12) cukup tidak informatif (halaman manual tidak membantu, thx guys). Pencarian di internet yang luas mengungkapkan bahwa ini adalah kode kesalahan yang umum, juga menegaskannya sebagai tidak informatif.
Saatnya memeriksa server! Ditetapkan log level = 3
untuk smbd di /etc/samba/smb.conf (dari buku Using Samba: "Level di atas 3 adalah untuk digunakan oleh pengembang dan membuang informasi cryptic dalam jumlah besar." Lol!). Inilah garis yang relevan:
[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
Hampir di sana ... dari arsip milis seseorang saya menemukan seseorang yang melaporkan semacam masalah yang sama, diidentifikasi sebagai batas saham yang dipatok pada koneksi seseorang. Daftar saham terbuka di server:
smbstatus -S | grep <serverIP> | wc -l
dikembalikan 2048 . Sangat mencolok.
Sebenarnya memeriksa output dari ribuan entri smbstatus -S
terungkap untuk 'IPC $'. Samba docs pada IPC $ mengungkapkan bahwa ia terlibat dengan penjelajahan berbagi anonim dan akses ke "beberapa sumber daya lain". Saya menetapkan host deny pada server di /etc/samba/smb.conf:
[IPC$]
hosts deny = 0.0.0.0/0
Bagus sekali sekarang. Oke, semoga sesuatu di sini membantu beberapa jiwa miskin di masa depan.
Saya kira dengan semangat situs saya akan mengajukan pertanyaan: Mengapa smbd tidak membersihkan saham IPC $? Mengapa membangun satu IPC $ per koneksi pengguna ke sebuah share daripada satu per koneksi klien? Bisakah Anda menonaktifkan kreasi IPC $ share dari sisi klien? Apakah ada cara untuk meningkatkan koneksi # max per saham (bukan berarti ini akan membantu dalam kasus ini)? Saya tidak melihatnya di dokumen.