
Quero fazer backup do meu diretório inicial em uma unidade externa todas as noites usando um cron
trabalho para executar rsync
. Não tenho certeza do comportamento exato dos rsync
sinalizadores de link simbólico.
rsync
O sinalizador de-a
inclui o-l
sinalizador (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.- Temendo (mas não tenho certeza) que isso
rsync -a
copiaria todos os arquivos de mídia, adicionei o--no-links
sinalizador. 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). - Supondo que o número 1 acima (sem o
--no-links
sinalizador) 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 usarrsync
o diretório de origem/home/me/projects/misc
para/media/extdrive/backup/home/me/projects/misc
. Neste caso, presumorsync
que 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
"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
--links
for especificado, os links simbólicos serão recriados com o mesmo destino no destino.Não é o comportamento que você deseja porque você está interpretando mal o
--links
que faz e, portanto, pedindo o comportamento errado (veja a resposta nº 1).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 -L
opções, por exemplo, que parecem ser as mais relevantes em questão:
Fonte:https://linux.die.net/man/1/rsyncou man rsync
páginas de manual no Linux.
Observe também que a opção -a
( --archive
) também inclui a -l
opção dentro dela, o que é incrível, já que eu realmente gosto de usar a -l
opçã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 rsync
emexFATouGORDOsistemas de arquivos, no entanto, eles fazemnãosuporta links simbólicos nem proprietários, grupos e permissões POSIX, entãoremova -lpgo
e use -rtD
em vez de -a
!Você -v
também pode adicionar "detalhado", se desejar, e usar-vrtD
.
Veja mais aqui:
- [minha resposta]Melhores configurações para usar rsync com sistemas de arquivos FAT e exFAT
- rsync parece substituir o arquivo já existente no ExFat
- https://superuser.com/a/384849/425838
- https://learn.microsoft.com/en-us/windows/win32/fileio/filesystem-funcionality-comparison
Observe, para meus rsync
comandos 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