Eu tenho que copiar uma grande árvore de diretórios, cerca de 1,8 TB. É tudo local. Por hábito eu usaria rsync
, porém me pergunto se há muito sentido, e se eu deveria usar cp
.
Estou preocupado com permissões e uid/gid, pois eles precisam ser preservados na cópia (eu sei que o rsync faz isso). Assim como coisas como links simbólicos.
O destino está vazio, então não preciso me preocupar em atualizar condicionalmente alguns arquivos. É tudo disco local, então não preciso me preocupar com ssh ou rede.
A razão pela qual eu ficaria tentado a sair do rsync é porque o rsync pode fazer mais do que eu preciso. arquivos de soma de verificação rsync. Eu não preciso disso, e estou preocupado que possa demorar mais do que cp.
Então o que você acha, rsync
ou cp
?
Eu usaria o rsync, pois significa que, se for interrompido por qualquer motivo, você poderá reiniciá-lo facilmente com muito pouco custo. E sendo rsync, ele pode até reiniciar no meio de um arquivo grande. Como outros mencionam, ele pode excluir arquivos facilmente. A maneira mais simples de preservar a maioria das coisas é usar a
-a
bandeira – 'arquivar'. Então:Embora o UID/GID e os links simbólicos sejam preservados por
-a
(consulte Recursos-lpgo
), sua pergunta implica que você pode querer uma cópia completa das informações do sistema de arquivos; e-a
não inclui links físicos, atributos estendidos ou ACLs (no Linux) ou os anteriores nem bifurcações de recursos (no OS X). Assim, para uma cópia robusta de um sistema de arquivos, você precisará incluir esses sinalizadores:O cp padrão será iniciado novamente, embora o
-u
sinalizador "copiará somente quando o arquivo SOURCE for mais recente que o arquivo de destino ou quando o arquivo de destino estiver ausente" . E o-a
sinalizador (arquivo) será recursivo, não recopiará arquivos se você precisar reiniciar e preservar as permissões. Então:Ao copiar para o sistema de arquivos local, costumo usar o rsync com as seguintes opções:
Segue meu raciocínio:
Eu vi transferências 17% mais rápidas usando as configurações de rsync acima no seguinte comando tar, conforme sugerido por outra resposta:
Quando tenho que copiar uma grande quantidade de dados, costumo usar uma combinação de tar e rsync. O primeiro passo é tar, algo assim:
Normalmente com uma grande quantidade de arquivos, haverá alguns que o tar não pode manipular por qualquer motivo. Ou talvez o processo seja interrompido, ou se for uma migração do sistema de arquivos, você pode querer fazer a cópia inicial antes da etapa de migração real. De qualquer forma, após a cópia inicial, faço uma etapa de rsync para sincronizar tudo:
Observe que a barra à direita
/src/
é importante.rsync
Aqui está o rsync que eu uso, prefiro cp para comandos simples, não isso.
cpio
Aqui está uma maneira ainda mais segura, cpio. É quase tão rápido quanto alcatrão, talvez um pouco mais rápido.
alcatrão
Isso também é bom e continua em falhas de leitura.
Observe que todos são apenas para cópias locais.
Este tópico foi muito útil e porque havia tantas opções para alcançar o resultado, decidi fazer benchmark de algumas delas. Acredito que meus resultados podem ser úteis para que outras pessoas tenham uma noção do que funcionou mais rápido.
Para mover 532Gb de dados distribuídos entre 1.753.200 arquivos , tivemos esses tempos:
rsync
levou 232 minutostar
levou 206 minutoscpio
levou 225 minutosrsync + parallel
levou 209 minutosNo meu caso eu preferi usar
rsync + parallel
. Espero que esta informação ajude mais pessoas a decidir entre essas alternativas.O benchmark completo está publicado aqui
O que você preferir. Só não esqueça do
-a
switch quando decidir usarcp
.Se você realmente precisa de uma resposta: eu usaria o rsync porque é muito mais flexível. Precisa desligar antes que a cópia seja concluída? Apenas ctrl-c e retome assim que você voltar. Precisa excluir alguns arquivos? Basta usar
--exclude-from
. Precisa alterar a propriedade ou as permissões? rsync fará isso por você.O
rsync
comando sempre calcula somas de verificação em cada byte que transfere.A opção de linha de comando
--checksum
refere-se apenas se as somas de verificação dos arquivos são usadas para determinar quais arquivos devem ser transferidos ou não, ou seja:A página de manual também diz isso:
Assim
rsync
também, sempre, calcula uma soma de verificação de todo o arquivo no lado receptor, mesmo quando-c/ --checksum
a opção está "desativada".rsync -aPhW --protocol=28
ajuda a acelerar essas cópias grandes com RSYNC. Eu sempre vou rsync porque o pensamento de estar no meio de 90GiB e quebrar me assusta para longe do CPO rsync é ótimo, mas tem problemas com árvores de diretório muito grandes porque armazena as árvores na memória. Eu estava apenas olhando para ver se eles resolveriam esse problema quando encontrei este tópico.
Encontrei também:
http://matthew.mceachen.us/geek/gigasync/
Você também pode quebrar manualmente a árvore e executar vários rsyncs.
Você definitivamente quer experimentar o rclone . Essa coisa é loucamente rápida:
Esta é uma cópia local de e para um SSD LITEONIT LCS-256 (256 GB).
Você pode adicionar
--ignore-checksum
na primeira execução para torná-lo ainda mais rápido.