Como copiar com eficiência apenas arquivos modificados de um disco para um USB externo?

Como copiar com eficiência apenas arquivos modificados de um disco para um USB externo?

Eu tenho um diretório chamado my_projects_linuxdentro do sistema de arquivos Ubuntu, que contém todo o meu trabalho de muitos anos. O diretório contém arquivos, subdiretórios e assim por diante.

Para fins de backup, ocasionalmente copio este diretório e todo o seu conteúdo para um disco rígido externo.

Portanto, o conteúdo da minha unidade externa é semelhante a:

/mounted_drive/my_projects_linux
/mounted_drive/my_projects_windows  # the same idea to backup Windows work

Portanto, o que estou procurando é um comando que:

  1. Funcionaria como

    cp /home/my_projects_linux /mounted_drive/my_projects_linux
    

    Deve substituir arquivos antigos, subdiretórios, arquivos dentro de subdiretórios, etc. no disco externo pelo novo conteúdo do meu PC.

  2. Seja rápido. Ele deve copiar apenas arquivos modificados ou recém-criados. Dado que o tamanho my_projects_linuxé superior a 50 GB, copiar tudo demora mais de uma hora, o que é muito lento. Na realidade, muitas vezes apenas alguns MB foram alterados desde o último backup, portanto, teoricamente, uma cópia pode ser feita muito mais rapidamente.

Como fazer isso?

Pesquisei no Google que cp com a -ubandeira poderia atender às minhas necessidades. Isso funcionaria (por exemplo, lidaria corretamente com subdiretórios de subdiretórios)?

Além disso, armazenar o sistema de arquivos em um disco externo é uma maneira apropriada de fazer um backup ou existe uma maneira mais sofisticada? Por exemplo, usando uma nuvem? Observe que a maneira mais sofisticada deve ser simples, caso contrário não superará a facilidade de execução de um comando shell.

Responder1

Você está descrevendo rsyncpara que foi projetado. De man rsync:

   Rsync  finds  files  that  need to be transferred using a "quick
   check" algorithm (by default) that looks  for  files  that  have
   changed  in  size  or in last-modified time.  Any changes in the
   other preserved attributes (as requested by options) are made on
   the  destination  file  directly  when the quick check indicates
   that the file’s data does not need to be updated.

Também se fala muito sobre networking, mas também é bom fazer algo local.
Essencialmente, tudo que você precisa é:

rsync -rtv /home/my_projects_linux /mounted_drive/my_projects_linux

Existem inúmeras opções disponíveis, mas -rtvserão sincronizadasRecursivamente, mantendo otimecodes iguais, embora sejaverbose sobre o que está fazendo.

Responder2

Para responder à sua segunda pergunta, uma maneira mais sofisticada de fazer backup é rdiff-backup.

rdiff-backup faz backup de um diretório para outro, possivelmente através de uma rede. O diretório de destino acaba sendo uma cópia do diretório de origem, mas diferenças reversas extras são armazenadas em um subdiretório especial desse diretório de destino, para que você ainda possa recuperar arquivos perdidos há algum tempo. A ideia é combinar os melhores recursos de um espelho e um backup incremental. rdiff-backup também preserva subdiretórios, links físicos, arquivos dev, permissões, propriedade uid/gid, tempos de modificação, atributos estendidos, ACLs e bifurcações de recursos.

E se você realmente deseja se basear na nuvem: eu uso o CrashPlan com uma assinatura paga. Então vocênuncapreciso pensar mais em backups manuais.

Responder3

Eu sei que esta pergunta já tem uma resposta aceita. No entanto, eu queria adicionar uma solução GUI multiplataforma, pois vejo que você também usa o Windows. Eu uso para os mesmos finsSincronização de arquivos grátis. Também é FLOSS.

A configuração é absolutamente intuitiva e você pode salvar diferentes trabalhos de sincronização.

Há também um ppa, embora não inclua a versão mais recente 14.04 no momento. Para instalar via ppa:

sudo apt-add-repository ppa:freefilesync/ffs
sudo apt-get update

informação relacionada