Como usar o rsync para fazer uma cópia de uma fonte enorme dividida em dois destinos?

4

Eu tenho 3 unidades. Para este propósito, nós os chamaremos A, B e C, respectivamente.

A é 2 TB

B é 1 TB

C tem 500 GB

Já corri

rsync -avz -progress A B

Agora B está cheio e eu quero mover / copiar o que não já está em B de A para C

Realmente não importa para mim o que acontece com o que está em A como eu vou reformatar de qualquer maneira.

    
por cripto 30.11.2012 / 03:51

2 respostas

5

Faça uma lista de todos os arquivos em B, digamos com o comando find , indo para aquela unidade e executando:

$ find . > files-on-b.xt

Então, quando você rsync de A para C, especifique essa lista no parâmetro --exclude-from :

$ rsync -avz --exclude-from=files-on-b.txt A C

Você pode precisar usar os prefixos na lista para garantir que corresponda ao diretório format / relative que o rsync está esperando de uma lista de exclusão. Sempre é uma boa ideia executar o rsync com a opção -n para ver o que está prestes a fazer sem realmente fazer isso.

Veja a página de manual do rsync e esta útil postagem no blog para saber mais sobre --exclude-from .

    
por 30.11.2012 / 06:42
2

Você pode usar a opção --compare-dest . Isso economiza tempo e espaço, pois você não precisa enumerar todo o conteúdo do primeiro destino e trabalhará de forma incremental com muitos destinos. Veja como funciona: depois de copiar o conteúdo de A para B, você executa:

rsync -avz --compare-dest=/path/to/B /path/to/A/ /path/to/C/

O rsync usará o conteúdo de B para ver o que deve transferir para C para tornar a cópia de A completa. Qualquer coisa que já esteja em B não será transferida. Observe que os caminhos absolutos para --compare-dest são obrigatórios, caso contrário, o caminho é considerado relativo ao destino.

Se, de qualquer forma, você tiver que dividir ainda mais seu destino, você poderá compará-lo a vários destinos anteriores, adicionando mais --compare-dest de argumentos.

    
por 16.10.2014 / 16:51

Tags