Estoy usando rsyncpara 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 rsyncinicia 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 kerberospara autenticar en el servidor remoto.
Intenté varias combinaciones con ServerAliveInterval, ServerAliveCountMaxo ClientAliveIntervalen mi ~/.ssh/config, pero fue en vano.
Podría ser que hay algo ejecutándose en el servidor que mata el rsynccomando por alguna razón, pero no sé cómo investigar al respecto. ¿Algunas ideas?
fuente

kerberospara 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
rsyncen el pasado también. La solución que lo arregló para mí fue ejecutarlo desde unascreensesió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
screenen segundo plano de una sola vez haciendo [alguien puede corregirme si estoy equivocado]screen -dm 'command'. Es posible que deseeman screenantes de intentar ese último.EDITAR:
Estoy editando mi respuesta porque has confirmado que
screenno proporciona asistencia en este escenario, pero respondiste a mi comentario sugiriendo intentarscpver 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 dersyncPor supuesto,
scpno 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
scpy 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
rsyncen nuestros servidores, se me ocurrió una solución alternativascpque funcionó igual de bien.Dicho esto, recientemente modifiqué el script para que todo lo que usa sea
sshytar-GNU tar/gtar, para ser exactos. GNU estarcompatible con muchas de las opciones que realmente encontrarársync, tales como--include,--excludepreservación de permisos / atributos, compresión, etc.La forma en que ahora lo logro es mediante
sshel 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 -xzfque 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 pararsyncen este caso. Lo único importante,tarni elscpsoporte son las copias de seguridad incrementales y el nivel de verificación de errores a nivel de bloque quersynccaracterísticas.El comando completo al que me refiero cuando uso
sshytarserí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
tarsería inútil, pero en realidad acelera un poco las cosas, al igual que usar el-Cindicador consshpara habilitar lasshcompresió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 usarscreensi 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_configesté 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 usarscreenotmuxcuando 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
rsyncproblema. 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
netcaten cualquier puerto> 1024 sin necesidad de privilegios de rootTiene algo en el servidor remoto que escribe en stdout . Esto podría estar en su
.profileo.bash_profile. Podría ser algo menos obvio comosttyomesg. 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
.profileo.bash_profilepara su revisión. Estás buscando cosas comomesgosttymesg, osttyen 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
rsynco manualmente (ya sea concp,scpo 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 (nokerberosen 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
gvfsennautiluseste problema no persistiría al copiar archivos de gran tamaño (pero que no funciona en combinación conrsyncembargo).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