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

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

Só que não. 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 se expandem para eliminar um grande número de arquiteturas nas quais não estou interessado, ao longo das linhas de --exclude binary-alpha/ --exclude disks-alpha .... Antes do lançamento do rsync, meu diretório de pool fica 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

Depois que o rsync entra em ação, recebo o seguinte:

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 do rsync estão interferindo --keep-dirlinks? Quais não posso combinar? Ou é a ordem das opções que está causando o meu problema?

unkilbeeg
fonte

Respostas:

7

As opções --deletee --delete-excludedinterferem no seu plano, pois percebem que o link simbólico não existe na fonte e, portanto, a exclui.

Isso acontece apenas quando você instrui rsynca copiar o diretório inteiro com a source/ targetnotação (a barra após a fonte). 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 --dry-runprimeiro).

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

Sven
fonte
Obrigado! Mudei o script e parece estar funcionando. Isso me dará um pouco de tempo - o disco ainda tenderá a encher, mas eu tenho tempo para mudar as coisas. Você está certo em combinar os dois com o LVM. Eu já estava considerando isso, mas arrastando meus pés, pois significa mover as coisas e depois movê-las novamente. Melhor, mais cedo ou mais tarde, no entanto, eu acho.
unkilbeeg
Eu tive um problema semelhante que foi resolvido usando --keep-dirlinks sem a opção -a que eu estava usando. Aborrecimento "menor", como no terceiro parágrafo, os sistemas de arquivos que estou usando são "discos" de SAN de 64 T. Embora seja possível que múltiplos possam ser combinados em unidades ainda maiores, por exemplo, unidades de 256 terabytes, espero que os administradores tenham razões para os tamanhos que temos. Às vezes, o que parece "truque" é apenas descobrir como viver com o que você tem.
user1683793
Minha solução final foi um novo hardware. A máquina original tinha idade suficiente para suportar apenas unidades IDE, e a maior unidade que você poderia obter naqueles dias era 512G.
Unkilbeeg