cp ou rsync, vale a pena cp?

8

Espero que isso não conta como uma pergunta sem uma resposta real, como eu não consigo encontrar uma boa razão para usar cp(1)ao longo rsync(1)de praticamente todas as circunstâncias. Se um normalmente favorecem rsyncmais cp? Existe alguma boa orientação para seu uso?

  • rsync: Transfere os diffs, pode usar compactação, pode ser usado remotamente (e com segurança), pode ser reiniciado apesar de uma interrupção, mesmo durante a transferência de um único arquivo grande. "

  • cp: Talvez seja apenas mais simples de usar? É mais rápido que o rsync?

Soyuz
fonte
4
Às vezes, a sobrecarga da comparação é muito mais trabalhosa do que simplesmente copiar os bytes cegamente.
bahamat 31/07/12
Mesma pergunta com uma melhor resposta: serverfault.com/questions/43014/...
Daniel

Respostas:

9

cpfaz parte dos coreutils, portanto, está presente em todos os lugares. Além disso, ele foi projetado principalmente para copiar arquivos dentro de um computador.

rsyncnão faz parte do coreutils, não está presente nem no ambiente padrão. Além disso, foi projetado principalmente para transferir arquivos pela rede. Também rsyncpossui mais dependências em comparação com os coreutils, porém essa diferença não faz muito sentido.

PS: A propósito, o uso da CPU ainda é importante nos sistemas embarcados.

pressa
fonte
6

O principal motivo que você não deseja usar rsyncpara todas as operações de cópia é porque a rsyncsobrecarga de cálculo é calculada. Antes que a transferência de dados realmente comece, rsyncvarre todos os arquivos. Antes de cada arquivo, é feita uma comparação. Essa sobrecarga não é insignificante, mesmo com as rápidas CPUs disponíveis em 2012. Eu faço esse tipo de transferência o tempo todo e em servidores de tamanho bastante decente, quando você começa a lidar com gigs de dados, a sobrecarga pode ser demorada.

Não estou dizendo que não use rsync, de modo algum, use a rsyncqualquer momento para economizar algum tempo de transferência. Só não use rsyncquando cppoderia fazer a mesma coisa.

O que geralmente faço, primeiro traga os dados usando métodos de cópia regulares. Em seguida, rsyncpara alterações subseqüentes, que é quando essas diferenças podem ser aproveitadas.

JM Becker
fonte
É um preço alto a pagar, dada a potência dos nossos processadores hoje?
Soyuz
3
Grande é subjetivo e mudaria dependendo do número de arquivos versus tamanho dos dados versus E / S. Meu ponto principal seria que não é insignificante, independentemente dos processadores atuais. Uma coisa a lembrar dos processadores de hoje, ainda deve lidar com os dados de hoje.
JM Becker
Acordado. As CPUs não ficam mais rápidas no vácuo. Um dos melhores motivos que temos para as CPUs de GHz é a rede em gigabit: uma CPU mais lenta simplesmente não consegue manter um canal de E / S tão grande. Os computadores tendem a ser tão equilibrados quanto sabemos como fazê-los. Tire um pouco da energia da CPU e parte da capacidade de E / S fica ociosa. Aumente a demanda de E / S e a CPU ficará mais lenta, aguardando E / S.
Warren Young
3

Eu esperaria cpusar menos CPU ao copiar localmente, porque ele não usa diffs, ao passo que rsyncpode reduzir as gravações ao usar diffs. A compactação deve ser evitada localmente porque você precisa ler e escrever o arquivo / diff inteiro de qualquer maneira e isso requer cálculos adicionais.

scai
fonte
Então, tudo se resume ao custo de CPU ou o custo de I / O
Soyuz
2
@soyuz, isso é verdade para dados que foram alterados, em referência a outros dados. Quanto menor o diff, mais rsyncé preferido. Mas quando o seu não é diferente, rsyncestá apenas trazendo sobrecarga sem benefício extra.
JM Becker
@TechZilla Eu acho que você quer dizer, quando não há nada em comum. Se não houver diff, o rsync terminará cedo porque não há nada para copiar, tornando-o muito mais preferido.
Izkata 31/07/12
@ Izkata: Há pelo menos uma maneira de rsyncter o dobro da sobrecarga de E / S para dois arquivos idênticos em comparação aos cegos cp: um tempo de modificação alterado. Você teria que dar --size-onlypara consertar isso. A única outra maneira de ver isso seria rsyncconfiar nas somas de verificação do sistema de arquivos, mas para a maioria dos sistemas de arquivos eles não são muito bons preditores estatísticos de identidade.
Warren Young
3

Além das despesas gerais, no caso de um diff grande ou inexistente, rsyncnão parece ter um equivalente cp --reflink=always, o que pode salvar uma enorme quantidade de dados se copiar em um sistema de arquivos que o suporta (cria cópias copy-on-write, portanto os dados em comum entre o original e a cópia (que é, é claro, inicialmente tudo isso) são armazenados apenas uma vez). rsyncé, no entanto, melhor na atualização de cópias CoW, usando --inplace.

Darael
fonte