Rsync pode quase substituir completamente o cp e o scp, além disso transferências interruptas são reiniciadas eficientemente. Uma barra invertida (e mesmo a ausência) tem sentidos diferentes, a man page é boa… aqui alguns exemplos:
Cópia os diretórios com conteúdo completo:
# rsync -a /home/colin/ /backup/colin/ # "archive" mode. ex. mantém o mesmo # rsync -a /var/ /var_bak/ # rsync -aR --delete-during /home/user/ /backup/ # usa relativo (veja abaixo) # /opt/local/bin/rsync -azv --iconv=UTF-8-MAC,UTF-8 ~/Music/flac/ me@server:/dst/ # converte nomes de arquivos (filenames) UTF8 do OSX para UTF8 do Windows
O mesmo que o anterior, mas na rede e com compressão. Rsync utiliza SSH para o transporte por padrão e utilizará a chave ssh se elas forem definidas. Utilize “:” da mesma forma que no SCP. Uma copia remota típica:
# rsync -axSRzv /home/user/ user@server:/backup/user/ # Cópia para um lugar remoto # rsync -a 'user@server:My\ Documents' My\ Documents # Quote AND escape spaces para o shell remoto
Exclui qualquer diretório tmp dentro de /home/user/ e mantém a hierarquia de pastas (diretórios) relativa, que é o diretório remoto terá a estrutura /backup/home/user/. Isso é tipicamente utilizado para backups.
# rsync -azR --exclude=tmp/ /home/user/ user@server:/backup/
Utilize a porta 20022 para a conexão ssh:
# rsync -az -e 'ssh -p 20022' /home/colin/ user@server:/backup/colin/
Utilizando a daemon rsync (utilizado com “::”) é muito mais rápido, mas não criptografado no ssh. O local do /backup é definido pela configuração em /etc/rsyncd.conf. A variável RSYNC_PASSWORD pode ser definida para evitar a necessidade de entrar com a senha manualmente.
# rsync -axSRz /home/ ruser@hostname::rmodule/backup/
# rsync -axSRz ruser@hostname::rmodule/backup/ /home/ # To copy back
Algumas opções importantes:
-a, --archive
modo de arquivação (archive mode); o mesmo que -rlptgoD (sem -H)-r, --recursive
recursivo dentro dos diretórios-R, --relative
utiliza nomes de caminhos relativos-H, --hard-links
preserva os hard links-S, --sparse
manipula eficientemente arquivos dispersos-x, --one-file-system
não ultrapassa os limites do file system--exclude=PATTERN
exclui combinações PATTERN (PADRÃO) de arquivos--delete-during
receiver exclui durante o xfer, não antes--delete-after
receiver exclui depois de transferir, não antes
Rsync no Windows
Rsync está disponível para Windows através do cygwin ou como um pacote stand-alone em cwrsynchttp://sourceforge.net/projects/sereds. Isso é muito conveniente para backups automatizados. Instale um deles (não ambos) e adicione o path (caminho) ao sistema de variáveis do Windows (Windows system variables): # Control Panel -> System -> tab Advanced, button Environment Variables. Edite o sistema de variável “Path” e adicione o caminho completo (full path) ao rsync instalado, ex. C:\Program Files\cwRsync\bin or C:\cygwin\bin. Dessa forma os comandos rsync
e ssh
ficam disponíveis em um shell de comandos do Windows.
Autenticação de chave pública
Rsync é automaticamente tunelado no SSH e assim utiliza a autenticação SSH no servidor. Backups automáticos tem que evitar a interação de um usuário, para isso a autenticação de chave pública do SSH podem ser usadas e o comando rsync rodará sem uma senha.
Todos os comandos a seguir são executados dentro de um console Windows. Em um console (Start -> Run -> cmd) crie e faça upload da chave como descrito em SSH, altere “user” e “server” como apropriado. Se o arquivo authorized_keys2 não exista ainda, simplesmente copie id_dsa.pub para authorized_keys2 e suba-a.
# ssh-keygen -t dsa -N '' # Crie uma chave pública e uma privada # rsync user@server:.ssh/authorized_keys2 . # Copie o arquivo localmente a partir do servidor # cat id_dsa.pub >> authorized_keys2 # Ou utilize um editor para adicionar a chave # rsync authorized_keys2 user@server:.ssh/ # Copie o arquivo de volta para o servidor # del authorized_keys2 # Remova a copia local
Agora teste com (em uma linha):
rsync -rv "/cygdrive/c/Documents and Settings/%USERNAME%/My Documents/" \ 'user@server:My\ Documents/'
Backup automático
Use um arquivo batch automatizar o backup e adicione o arquivo nas tarefas agendadas (scheduled tasks) (Programs -> Accessories -> System Tools -> Scheduled Tasks). Por exemplo crie o arquivo backup.bat e substitua user@server.
@ECHO OFF REM rsync the directory My Documents SETLOCAL SET CWRSYNCHOME=C:\PROGRAM FILES\CWRSYNC SET CYGWIN=nontsec SET CWOLDPATH=%PATH% REM uncomment the next line when using cygwin SET PATH=%CWRSYNCHOME%\BIN;%PATH% echo Press Control-C to abort rsync -av "/cygdrive/c/Documents and Settings/%USERNAME%/My Documents/" \ 'user@server:My\ Documents/' pause