Aquí tengo un servidor Samba (Debian 5.0) que está configurado para alojar perfiles de Windows XP.
Los clientes se conectan a este servidor y trabajan en sus perfiles directamente en el recurso compartido de samba (el perfil no se copia localmente).
De vez en cuando, un cliente puede no cerrarse correctamente y, por lo tanto, Windows no libera los bloqueos de archivos. Cuando miramos la tabla de bloqueo de samba, podemos ver que muchos archivos aún están bloqueados aunque el cliente ya no esté conectado. En nuestro caso, esto parece ocurrir con los archivos de bloqueo creados por Mozilla Thunderbird y Firefox. Aquí hay un ejemplo de la tabla de bloqueo de samba:
# smbstatus -L | grep DENY_ALL | head -n5
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
--------------------------------------------------------------------------------------------------
15494 10345 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user1 app.profile/user1.thunderbird/parent.lock Mon Nov 22 07:12:45 2010
18040 10454 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user2 app.profile/user2.thunderbird/parent.lock Mon Nov 22 11:20:45 2010
26466 10056 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user3 app.profile/user3.firefox/parent.lock Mon Nov 22 08:48:23 2010
Podemos ver que Windows abrió los archivos e impuso un bloqueo DENY_ALL.
Ahora, cuando un cliente se vuelve a conectar a este recurso compartido e intenta abrir esos archivos, samba dice que están bloqueados y niega el acceso.
¿Hay alguna forma de evitar esta situación o me estoy perdiendo algo?
Editar: Nos gustaría no tener que desactivar los bloqueos de archivo en el servidor Samba, porque no son buenas razones para tener los habilitados.
fuente
Mira esto:
y vea si eso solucionará su problema o no.
Desde la
smb.conf
página del manual:Editar :
Acabo de pensar en otra posible solución. Podrías hacer algo así en el recurso compartido en cuestión.
Esto solo evitaría bloqueos en los archivos .lock.
fuente
Algunas personas muy inteligentes en Samba decidieron eliminar esta opción y no hay reemplazo para ella.
Hasta ahora para la compatibilidad con SMB, ya que este es el comportamiento predeterminado de ganar.
A menos que un usuario esté versado en la línea de comandos de Linux y cómo matar archivos / procesos abiertos, debe reiniciar SMBD o el servidor para borrar esto.
Maravillosamente hecho, Samba.org.
fuente
reset on zero vc
opción todavía aparece en el manual y también se muestra entestparm
. Entonces, o está de regreso, o realmente no se había eliminado.Me encontraba con un problema similar, un cliente se bloqueó al copiar un archivo grande y el archivo se bloqueó después del reinicio. Afortunadamente, esto no sucede muy a menudo, pero aún así es bastante molesto tener que matar el proceso de samba.
reset on zero vc
parecía ser solo la solución, pero supuestamente se eliminó de Samba4, aunque la versión 4.7.6 en Fedora (27) todavía la tiene (posiblemente parcheada por RH). De todos modos, no ayudará mucho, como dice la página del manual, que solo funciona con SMB1 (que ya no se debe usar) y no hace nada en las conexiones SMB2 y SMB3, la única forma que queda para manejar esto se menciona en El hilo vinculado por Micheal . No sé la razón detrás de la eliminación y qué tiene de maloreset on zero vc
, Consideraría usar tcp timeout para este propósito más como un hack. De todos modos, algo razonable podría ser, por ejemploEsto eliminará la conexión aproximadamente 40 segundos (30 + 3 * 3) después de la última comunicación, que generalmente es más que suficiente para notar un bloqueo y reiniciar (dado que la pila tcp del servidor es lo suficientemente inteligente como para cerrar la conexión cuando el cliente rechaza sus paquetes keepalive después del reinicio).
Tenga en cuenta que esto aumenta la carga en su red, pero dudo que sea notable incluso con muchos clientes.
fuente
deadtime = 10
o menos lo eliminaría, pero con los bloqueos de archivos persistentes en las conexiones SMB3_11 para siempre, no tiene ningún efecto, ya que el tiempo muerto no se verificará mientras existan bloqueos de archivos para un PID. Extremadamente frustrante.deadtime
no hace nada si sus clientes tienen archivos abiertos, por lo que la pregunta sería qué archivos mantienen abiertos. Pero ese es probablemente un tema completamente diferente al discutido aquí, por lo que debería abrir una nueva pregunta para esto. Misocket options
sugerencia solo ayuda con conexiones que no están cerradas correctamente (porque los clientes se bloquean, una interrupción de la red, etc.), pero probablemente no si sus clientes WX simplemente se conectan al servidor sin ninguna otra acción o utilizando algún tipo de sesión anónima (lo quenobody.nogroup
sugiere )12345 someuser somegroup...
en una entrada, luego 80012345 nobody nogroup ...
entradas, pero solo un puñado de bloqueos de archivos (no 800). Muy raro. Afecta a 3 de mis sitios de clientes ahora.Puede deshabilitar oplocks por acción con lo siguiente:
El tipo de bloqueo predeterminado es Level1. Los bloqueos de nivel 2 se habilitan por acción en el archivo smb.conf. Alternativamente, puede deshabilitar oplocks por archivo dentro del recurso compartido:
Si tiene problemas con los bloqueos opcionales, como se desprende de las entradas de registro de Samba, es posible que desee jugar de forma segura y deshabilitar los bloqueos oplocks y Level2.
Deshabilitar los bloqueos opcionales del núcleo Los bloqueos opcionales del núcleo es un parámetro smb.conf que notifica a Samba (si el núcleo UNIX tiene la capacidad de enviar a un cliente de Windows una interrupción de bloqueo) cuando un proceso UNIX intenta abrir el archivo que está en caché. Este parámetro aborda el intercambio de archivos entre UNIX y Windows con oplocks habilitados en el servidor Samba: el proceso UNIX puede abrir el archivo que está bloqueado (en caché) por el cliente de Windows y el proceso smbd no enviará una interrupción de bloqueo, lo que expone el archivo a El riesgo de corrupción de datos. Si el kernel de UNIX tiene la capacidad de enviar una interrupción de bloqueo, entonces el parámetro oplocks del núcleo permite que Samba envíe la interrupción de bloqueo. Los bloqueos de kernel se habilitan por servidor en el archivo smb.conf.
El valor predeterminado es no.
Fuente
fuente