Eu tenho que copiar uma grande árvore de diretórios, cerca de 1,8 TB. É tudo local. Por hábito, eu usaria rsync
, no entanto, me pergunto se há muito sentido e se devo preferir cp
.
Estou preocupado com permissões e uid / gid, pois elas precisam ser preservadas na cópia (eu sei que o rsync faz isso). Bem como coisas como links simbólicos.
O destino está vazio, então não preciso me preocupar em atualizar condicionalmente alguns arquivos. É todo o 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 somas de verificação rsync. Não preciso disso e estou preocupado que isso possa levar mais tempo que o cp.
Então, o que você acha, rsync
ou cp
?
Respostas:
Eu usaria o rsync, pois significa que, se for interrompido por qualquer motivo, você poderá reiniciá-lo facilmente com muito pouco custo. E sendo o rsync, pode até reiniciar parcialmente através 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 - 'arquivo'. Assim:Embora o UID / GID e os links simbólicos sejam preservados por
-a
(consulte-lpgo
), sua pergunta implica que você pode querer uma cópia completa das informações do sistema de arquivos; e-a
não inclui hard-links, atributos estendidos ou ACLs (no Linux) ou os acima nem bifurcações de recursos (no OS X.) Assim, por uma cópia robusta de um sistema de arquivos, você precisa incluir essas bandeiras:O cp padrão será iniciado novamente, embora o
-u
sinalizador "copie somente quando o arquivo SOURCE for mais novo que o arquivo de destino ou quando o arquivo de destino estiver ausente" . E o-a
sinalizador (arquivo morto) será recursivo, não copia novamente os arquivos se você precisar reiniciar e preservar as permissões. Assim:fonte
Ao copiar para o sistema de arquivos local, sempre uso as seguintes opções de rsync:
Aqui está o meu raciocínio:
Vi transferências 17% mais rápidas usando as configurações rsync acima sobre o seguinte comando tar, conforme sugerido por outra resposta:
fonte
rsync: --no-compress: unknown option
@ Ellis Percival.rm -rf /src/
.Quando tenho que copiar uma grande quantidade de dados, geralmente uso uma combinação de tar e rsync. A primeira passagem é tar, algo como isto:
Geralmente, 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ê poderá fazer a cópia inicial antes da etapa real da migração. De qualquer forma, após a cópia inicial, eu faço uma etapa rsync para sincronizar tudo:
Observe que a barra final
/src/
é importante.fonte
pv
no meio para poder observar o progresso, estimando o tamanho de todos os dados usandodf
. Eu também usei--numeric-owner
, como o disco de origem era de outro sistema e não queriatar
mexer com os proprietários:tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp
rsync
Aqui está o rsync que eu uso, prefiro cp para comandos simples, não esse.
cpio
Aqui está uma maneira ainda mais segura, cpio. É tão rápido quanto o alcatrão, talvez um pouco mais rápido.
alcatrão
Isso também é bom e continua com falhas de leitura.
Observe que todos são apenas para cópias locais.
fonte
O que você preferir. Só não esqueça a
-a
opção quando você decidir usarcp
.Se você realmente precisa de uma resposta: eu usaria o rsync porque é muito mais flexível. Precisa desligar antes de concluir a cópia? Basta pressionar Ctrl-C e continuar assim que estiver de costas. Precisa excluir alguns arquivos? Apenas use
--exclude-from
. Precisa alterar a propriedade ou as permissões? O rsync fará isso por você.fonte
O
rsync
comando sempre calcula somas de verificação em cada byte transferido.A opção de linha de comando
--checksum
refere-se apenas ao uso de somas de verificação de arquivos para determinar quais arquivos transferir ou não, ou seja:A página de manual também diz o seguinte:
Assim
rsync
também, sempre, calcula uma soma de verificação de todo o arquivo no lado de recebimento, mesmo quando a-c/ --checksum
opção está "desativada".fonte
rsync -aPhW --protocol=28
ajuda a acelerar essas cópias grandes com o RSYNC. Eu sempre vou rsync porque o pensamento de estar no meio do 90GiB e quebrar me afasta da CPfonte
O rsync é ótimo, mas tem problemas com árvores de diretório muito grandes porque armazena as árvores na memória. Eu só estava olhando para ver se eles resolveriam esse problema quando encontrei este tópico.
Eu também encontrei:
http://matthew.mceachen.us/geek/gigasync/
Você também pode dividir manualmente a árvore e executar vários rsyncs.
fonte
Esse tópico foi muito útil e, como havia muitas opções para alcançar o resultado, decidi fazer o benchmark de algumas delas. Acredito que meus resultados podem ser úteis para que outras pessoas tenham uma noção do que funcionou mais rapidamente.
Para mover 532Gb de dados distribuídos entre 1.753.200 arquivos , tivemos o seguinte:
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.A referência completa é publicada aqui
fonte
cp
? Este é o título da pergunta!cp
é inseguro, ou seja: quando ele quebra você tem que começar de novo, isso é como eu favorecer opções que podem retomar, ergorsync
é o meu favorito :)Ao fazer uma cópia de diretório local local, minha experiência é que "cp -van src dest" é 20% mais rápido que o rsync. No que diz respeito à capacidade de reinicialização, é isso que "-n" faz. Você só precisa remover o arquivo parcialmente copiado. Não é doloroso, a menos que seja um ISO ou algo parecido.
fonte
ARJ É UMA ESCOLA TÃO VELHA !! Eu realmente duvido que o ARJ e / ou o rsync dêem desempenho.
Definitivamente, o que eu sempre faço é usar o cpio:
Isso é quase rápido que o CP, definitivamente mais rápido que o alcatrão e sem canalizar nada.
fonte
cpio
página de manual do FreeBSD .cpio
infelizmente, tem um limite superior de 8 GB para arquivos.find
comando, como você listou, tem um tubo na mesma:find . -print | cpio -pdm /target/folder
Você definitivamente quer experimentar o rclone . Essa coisa é louca rápido:
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.fonte
Ambos irão funcionar muito bem.
fonte
tar
também faria o trabalho, mas não será interrompido como o rsync fará.fonte
E se você usar ARJ?
onde
-jm -m1
estão os níveis de compactação e o-je
torna um executável. Agora você tem uma lista de arquivos encapsulada.Em seguida, para extração para o mapa de destino
onde o mapa de origem será feito (onde
-y
é sempre aceitar, substituir, pular etc)Pode-se então scp ftp o pacote de arquivos para a área de destino e executá-lo, se isso for possível.
fonte
Existem algumas acelerações que podem ser aplicadas a
rsync
: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-file
ao adicionar um caso de falha perigoso.Usar
-S
/--sparse
: transforma sequências de nulos em blocos esparsos--partial
ou-P
qual é--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-file
para 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)fonte