rsync e links simbólicos


69

Quero fazer backup do meu diretório pessoal 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 de.

  1. rsyncO -asinalizador inclui o -lsinalizador (por exemplo, "copiar links simbólicos como links simbólicos"). Isso significa apenas que ele copiará o link ou que 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 envolvem a cópia de centenas de gigabytes dos quais não preciso fazer backup.
  2. Com medo (mas não certo) de rsync -acopiar todos os arquivos de mídia, adicionei a --no-linksflag. Este não parece ser o comportamento que eu quero. Ele simplesmente ignora a cópia de qualquer link problemático, porque eu tenho links que eu quero copiar (por exemplo, links para arquivos de cabeçalho comuns de diferentes diretórios do projeto).
  3. Supondo que o número 1 acima (sem a --no-linksbandeira) seja o que eu realmente quero e ele apenas copia o link sem copiar os arquivos vinculados, os links serão interrompidos quando o backup for feito? Por exemplo, posso rsyncfornecer o diretório /home/me/projects/miscpara /media/extdrive/backup/home/me/projects/misc. Nesse caso, suponho que rsyncnão seja inteligente o suficiente nem tente corrigir o conteúdo dos links simbólicos para as alterações de diretório relativas. Isso está correto? Tudo bem, não importa se os links estão quebrados nos diretórios de backup, desde que sejam corrigidos e funcionem se chegar a hora em que precisarem ser restaurados.

3
O sinalizador -L é provavelmente o que você deseja. Na página de manual rsync no Centos Linux: "-L, --copy-links transforma o link simbólico no arquivo / diretório referente". Eu recomendo testar isso com alguns diretórios e links de exemplo para garantir que você não substitua nenhum dado que não pretenda. Editado para incluir aviso sobre possível perda de dados. ;)
Mick T

Respostas:


90
  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, uma opção diferente--copy-links , descrevem 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 que --linksfaz e, portanto, solicitando o comportamento errado (consulte a resposta nº 1).

  3. Por padrão, ele copia exatamente o destino .

    Ou seja, se o link apontar para um caminho absoluto (por exemplo /home/me/projects), continuará apontando para o mesmo caminho; não quebrará , continuará apontando para um arquivo no diretório inicial e não no arquivo de backup.

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

    Infelizmente, parece não 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 relativos (o que geralmente é uma boa ideia, para links dentro de $ HOME).


2
ummm, então qual é a diferença entre --copy-linkse --links?
Alexander Mills

--copy-links= -Le --links= -l. Veja a descrição da documentação na minha resposta aqui: superuser.com/a/1388910/425838
Gabriel Staples

12

O @grawity tem uma ótima resposta, mas aqui está uma captura de tela de algumas informações relevantes da documentação. Aqui está o texto exato das opções -le -L, 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/rsync ou man rsyncpáginas de manual no Linux.

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

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

Observe, para meus rsynccomandos e instruções favoritos , incluindo cópia, espelhamento, exibição do progresso total ...

... fazendo corridas secas, registrando stderr e stdout para arquivos (separados), mostrando estatísticas, usando um arquivo de inclusão caminho e um arquivo de exclusão , etc, veja a minha resposta completa aqui sob a 2ª secção, intitulada " 2. rsync Comando-line ferramenta (Linux, Windows com Cygwin) ": https://superuser.com/a/1464264/425838

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.