Preservando links simbólicos de destino existentes com o rsync

9

Estou usando o rsync (1) para manter um repositório debian local atualizado. Recentemente, o disco que estou usando para armazená-lo começou a ficar com pouco espaço, então decidi usar links simbólicos para permitir que eu movesse alguns dos diretórios para outro disco de tamanho similar.

Infelizmente, parece que o rsync está excluindo os links simbólicos e reabastecendo o disco quase cheio. Após algumas pesquisas, descobri a opção --keep-dirlinks para o rsync, que parece feito sob medida para corrigir o meu problema.

Apenas isso não acontece. Os links simbólicos no destino ainda estão sendo excluídos.
Aqui está o meu comando rsync:

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
 --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
 $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/

Os EXCLUDEs expandem-se para eliminar um grande número de arquiteturas nas quais não estou interessado, nos moldes de --exclude binary-alpha/ --exclude disks-alpha ... . Antes do lançamento do rsync, meu diretório de pool é assim:

lrwxrwxrwx  1 root root   23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib
drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main
lrwxrwxrwx  1 root root   24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free

Uma vez que o rsync entra em ação, eu entendo:

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/

E assim por diante, e os links simbólicos são substituídos por diretórios cheios de arquivos.

Algumas das outras opções de rsync estão interferindo com --keep-dirlinks ? Quais não posso combinar? Ou é a ordem das opções que está causando meu problema?

    
por unkilbeeg 22.09.2014 / 23:10

1 resposta

7

As opções --delete e --delete-excluded interferem no seu plano, pois percebem que o link simbólico não está presente na origem e, portanto, o exclui.

Isso só acontece quando você diz rsync para copiar todo o diretório com a notação source/ target (a barra final após a origem). Se você usar source/* target , o shell expandirá a lista de arquivos e diretórios a serem copiados e isso não acontecerá (mas tente com --dry-run primeiro).

No entanto, em vez desta configuração frágil, recomendo combinar os dois discos com a ajuda do LVM para formar um grande volume sem precisar desse tipo de truque.

    
por 30.09.2014 / 05:13