Meu entendimento rsync
(e pode estar completamente errado) é que primeiro tentaria ler os arquivos (origem e destino, se existir) para compará-los antes de tentar escrever algo no destino (o que eu esperaria ser mais lento do que ler ). Estou executando o rsync para sincronizar um backup da minha casa e, em vez de ver muitas leituras nos discos de origem e destino (logo após executar uma execução anterior do rsync), estou vendo muitas gravações no disco de destino , o que é algo Eu não estava esperando. O rsync sempre funciona assim?
Do jeito que estou usando, só para garantir:
rsync --delete -r /home/my-home /mount-point-other-disk/
Você está copiando do que
rsync
é considerado um disco local para um disco local. Isso desativa muitas de suas otimizações e as reduz quase a um simples arquivocp
.Além disso, ao não incluir o sinalizador
--times
(-t
), você desativou a otimização restante, o que significa que ele se torna exatamente igual acp
.Isso só é verdade quando você usa
rsync
para copiar em uma rede entre dois sistemas.Isso ocorre porque
rsync
não pode assumir nada sobre os arquivos de destino e, portanto, sobrescreve todos eles em cada tentativa de backup.Explicação:
Na situação ideal,
rsync
pode executar-se como cliente e também iniciar um processo servidor no sistema remoto. Supondo que o arquivo de destino pareça já estar presente no destino, cada um desses dois processos lê sua cópia local e identifica, por meio de blocos de somas de verificação, quais partes dos arquivos diferem. Essas diferenças são então transferidas pela rede e o arquivo de destino é atualizado. (É uma soma de verificação deslizante, então você pode inserir até mesmo um único byte no início do arquivo e esse é o único bloco que será transferido.)Porém, em uma situação em que
rsync
o gerenciamento de leituras e gravações é realizado em um único sistema, ele assume que a leitura e a gravação levarão o mesmo tempo. (Isso não é necessariamente verdade para a memória flash, mas tenha paciência.) Conseqüentemente, o tempo necessário para ler o arquivo de origem e de destino apenas para compará-los - antes de qualquer gravação para atualizar o destino ser considerada - é amplamente equivalente ao tempo necessário. seria necessário apenas reescrever o arquivo de destino, e é isso que acontece.Soluções possíveis:
Se você estiver gravando em um NAS, não grave em um sistema de arquivos NAS que tenha sido montado localmente. Em vez disso, use o
rsync
protocolo para gravar diretamente na rede no NAS ou algo comossh
fazer login no NAS remotamente e transportar os dados por meio dessa conexão. Nesse caso, você gostaria de uma linha de comando mais ou menos assim:Se você realmente estiver lendo/gravando entre dois discos conectados localmente, inclua a opção
--times
(-t
) e permitarsync
ignorar arquivos que parecem já ter sido copiados:O primeiro deles copia todos os metadados, portanto não é adequado para gravação em um sistema de arquivos nativo não Linux, como NTFS ou FAT. O segundo copia os arquivos, mas mantém apenas a hora da última modificação (sem permissões ou propriedades). Se você estiver gravando em um sistema de arquivos FAT, observe que ele só pode capturar carimbos de data e hora com precisão de dois segundos, portanto, você precisa avisar
rsync
para não esperar muito: