Dicas e truques favoritos de rsync

57

Quanto mais uso, rsyncmais percebo que é um canivete suíço de transferência de arquivos. Existem tantas opções. Recentemente, descobri que você pode ir --remove-source-filese ele excluirá um arquivo da fonte quando for copiado, o que torna um pouco mais um movimento do que um programa de cópia. :)

Quais são suas dicas e truques favoritos de rsync?

Rory
fonte

Respostas:

19

Tente usar o rsync versão 3 se precisar sincronizar muitos arquivos! A V3 constrói sua lista de arquivos incrementalmente e é muito mais rápida e usa menos memória que a versão 2.

Dependendo da sua plataforma, isso pode fazer muita diferença. No OSX, a versão 2.6.3 levava mais de uma hora ou falha ao tentar criar um índice de 5 milhões de arquivos enquanto a versão 3.0.2 que eu compilei começou a copiar imediatamente.

robcast
fonte
Uma coisa a observar é que, se você usar algumas opções (como --delete-beforepor exemplo), o antigo comportamento "compilar primeiro a lista" será usado, pois é necessário que essas opções funcionem corretamente - portanto, se você não vir esse comportamento, verifique se o outras opções que você está usando são conhecidas para impedir que isso seja possível. Isso pode ser útil se você estiver usando o rsync interativamente em uma árvore grande e quiser forçar a verificação inicial, para que a saída --progressseja precisa (ou seja, a contagem de "objetos a serem comparados" nunca aumentará, pois nenhum novo objeto será encontrado após a verificação inicial) )
precisa saber é o seguinte
18

Usando --link-destpara criar backups baseados em instantâneo com economia de espaço, nos quais você parece ter várias cópias completas dos dados de backup (uma para cada execução de backup), mas os arquivos que não são alterados entre as execuções são vinculados ao invés de criar novas cópias, economizando espaço.

(na verdade, eu ainda uso o método rysnc-followed-by-cp -al que alcança a mesma coisa, consulte http://www.mikerubel.org/computers/rsync_snapshots/ para obter uma descrição antiga, mas ainda muito boa das duas técnicas e questões relacionadas)

A principal desvantagem dessa técnica é que, se um arquivo é corrompido devido a um erro no disco, ele também é corrompido em todos os instantâneos vinculados a esse arquivo, mas também tenho backups offline que protegem contra isso em uma extensão decente. Outra coisa a se observar é que seu sistema de arquivos possui inodes suficientes ou você os esgotará antes de ficar sem espaço em disco (embora eu nunca tenha tido um problema com os padrões ext2 / 3).

Além disso, nunca esqueça o muito útil --dry-runpara uma paranóia um pouco saudável, especialmente quando você estiver usando as --delete*opções.

David Spillett
fonte
6
+1 para --dry-run #
David Z
1
Note-se que -n é o atalho para --dry-run
ctennis
3
Eu prefiro ficar com os nomes longos, especialmente em scripts que outros podem acabar mantendo. Isso torna mais claro o que se destina, sem referência aos documentos.
David Spillett
+1 Eu implementei uma solução de backup de muitos TB em muitas máquinas com o método --link-dest para instantâneos vinculados como descrito acima - funcionou perfeitamente.
6198 matja
Se você gosta de - backups de link-dest, consulte Dirvish, que usa o rsync sob o capô
hfs
14

Se você precisar atualizar um site com alguns arquivos enormes em um link lento, poderá transferir os arquivos pequenos da seguinte maneira:

rsync -a --max-size = 100K / var / www / there: / var / www /

faça isso para os arquivos grandes:

rsync -a --min-size = 100K --bwlimit = 100 / var / www / there: / var / www /

O rsync tem muitas opções úteis para sites. Infelizmente, ele não possui uma maneira integrada de detectar atualizações simultâneas; portanto, você precisa adicionar lógica aos scripts cron para evitar gravações sobrepostas de arquivos enormes.

Prumo
fonte
10

Eu uso a opção --existing ao tentar manter um pequeno subconjunto de arquivos de um diretório sincronizado para outro local.

TCampbell
fonte
Obrigado! Isso me salvou de algumas regras desagradáveis ​​para a criação de regras de filtro.
benzado
8

--rsh é meu.

Usei-o para alterar a cifra no ssh para algo mais rápido ( --rsh="ssh -c arcfour") também para configurar uma cadeia de sshs (recomendo usá-lo com ssh-agent) para sincronizar arquivos entre hosts que não podem falar diretamente. ( rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/)

Stephen Paul Lesniewski
fonte
7
--time-limit

Quando esta opção é usada, o rsync pára após T minutos e sai. Eu acho que essa opção é útil ao sincronizar uma grande quantidade de dados durante a noite (horário não ocupado) e depois parar quando é hora de as pessoas começarem a usar a rede, durante o dia (horário ocupado).

--stop-at=y-m-dTh:m

Esta opção permite especificar a que horas parar o rsync.

Batch Mode

O modo de lote pode ser usado para aplicar o mesmo conjunto de atualizações a muitos sistemas idênticos.

jftuga
fonte
Útil! Eu estava usando o comando "at" antes para interromper o processo
Lionel
Patches de origem: rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz ; Win32 binário com o patch incluído: itefix.no/i2/cwrsync
jftuga
2
Infelizmente, essas opções não estão disponíveis no rsync distribuído com as distribuições Redhat / Centos ou Ubuntu.
22415 IanB
@Lionel: Como você está usando atpara matar o processo?
IMTheNachoMan 15/09/16
6

Se você está se perguntando até que ponto um rsync de execução lenta chegou e não usou -v para listar arquivos à medida que eles são transferidos, você pode descobrir quais arquivos ele abriu:

 ls -l /proc/$(pidof rsync)/fd/*

em um sistema que possui / proc

Por exemplo, o rsync foi suspenso para mim agora mesmo, embora o sistema remoto parecesse ter um monte de espaço restante. Esse truque me ajudou a encontrar o arquivo inesperadamente grande, do qual não me lembrava, que não se encaixava do outro lado.

Também me contou informações um pouco mais interessantes - a outra extremidade aparentemente desistiu, pois havia também um link de soquete quebrado:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'
nealmcb
fonte
5

--archive é uma opção padrão (embora não seja o padrão) para tarefas do tipo backup, o que garante que a maioria dos metadados dos arquivos de origem (permissões, propriedade etc.) sejam copiados.

No entanto, se você não quiser usá-lo, muitas vezes ainda desejará incluir --times, que será copiado nos tempos de modificação dos arquivos. Isso torna o próximo rsync executado (supondo que você esteja fazendo isso repetidamente) muito mais rápido, pois o rsync compara os tempos de modificação e ignora o arquivo se ele não for alterado. Surpreendentemente (pelo menos para mim) essa opção não é o padrão.

Andrew Ferrier
fonte
4

O que eu mais uso é definitivamente o --exclude-fromque permite especificar um arquivo contendo itens a serem excluídos.

Também acho --chmodmuito útil, pois permite que as permissões terminem em um estado desejável, mesmo que sua fonte esteja desarrumada.

innaM
fonte
4

--backup-dir = date +%Y.%m.%d--delete Estamos excluindo, mas fazendo uma cópia ... apenas no caso


fonte
4

O meu é --inplace. O Works se pergunta quando o servidor de backup está executando o ZFS ou o btrfs e você faz instantâneos nativos.

Hubert Kario
fonte
3

Obviamente, também existem as --deleteque remove coisas do destino que não podem ser encontradas na fonte.

innaM
fonte
2

cwrsync - Rsync para Windows http://www.itefix.no/i2/node/10650

Esta versão inclui o OpenSSH para que você possa transferir arquivos por um canal seguro.

jftuga
fonte
Eu uso o cwrsync, e é ótimo. Que bom que alguém trouxe essa incrível capacidade para o Windows.
Andrew Ensley
2
--partial 

Em caso de interrupções

--bwlimit=100

Para limitar a largura de banda - bom para copiar arquivos grandes, diretórios

rebelbass
fonte
Qual é a unidade bwlimit? bits por segundo, bytes por segundo?
Timo Kähkönen
@Timo, bwlimit está em KBytes / segundo.
precisa
1

Se você configurou o rsync como um daemon no servidor, basta navegar pelos módulos compartilhados como qualquer outra listagem de diretório. Então você pode ver quais caminhos estão disponíveis e quais não.

sybreon
fonte
1

Quando eu uso o GlusterFs, temos um gargalo com arquivos T com tamanho zero; para sincronizar entre réplica ou bloco com falha, devemos usar --min-size=1para não sincronizar o arquivo vazio do servidor com falha

vahid chakoshy
fonte