AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 43014
Accepted
Amandasaurus
Amandasaurus
Asked: 2009-07-21 06:36:34 +0800 CST2009-07-21 06:36:34 +0800 CST 2009-07-21 06:36:34 +0800 CST

Copiando uma grande árvore de diretórios localmente? cp ou rsync?

  • 772

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, rsyncou cp?

linux file-transfer unix files rsync
  • 18 18 respostas
  • 401691 Views

18 respostas

  • Voted
  1. Best Answer
    Hamish Downer
    2009-07-21T06:40:58+08:002009-07-21T06:40:58+08:00

    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 -abandeira – 'arquivar'. Então:

    rsync -a source dest
    

    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 -anã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:

    rsync -aHAX source dest # Linux
    rsync -aHE source dest  # OS X
    

    O cp padrão será iniciado novamente, embora o -usinalizador "copiará somente quando o arquivo SOURCE for mais recente que o arquivo de destino ou quando o arquivo de destino estiver ausente" . E o -asinalizador (arquivo) será recursivo, não recopiará arquivos se você precisar reiniciar e preservar as permissões. Então:

    cp -au source dest
    
    • 258
  2. Ellis Percival
    2013-05-08T11:09:48+08:002013-05-08T11:09:48+08:00

    Ao copiar para o sistema de arquivos local, costumo usar o rsync com as seguintes opções:

    # rsync -avhW --no-compress --progress /src/ /dst/
    

    Segue meu raciocínio:

    -a is for archive, which preserves ownership, permissions etc.
    -v is for verbose, so I can see what's happening (optional)
    -h is for human-readable, so the transfer rate and file sizes are easier to read (optional)
    -W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
    --no-compress as there's no lack of bandwidth between local devices
    --progress so I can see the progress of large files (optional)
    

    Eu vi transferências 17% mais rápidas usando as configurações de rsync acima no seguinte comando tar, conforme sugerido por outra resposta:

    # (cd /src; tar cf - .) | (cd /dst; tar xpf -)
    
    • 181
  3. Chad Huneycutt
    2009-07-21T07:15:34+08:002009-07-21T07:15:34+08:00

    Quando tenho que copiar uma grande quantidade de dados, costumo usar uma combinação de tar e rsync. O primeiro passo é tar, algo assim:

    # (cd /src; tar cf - .) | (cd /dst; tar xpf -)
    

    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:

    # cd /dst; rsync -avPHSx --delete /src/ .
    

    Observe que a barra à direita /src/é importante.

    • 85
  4. AskApache
    2012-02-27T09:06:33+08:002012-02-27T09:06:33+08:00

    rsync

    Aqui está o rsync que eu uso, prefiro cp para comandos simples, não isso.

    $ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/
    

    cpio

    Aqui está uma maneira ainda mais segura, cpio. É quase tão rápido quanto alcatrão, talvez um pouco mais rápido.

    $ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null
    

    alcatrão

    Isso também é bom e continua em falhas de leitura.

    $ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -
    

    Observe que todos são apenas para cópias locais.

    • 16
  5. arjones
    2017-05-12T11:14:58+08:002017-05-12T11:14:58+08:00

    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:

    • rsynclevou 232 minutos
    • tarlevou 206 minutos
    • cpiolevou 225 minutos
    • rsync + parallellevou 209 minutos

    No 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

    • 14
  6. innaM
    2009-07-21T06:40:59+08:002009-07-21T06:40:59+08:00

    O que você preferir. Só não esqueça do -aswitch quando decidir usar cp.

    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ê.

    • 7
  7. John
    2012-11-28T17:20:32+08:002012-11-28T17:20:32+08:00

    O rsynccomando sempre calcula somas de verificação em cada byte que transfere.

    A opção de linha de comando --checksumrefere-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:

    -c, --checksum pule com base na soma de verificação, não no tempo e tamanho do mod"

    A página de manual também diz isso:

    Observe que o rsync sempre verifica se cada arquivo transferido foi reconstruído corretamente no lado receptor, verificando a soma de verificação de todo o arquivo, mas essa verificação automática após a transferência não tem nada a ver com a opção "Este arquivo precisa ser atualizado?" Verifica.

    Assim rsynctambém, sempre, calcula uma soma de verificação de todo o arquivo no lado receptor, mesmo quando -c/ --checksuma opção está "desativada".

    • 7
  8. oneguynick
    2009-07-21T08:24:51+08:002009-07-21T08:24:51+08:00

    rsync -aPhW --protocol=28ajuda 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 CP

    • 6
  9. n3bulous
    2009-07-21T08:14:37+08:002009-07-21T08:14:37+08:00

    O 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.

    • 5
  10. Frédéric N.
    2019-07-16T04:50:13+08:002019-07-16T04:50:13+08:00

    Você definitivamente quer experimentar o rclone . Essa coisa é loucamente rápida:

    sudo rclone sync /usr /home/fred/temp -P -L --transfers 64
    
    Transferred:       17.929G / 17.929 GBytes, 100%, 165.692 MBytes/s, ETA 0s
    Errors:                75 (retrying may help)
    Checks:            691078 / 691078, 100%
    Transferred:       345539 / 345539, 100%
    Elapsed time:     1m50.8s
    

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

    Você pode adicionar --ignore-checksumna primeira execução para torná-lo ainda mais rápido.

    • 4

relate perguntas

  • Protegendo um novo servidor Ubuntu [fechado]

  • (Soft) RAID 6 no Ubuntu 7.10, devo migrar para 8.10?

  • No SQL Server, quando você deve dividir seu PRIMARY Data FileGroup em arquivos de dados secundários?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Resolver o nome do host do endereço IP

    • 8 respostas
  • Marko Smith

    Como posso classificar a saída du -h por tamanho

    • 30 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    Qual é o utilitário de linha de comando no Windows para fazer uma pesquisa reversa de DNS?

    • 14 respostas
  • Marko Smith

    Como verificar se uma porta está bloqueada em uma máquina Windows?

    • 4 respostas
  • Marko Smith

    Qual porta devo abrir para permitir a área de trabalho remota?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    MikeN No Nginx, como posso reescrever todas as solicitações http para https mantendo o subdomínio? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 Qual é a diferença entre colchetes duplos e simples no bash? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch Como altero a senha da minha chave privada? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt Como funciona a sub-rede IPv4? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve