Eu uso rsync
no Windows (Cygwin), onde movo arquivos da pasta compartilhada (de outra instância do Windows) para o armazenamento NFS. Eu mapeei a pasta compartilhada para uma unidade e montei a pasta NFS em outra.
Iniciei o rsync
comando assim:
C:\cygwin64\bin\rsync.exe -vrH --perms --partial --delete --stats --log-file=/home/Administrator/rsynclogs/backup.log /cygdrive/z/ /cygdrive/w/
Após 30 minutos de execução e cerca de 17.000 arquivos transferidos em caso de falha por erro:
rsync: write failed on "/cygdrive/w/domainName/Uploads/index_635244981053162421.html": Permission denied (13)
Não consigo ver nenhum motivo para o erro de permissão negada. Por exemplo, se eu copiar o arquivo manualmente, ele será copiado com sucesso.
Eu sei que isso é uma falha do rsync
protocolo. O rsync
protocolo não pode determinar de antemão se tem permissões de gravação no destino. Em vez disso, ele apenas envia e verifica se houve sucesso ou falha posteriormente.
Não tenho ssh
acesso ao servidor NFS - é uma instância de armazenamento. O cliente Windows de origem tem Cygwin, mas não tem acesso ao armazenamento NFS.
Estamos mudando de um servidor antigo de 2008 para um novo. Uma das mudanças é mover todo o armazenamento para um armazenamento nfs compartilhado. Eu sei que essa configuração não é perfeita, mas é temporária. Eu preciso que ele funcione corretamente por um mês ou mais. O serviço NFS não pode ser instalado no servidor 2008, infelizmente, caso contrário, não haveria necessidade de rsync.
Como posso fazer minha cópia continuar em execução mesmo se houver um erro?
Eu pensei em usar essas opções:
--partial-dir=DIR
--delay-updates
--inplace
--ignore-errors
mas parece que não vai realmente resolver o meu problema. Alguma sugestão?
Eu sugiro que você modifique seu
rsync
comando para manter os tempos de arquivo, para que ele possa identificar se um arquivo precisa ou não ser copiado. Use o--times
sinalizador (-t
) para isso.Você afirmou que seu erro de permissão é transitório, então sugiro que você apenas coloque o processo em um loop. Coloque isso em um arquivo e execute-o de
bash
Como uma possível melhoria, você pode considerar substituir os sinalizadores
-rpt
por-a
(--archive
), que também mantém a propriedade do arquivo.