Options (--partial, --partial-dir) no rsync não funcionam como eu esperaria

6

Eu tenho tentado descobrir como retomar transferências parciais em rsync (no Windows, usando cygwin ) sem usar a opção --inplace .

Vejo que o rsync cria arquivos "parciais" no diretório de destino com nomes como . [nome do arquivo] .2dxZ1a e, no meu entender, se eu usei a opção --partial , rsync veria um arquivo como este e retomaria a transferência para este arquivo. Mas, estou achando que, se eu usar a opção --partial e o processo rsync terminar, quando eu reiniciar o comando rsync, os arquivos parciais serão excluídos. Talvez essa opção funcione em uma breve interrupção de transferência, mas não quando o processo termina e recomeça.

Além desta opção, eu realmente gostei da opção --partial-dir , esperando que se eu especificasse --partial-dir=".rsync" (com ou sem as aspas ao redor), o rsync criaria o diretório .rsync em o diretório de destino e transferir os arquivos para [dir] /. rsync , movendo-os para [dir] quando a transferência terminar (e excluindo [dir] /. rsync uma vez que já não é necessário). Mas, parece que o rsync está ignorando completamente essa opção e apenas criando seus arquivos temporários no diretório de destino como normal (e excluindo-os na reinicialização).

Então, estou pensando: estou fazendo algo errado ou simplesmente não entendi essas opções corretamente?

Meu comando é: rsync -rt --log-file="rsync.log" --partial-dir=".rsync" --del rsync://rsync-server:port/module/ /cygdrive/local/path/

    
por palswim 20.08.2010 / 21:35

2 respostas

7

Eu estava lançando este comando do Agendador de Tarefas do Windows. Quando peguei o comando e o executei a partir de um console (prompt de comando), as opções funcionaram como deveriam *.

A única diferença entre a execução dos comandos aconteceu quando tentei finalizá-los. No console, pressionando Ctrl+C , rsync terminou com o erro

rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at ...

No Agendador de Tarefas do Windows, clicar com o botão direito do mouse na tarefa em execução e selecionar Fim resultou no erro

rsync: read error: Connection reset by peer (104)

Portanto, só posso presumir que a maneira como o Agendador de Tarefas do Windows encerra um processo difere da maneira como o rsync espera terminar *, e isso faz com que o rsync termine sem executar suas rotinas.

* - Encontrei mais sobre a maneira como --partial e --partial-dir funcionam.

Com --partial , rsync cria um arquivo temporário como eu vi, mas quando o rsync termina (de uma maneira esperada), ele renomeia esse arquivo temporário para o nome do arquivo regular (por exemplo, renames . [nome_do_arquivo] .2dxZ1a para [nome_do_arquivo] ) e então faz uma cópia do arquivo parcial para um novo arquivo temporário na próxima execução (por exemplo, cópias [nome_do_arquivo] para . [nome do arquivo] .34cae2 ).

Com --partial-dir , o rsync preenche o arquivo temporário e, ao fechar, move o arquivo temporário para o diretório especificado como o nome do arquivo normal (por exemplo, renames . [nome_do_arquivo] .2dxZ1a para [partial-dir] / [filename] ). Então, na próxima execução, copia o arquivo de [partial-dir] para um novo arquivo temporário no diretório de destino.

    
por 28.08.2010 / 00:51
2

Parece que você tem as ideias certas, mas sem saber todo o seu comando é impossível dizer. Para mim estas opções funcionam como esperado quando eu mato o rsync (com ctrl-C) e o reinicio (GNU / Linux com o rsync 3.0.6). Uma coisa a se manter é que se você usar --wholefile ou qualquer opção que implique --wholefile (veja a página man do rsync), então --partial (-dir) não funcionará e você poderá ver os sintomas que descreve. Além disso, se ele não puder localizar ou criar o diretório especificado em --partial-dir, ele irá ignorá-lo silenciosamente. Outra possibilidade é que --partial realmente funcione para você, mas você não pode dizer e pensar que ele recomeça, mesmo que isso não aconteça - eu esperaria que ele apagasse os arquivos temporários assim que completasse a transferência e atualizasse o arquivo real . Você pode monitorar isso usando --progress - ele iniciará em 0%, mas depois saltará rapidamente para qualquer porcentagem já transferida e continuará a partir daí. Para arquivos menores, o progresso pode ser muito rápido para ver muito, então tente com algo maior (100 MB ou mais, dependendo da velocidade de conexão para o destino). Espero que isto ajude. Edit: Eu achei que --partial-dir parece criar um arquivo temporário no diretório de destino durante a transferência, assim como com --partial. Somente quando a transferência morre, ela é movida para o diretório de arquivos parciais que você especificou, então inicialmente parece que não é diferente de --partial.

    
por 23.08.2010 / 20:57

Tags