rsync -vvv fica preso no OS X sem explicação clara

2

De repente (não tenho certeza quando o problema começou) meus comandos rsync contra uma determinada máquina ficam presos:

$ (dd bs=1024 count=1024 </dev/urandom >/tmp/temp_file && rsync -arvvv --progress /tmp/temp_file -e ssh hostname.sldc.company.net:/tmp/)
1024+0 records in
1024+0 records out
1048576 bytes transferred in 0.087832 secs (11938431 bytes/sec)
opening connection using: ssh hostname.sldc.company.net rsync --server -vvvlogDtpre.iLsfx . /tmp/  (7 args)

Eu tenho o mesmo problema exato sem -e ssh retornando o mesmo erro exato (incluindo o ssh bit, o que eu não esperaria)

$ (dd bs=1024 count=1024 </dev/urandom >/tmp/temp_file && rsync -arvvv --progress /tmp/temp_file analytics04.sldc.dataxu.net:/tmp/)
1024+0 records in
1024+0 records out
1048576 bytes transferred in 0.086265 secs (12155310 bytes/sec)
opening connection using: ssh hostname.sldc.company.net rsync --server -vvvlogDtpre.iLsfx . /tmp/  (7 args)

Observação : mais ninguém na minha empresa tem esse problema, e eu não tenho esse problema com qualquer outra máquina ou com esta máquina e um nome de usuário diferente. Eu também posso ssh na máquina sem problema.

O que posso fazer para diagnosticar o problema?

Plataforma e versões:

Isso tudo está no OS X Yosemite com:

$ uname -a
Darwin my_machine.net 14.3.0 Darwin Kernel Version 14.3.0: Mon Mar 23 11:59:05 PDT 2015; root:xnu-2782.20.48~5/RELEASE_X86_64 x86_64

e:

$ rsync --version
rsync  version 3.1.1  protocol version 31
Copyright (C) 1996-2014 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, no prealloc, file-flags

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

que eu instalei com brew . Eu também tive o mesmo problema com a versão do rsync que vem com o OS X:

$ rsync --version
rsync  version 2.6.9  protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.
<http://rsync.samba.org/>
Capabilities: 64-bit files, socketpairs, hard links, symlinks, batchfiles,
              inplace, IPv6, 64-bit system inums, 64-bit internal inums

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

DTracing do comando:

Esta essência mostra a primeira parte do que eu recebo executando o seguinte comando:

sudo dtruss rsync -arvvv temp_file [email protected]:/tmp/

em seguida, imediatamente após a última linha no Gist acima, me perguntam minha senha:

[email protected]'s password:
select(0x6, 0x7FFF50052860, 0x0, 0x7FFF500527E0, 0x7FFF500528F8)                 = 0 0
select(0x6, 0x7FFF50052860, 0x0, 0x7FFF500527E0, 0x7FFF500528F8)                 = 0 0
select(0x6, 0x7FFF50052860, 0x0, 0x7FFF500527E0, 0x7FFF500528F8)                 = 0 0
select(0x6, 0x7FFF50052860, 0x0, 0x7FFF500527E0, 0x7FFF500528F8)                 = 0 0

(a cada 60 segundos ou mais, uma nova linha idêntica à última acima de uma é impressa)

    
por Amelio Vazquez-Reina 04.06.2015 / 01:27

1 resposta

1

Se você acha que o problema pode ser uma conexão ociosa sendo fechada, talvez seja possível contornar o problema usando uma opção --timeout (rsyncs mais recentes enviam mensagens keep-alive durante as treliças). Você também pode configurar o ssh para enviar mensagens keep-alive ao usar o Protocolo 2 (procure KeepAlive, ServerAliveInterval, ClientAliveInterval, ServerAliveCountMax e ClientAliveCountMax). Você também pode evitar algumas calmarias mudando de --delete (aka --delete-before) para --del (aka --delete-during).

Se você não conseguir descobrir por que a falha ocorreu, há etapas que você pode seguir para depurar a situação. Uma maneira é criar um script de shell no sistema remoto como este:

#!/bin/sh

ulimit -c unlimited

# Some systems have "truss" or "tusc" instead of "strace".
# The -f option tells strace to follow children too.
# The -t option asks for timestamps.
# The -s 1024 option increases the string decoding limit per function call.
# The -o option tells strace where to send its output.
strace -f -t -s 1024 -o /tmp/rsync-$$.out rsync "${@}"

Você usaria o script assim:

rsync -av --rsync-path=/some/path/rsync-debug HOST:SOURCE DEST
rsync -av --rsync-path=/some/path/rsync-debug SOURCE HOST:DEST

Este script habilita os core dumps e também registra todas as chamadas do sistema operacional que levam à falha em um arquivo no diretório / tmp. Você pode usar os arquivos resultantes para ajudar a descobrir por que o rsync remoto falhou.

    
por 04.06.2015 / 05:08

Tags