Como acelerar o rsync?

44

Estou executando o rsync para sincronizar um diretório no meu disco rígido USB externo. São cerca de 150 GB de dados. 50000 + arquivos, eu acho.

Ele está executando sua primeira sincronização no momento, mas está copiando arquivos a uma taxa de apenas 1 a 5 MB / s. Isso parece incrivelmente lento para um gabinete USB 2.0. Também não há outras transferências acontecendo na unidade.

Aqui estão as opções que eu usei:

rsync -avz --progress /mysourcefolder /mytargetfolder

Estou executando o Ubuntu Server 9.10.

Jake Wilson
fonte
2
Tem certeza de que está recebendo uma conexão USB2? uma cópia (não-rsync) ou outra operação de gravação é executada em velocidades normais? caso contrário, você tentou uma cópia / outra operação de gravação com outra porta / cabo USB?
quack quixote
Veja também serverfault.com/questions/43014/… - lá as pessoas também propõem o uso de dois tarcomandos canalizados ou cpio.
Blaisorblade 23/02

Respostas:

38

Para a primeira sincronização, use

cp -a  /mysourcefolder /mytargetfolder

O rsync adiciona sobrecarga apenas quando o destino está vazio.

também .. a opção -z provavelmente está prejudicando seu desempenho, você não deve usá-lo se não estiver transferindo dados por um link lento.

user23307
fonte
3
O rsync é chamado porque é para sincronização remota e não é realmente apropriado para um volume conectado localmente por esse motivo.
precisa saber é o seguinte
6
Também deve ser usado em transferências locais e é muito mais flexível. É possivelmente um exagero na primeira sincronização.
Blaisorblade 23/02
11
O rsync também é uma sincronização unidirecional. Muito bom para fazer backup em um servidor ou a partir de um servidor. No entanto, se você deseja que a sincronização bidirecional local para uma unidade removível, consulte csync csync.org/get-it não deve ser confundida com csync2, que é um projeto completamente diferente.
Jesse the Wind Wanderer
3
rsync -avz --progress /mysourcefolder/ /mytargetfolderou você obterá uma cópia de mysourcefolderdentro de, em mytargetfoldervez de espelhar o conteúdo
editor
2
Esta resposta não responde à pergunta. A questão era sobre como otimizar o rsync - não substituí-lo pelo comando cp.
oemb1905
38

Se você estiver usando o rsync com uma rede rápida ou disco a disco na mesma máquina,

não usando a compressão -z

e usando --inplace

acelera o desempenho dos discos rígidos ou da rede

compressão usa muita CPU

não usar o inplace faz com que o disco rígido se debata muito (ele usa um arquivo temporário antes de criar o final)

compressão e não usar no local é melhor para fazê-lo pela internet (rede lenta)

NOVO: Esteja ciente do destino ... se houver "compactação" de NTFS ativada ... isso desacelera gravemente arquivos grandes (eu diria 200 MB +). O rsync quase parece estagnado, é causado por isso.

Scott Kramer
fonte
Compressão NTFS é slowwww em grandes arquivos
Scott Kramer
Não vejo nada sobre '--inline' na página de manual
Anthony
11
É '--inplace'
Scott Kramer
26

Use a -Wopção Isso desativa as comparações delta / diff. Quando a hora / tamanhos dos arquivos diferem, o rsync copia o arquivo inteiro.

Remova também a -zopção. Isso é útil apenas para compactar o tráfego de rede.

Agora rsyncdeve ser tão rápido quanto cp.

vdboor
fonte
6
Nota secundária: -zé útil apenas para tráfego de rede de baixa velocidade . Se sua rede for rápida o suficiente, isso diminuirá a velocidade, pois você ficará limitado pela CPU.
precisa saber é o seguinte
3
Essas dicas aceleraram bastante a transferência de meus arquivos entre dois dispositivos NAS, obrigado!
djhworld 22/09
2
mas observe que, de acordo com a página do manual, diz -W: "Esse é o padrão quando a origem e o destino são especificados como caminhos locais, mas apenas se nenhuma opção de gravação em lote estiver em vigor".
GuoLiang Oon
14

Primeiro - o número de arquivos nesse caso será um fator importante. É um tamanho médio de 3 MB cada. Provavelmente há um gargalo de io influenciando a velocidade no caso do OP. Mais aqui - é uma leitura bastante seca, mas a imagem da capa vale a pena.

Então, usando o rsync para copiar para um diretório vazio? Aqui estão algumas maneiras de acelerar:

  1. Não -z - definitivamente não use -z como no OP.
  2. --no-compress pode acelerar você. Isso pode ter o maior impacto ... meu teste foi de 13.000 arquivos, tamanho total de 200MB e usando o rsync 3.1.3. Sincronizei com uma partição diferente na mesma unidade SSD interna. Com --no-compress, recebo 18 MBps, e sem ele, 15 MBps. cp, a propósito, recebe 16 MBps. Esse é um tamanho médio de arquivo muito menor. Além disso - não consigo encontrar nenhuma documentação para --no-compress. Eu aprendi sobre isso neste post no stackexchange.com.
  3. -W para copiar arquivos inteiros - sempre use isso se você não quiser comparar diferenças; não importa que o objetivo do rsync seja comparar diferenças e atualizar apenas as alterações.
  4. -S para lidar bem com arquivos esparsos - não machucará se você não tiver arquivos esparsos.
  5. --exclude-from ou algo semelhante para excluir arquivos desnecessários reduzirá o tempo, mas não aumentará sua velocidade de transferência.
  6. É possível se você enviar a saída para um arquivo como este rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err- o primeiro> basicamente imprime um arquivo com todas as coisas que você normalmente veria, e o 2> se refere a mensagens de erro.
  7. Por fim, executar várias instâncias do rsync para diferentes partes da sua transferência pode ser uma grande ajuda.

Meu comando seria:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

Se tudo parecesse bem, eu excluiria "--dry-run" e deixaria para lá. A, X e E cobrem atributos e permissões estendidos não cobertos por -a, l é para links flexíveis, H é para links físicos e h é legível por humanos.

A atualização de um diretório já sincronizado em uma unidade USB, ou a mesma unidade ou em uma rede, exigirá diferentes comandos rsync para maximizar a velocidade de transferência.

Bônus - aqui está a página de manual do rsync , e se você quiser testar a velocidade do seu disco rígido, o bonnie ++ é uma boa opção e, para a velocidade da sua rede, tente o iperf .


* A publicação tem quase dez anos, mas os mecanismos de pesquisa certamente gostam, e eu continuo vendo. É uma boa pergunta, e não acho que a resposta principal para "como acelerar o rsync" seja "use cp".

Fin Hirschoff
fonte
11
Em relação ao item 7) eu poderia melhorar muito mais o desempenho usando um HDD tradicional como fonte, estendendo o buffer de leitura antecipada usando "blockdev --setra 8192 / dev / sdX". Então, pretendo reduzir as buscas na cabeça.
user2480144
2

Você não diz que tamanho de distribuição seus arquivos têm. Se houver muitos arquivos pequenos, isso reduzirá a taxa geral de transferência, aumentando a latência do movimento da cabeça nas unidades de origem e de destino, pois a ferramenta abre novos arquivos e o sistema operacional mantém entradas de diretório e outros metadados (como o diário do sistema de arquivos, se você estiver usando diário de metadados, como ext3 / ext4 e NTFS, por padrão) atualizados durante a transferência. Um processo de cópia de arquivo apenas "entra em ação" para objetos maiores, quando uma simples transferência em massa está acontecendo.

David Spillett
fonte
0

Você definitivamente quer experimentar o rclone . Essa coisa é louca rápido:

Diretórios $ tree / usr [...] 26105, 293208 arquivos

$ sudo rclone sync / usr / home / fred / temp -P -L - transferências 64

Transferido: 17.929G / 17.929 GBytes, 100%, 165.692 MBytes / s, ETA 0s Erros: 75 (tentar novamente pode ajudar) Verificações: 691078/691078, 100% Transferido: 345539/345539, 100% Tempo decorrido: 1m50.8s

Esta é uma cópia local de e para um SSD LITEONIT LCS-256 (256GB).

Você pode adicionar --ignore-checksum na primeira execução para torná-la ainda mais rápida.

Frédéric N.
fonte
0

Evitar

  • -z/ --compress: a compactação carregará apenas a CPU, pois a transferência não está na rede, mas na RAM.
  • --append-verify: retoma uma transferência interrompida. Parece uma boa idéia, mas tem o caso de falha perigosa: qualquer arquivo de destino do mesmo tamanho (ou maior) que a fonte será IGNORADO. Além disso, verifica o arquivo inteiro no final, o que significa que não há aceleração significativa --no-whole-fileao adicionar um caso de falha perigoso.

Usar

  • -S/ --sparse: transforma sequências de nulos em blocos esparsos
  • --partialou -Pqual é --partial --progress: salve os arquivos parcialmente transferidos para futura retomada. Nota: os arquivos não terão um nome temporário, portanto, garanta que nada mais espere usar o destino até que toda a cópia seja concluída.
  • --no-whole-filepara que qualquer coisa que precise ser reenviada use transferência delta. Ler metade de um arquivo parcialmente transferido geralmente é muito mais rápido do que escrevê-lo novamente.
  • --inplace para evitar a cópia do arquivo (mas apenas se nada estiver lendo o destino até que toda a transferência seja concluída)
Tom Hale
fonte