rsync e links simbólicos

rsync e links simbólicos

Quero fazer backup do meu diretório inicial em uma unidade externa todas as noites usando um crontrabalho para executar rsync. Não tenho certeza do comportamento exato dos rsyncsinalizadores de link simbólico.

  1. rsyncO sinalizador de -ainclui o -lsinalizador (ou seja, "copiar links simbólicos como links simbólicos"). Isso significa apenas que vaicopie o linkou que ele seguirá o link e copiará tudo no diretório link-to? Quero evitar isso porque tenho links para diretórios cheios de arquivos de mídia que envolveriam a cópia de centenas de gigabytes dos quais não preciso fazer backup.
  2. Temendo (mas não tenho certeza) que isso rsync -acopiaria todos os arquivos de mídia, adicionei o --no-linkssinalizador. Este não parece ser o comportamento que desejo. Ele simplesmente ignora a cópia de qualquer link que seja problemático porque tenho links que desejo copiar (por exemplo, links para arquivos de cabeçalho comuns de diferentes diretórios de projetos).
  3. Supondo que o número 1 acima (sem o --no-linkssinalizador) seja o que eu realmente quero e apenas copie o link sem copiar os arquivos vinculados, os links serão quebrados quando o backup for feito? Por exemplo, posso usar rsynco diretório de origem /home/me/projects/miscpara /media/extdrive/backup/home/me/projects/misc. Neste caso, presumo rsyncque não seja inteligente o suficiente nem tente corrigir o conteúdo dos links simbólicos para as alterações relativas de diretório. Isso está correto? Tudo bem, não importa se os links estão quebrados nos diretórios de backup, desde que sejam consertados e funcionem se chegar o momento em que precisarem ser restaurados.

Responder1

  1. "Copiar links simbólicos como links simbólicos" significa exatamente o que diz: se o rsync vir um link simbólico no diretório de origem, ele criará um link simbólico idêntico no destino.Nada mais.

    (Algumas linhas abaixo na página de manual, umdiferenteopção, --copy-links, descreve o comportamento oposto (sempre copiando os dados) que você descreveu como indesejável.)

    Veja também a seção "Links simbólicos":

    Se --linksfor especificado, os links simbólicos serão recriados com o mesmo destino no destino.

  2. Não é o comportamento que você deseja porque você está interpretando mal o --linksque faz e, portanto, pedindo o comportamento errado (veja a resposta nº 1).

  3. Por padrão, ele copia o destinoexatamente.

    Ou seja, se o link apontou para um caminho absoluto (ex. /home/me/projects), ele continuará apontando para o mesmo caminho; não vaiquebrar, ele continuará apontando para um arquivo em seu diretório inicial, e não para aquele em seu backup.

    Enquanto isso, se o link apontar para um caminho relativo (por exemplo ../../projects, ), ele irátambémcontinue apontando para o mesmo caminho, mas como é relativo à localização do link simbólico, o link simbólico no seu backup também apontará para um arquivo no seu backup.

    Infelizmente não parece haver nenhuma opção para traduzir links simbólicos absolutos para sua nova base (apenas uma opção para quebrá-los completamente). Para evitar problemas, você deve alterar os links simbólicos existentes para links relativos (o que geralmente é uma boa ideia, para links dentro de $HOME).

Responder2

@grawity tem uma ótima resposta, mas aqui está uma captura de tela de algumas informações relevantes dea documentação. Aqui está o texto exato de -l(letra L minúscula, não um) e -Lopções, por exemplo, que parecem ser as mais relevantes em questão:

insira a descrição da imagem aqui

Fonte:https://linux.die.net/man/1/rsyncou man rsyncpáginas de manual no Linux.

Observe também que a opção -a( --archive) também inclui a -lopção dentro dela, o que é incrível, já que eu realmente gosto de usar a -lopção de preservar meus links simbólicos da origem como links simbólicos no destino. Nas páginas de manual ( man rsync):

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

E aqui estão os significados de -rlptgoD, também de man rsync:

   --recursive, -r          recurse into directories
   --links, -l              copy symlinks as symlinks
   --perms, -p              preserve permissions
   --times, -t              preserve modification times
   --group, -g              preserve group
   --owner, -o              preserve owner (super-user only)
   -D                       same as --devices --specials
   --devices                preserve device files (super-user only)
   --specials               preserve special files ["such as named sockets and fifos"]

Importante!:

Se usar rsyncemexFATouGORDOsistemas de arquivos, no entanto, eles fazemnãosuporta links simbólicos nem proprietários, grupos e permissões POSIX, entãoremova -lpgoe use -rtDem vez de -a!Você -vtambém pode adicionar "detalhado", se desejar, e usar-vrtD.

Veja mais aqui:

  1. [minha resposta]Melhores configurações para usar rsync com sistemas de arquivos FAT e exFAT
  2. rsync parece substituir o arquivo já existente no ExFat
  3. https://superuser.com/a/384849/425838
  4. https://learn.microsoft.com/en-us/windows/win32/fileio/filesystem-funcionality-comparison

Observe, para meus rsynccomandos e instruções favoritos, incluindo copiar, espelhar, mostrar o progresso total...

... fazendo testes, registrando stderr e stdout em arquivos (separados), mostrando estatísticas, usando umincluir arquivo de caminhoe umexcluir arquivo, etc, veja minha resposta completa aqui na 2ª seção, intitulada "2. Ferramenta de linha de comando rsync (Linux, Windows com Cygwin)":https://superuser.com/a/1464264/425838

informação relacionada