Estoy usando rsync
para hacer una copia de seguridad de mi directorio personal. Esto ha estado funcionando bien durante mucho tiempo ahora. Aquí está el comando que estoy usando:
rsync \
-pavz \
--delete \
--exclude 'mnt/' \
--exclude '.cache/' \
--exclude 'Videos/' \
--exclude 'Music/' \
--exclude 'Documents/virtualbox' \
/home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"
Sin embargo, cambié el servidor al que estoy haciendo una copia de seguridad y ahora se rsync
inicia y ejecuta durante unos segundos (hasta unos minutos), pero luego se detiene con el mensaje de error
packet_write_wait: Connection to x.x.x.x: Broken pipe
rsync: [sender] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [sender=3.1.1]
Como está funcionando en otros servidores, sospecho que el problema es la conexión o el servidor en sí. La conexión parece ser estable. Estoy conectado por cable y no veo interrupciones. También intenté hacer ping al servidor mientras hacía la copia de seguridad. El ping tiene una tasa de respuesta del 100% incluso cuando la copia de seguridad se está rompiendo.
Yo uso kerberos
para autenticar en el servidor remoto.
Intenté varias combinaciones con ServerAliveInterval
, ServerAliveCountMax
o ClientAliveInterval
en mi ~/.ssh/config
, pero fue en vano.
Podría ser que hay algo ejecutándose en el servidor que mata el rsync
comando por alguna razón, pero no sé cómo investigar al respecto. ¿Algunas ideas?
fuente
kerberos
para autenticar en el servidor remoto.Respuestas:
Su problema podría ser (falta de) memoria. Cuando 1GB era grande para un servidor, rsync me fallaba para grandes conjuntos de datos. Quizás el algoritmo ha mejorado de las capacidades de memoria ha aumentado, pero no he visto ese problema en 8 años más o menos. Así que realmente, esta es una toma externa, pero vale la pena explorarla. Pruebe conjuntos de datos más pequeños primero. También puede intentar, como un formulario de verificación de cordura, hacer un tar-tar:
Si eso también falla después de unos minutos, no es memoria.
fuente
Me he encontrado con esto
rsync
en el pasado también. La solución que lo arregló para mí fue ejecutarlo desde unascreen
sesión, lo que ayudó a mantener la conexión con el servidor remoto.Puede verificar el estado ejecutando
screen -x rsync
(o lo que sea que decida nombrar la sesión si le da un nombre, que no es obligatorio). Esto volverá a adjuntar su shell actual a esa sesión. Solo recuerde desconectarse nuevamente después de haber verificado el estado para que siga ejecutándose en segundo plano.También puede ejecutar el comando para ejecutar
screen
en segundo plano de una sola vez haciendo [alguien puede corregirme si estoy equivocado]screen -dm 'command'
. Es posible que deseeman screen
antes de intentar ese último.EDITAR:
Estoy editando mi respuesta porque has confirmado que
screen
no proporciona asistencia en este escenario, pero respondiste a mi comentario sugiriendo intentarscp
ver qué tipo de resultados obtienes, a lo que respondiste que, curiosamente, funcionó bien.Entonces mi nueva respuesta es esta: use
scp
- ossh
(contar
) - en lugar dersync
Por supuesto,
scp
no soporta la gran cantidad de características comorsync
, pero que en realidad se sorprendería al descubrir cómo muchas características que hace de soporte que son casi idénticas a la dersync
.Escenarios del mundo real
scp
y otras alternativas pararsync
:Hace un tiempo, tuve la tarea de crear un script de shell que extrajera registros de nuestros servidores de producción y los almacenara localmente en un servidor web para que los desarrolladores pudieran acceder a ellos con el fin de solucionar problemas. Después de intentar sin éxito que el equipo de Unix se instale
rsync
en nuestros servidores, se me ocurrió una solución alternativascp
que funcionó igual de bien.Dicho esto, recientemente modifiqué el script para que todo lo que usa sea
ssh
ytar
-GNU tar
/gtar
, para ser exactos. GNU estar
compatible con muchas de las opciones que realmente encontrarársync
, tales como--include
,--exclude
preservación de permisos / atributos, compresión, etc.La forma en que ahora lo logro es mediante
ssh
el uso del servidor remoto (a través de pubkey auth) y el usogtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
: esto escribe toda la información enstdout
, que luego se canaliza [localmente] paratar -xzf
que no se realicen cambios en el servidor de producción remoto , y todos los archivos extraídos tal cual al servidor local. Es una gran alternativa pararsync
en este caso. Lo único importante,tar
ni elscp
soporte son las copias de seguridad incrementales y el nivel de verificación de errores a nivel de bloque quersync
características.El comando completo al que me refiero cuando uso
ssh
ytar
sería algo como esto (remoto es Solaris 10; local es Debian, por lo que vale):En su caso, sería todo lo contrario:
tar -cf -
localmente y canalizar a través de un servidor remotossh user@remotehost "tar -xf -"
: hay otra respuesta que hace referencia a este tipo de comportamiento pero que no entra en tantos detalles.Hay algunas otras opciones que he incluido para acelerar las cosas. He cronometrado todo sin descanso para que el tiempo de ejecución sea lo más bajo posible. Pensaría que usar la compresión con
tar
sería inútil, pero en realidad acelera un poco las cosas, al igual que usar el-C
indicador conssh
para habilitar lassh
compresión también. Puedo actualizar esta publicación en una fecha posterior para incluir el comando exacto que uso (que es muy similar a lo que publiqué), pero no tengo ganas de entrar en VPN en este momento ya que estoy de vacaciones esta semana.En Solaris 10, también lo uso
-c blowfish
, porque es el cifrado más rápido para autenticar y también ayuda a acelerar las cosas un poco, pero nuestro Solaris 11 no lo admite o tiene esta suite de cifrado desactivada.Además, si elige ir con la opción
ssh
/tar
, en realidad sería una buena idea implementar mi solución original de usarscreen
si está haciendo una copia de seguridad que llevará un tiempo. De lo contrario, asegúrese de que la configuración de keepalive / timeout en sussh_config
esté ajustada a la perfección, o este método también puede causar una tubería rota.Incluso si sigue adelante
scp
, siempre me parece una práctica recomendada para usarscreen
otmux
cuando se realiza una operación de este tipo, por si acaso . Muchas veces no sigo mis propios consejos y no lo hago, pero de hecho es una buena práctica usar una de estas herramientas para garantizar que el trabajo remoto no se arruine debido a que su sesión de shell activa se desconecta de alguna manera.Sé que quieres descubrir la causa raíz de tu
rsync
problema. Sin embargo, si esto es realmente importante, estas son dos grandes soluciones con las que puede experimentar mientras tanto.fuente
screen
, el resultado es el mismo.Estaba teniendo el mismo problema en OSX El Capitan y lo solucioné actualizando a rsync v3.11. El problema me estaba sucediendo en v2.6.9.
fuente
rsync 3.1.1
.Kerberos es solo para autenticación, eso no debería causar ningún problema después de haber creado una conexión exitosa.
¿Has intentado usar el demonio rsync también?
¿Están sus servidores en la misma red o tiene un firewall / enrutador entre ellos?
Puede intentar configurar una sesión de netcat entre los servidores, esa es una manera simple de intentarlo si tiene algún problema de conexión entre sus servidores.
En el primer servidor:
Y en el cliente
Puede dejar la conexión abierta y ver si la conexión la mantiene o si la pierde. También puede intentar escribir algo en el cliente, ver que termina en el otro lado.
fuente
netcat
en cualquier puerto> 1024 sin necesidad de privilegios de rootTiene algo en el servidor remoto que escribe en stdout . Esto podría estar en su
.profile
o.bash_profile
. Podría ser algo menos obvio comostty
omesg
. En caso de duda, copie una transcripción en su pregunta de iniciar sesión en el servidor (redacte el nombre de host por todos los medios).fuente
.profile
o.bash_profile
para su revisión. Estás buscando cosas comomesg
ostty
mesg
, ostty
en cualquiera de mis dotfiles.la única vez que tuve un problema como este con rsync, lo rastreé hasta un puerto ethernet de repuesto en otra máquina que tenía la misma dirección IP que mi servidor de destino. Si rsync es escamoso, es casi seguro que es un problema de confiabilidad de red o (en mi caso) de configuración.
fuente
Encontré un problema similar al ejecutar
rsync
o manualmente (ya sea concp
,scp
o en Gnome Nautilus) copiar grandes archivos de un escritorio Linux a un NAS Linux basado en ARM de baja potencia a través de una red cableada gigabit (nokerberos
en mi configuración). Las unidades NAS se comparten usandosamba
, y se montan en el cliente usandocifs
. La solución para mí fue montar el sistema de archivos NAS desde el cliente sin almacenamiento en caché (consulte también las páginas de manual de mount.cifs ):Alternativamente, cuando se monta la unidad NAS en el cliente utilizando
gvfs
ennautilus
este problema no persistiría al copiar archivos de gran tamaño (pero que no funciona en combinación conrsync
embargo).Hacer que Linux escriba en el sistema de archivos de la red simultáneamente con las lecturas de disco local explica en detalle por qué podría estar ocurriendo este problema.
fuente
Simplemente actualice sus versiones de rsync para asegurarse de que sean exactamente iguales en las PC de envío y de recepción. Vea mi respuesta aquí: /server/883487/unable-to-rsync-due-to-broken-pipe/988794#988794 .
fuente