Você é daqueles que ainda usa FTP para copiar arquivos entre duas máquinas? Ei cara, já estamos no século XXI, este artigo nos introduz ao mundo do rsync, sinônimo de eficiência quando o assunto é cópia remota.
Antes de iniciarmos o artigo, vamos imaginar um cenário onde você
programou um mega portal que possui centenas de arquivos que
somados ocupam cerca de 300 MB em disco rígido. Existem duas
cópias do portal, uma no seu desktop de trabalho e outra no
servidor Linux em produção.
Certo dia você resolve fazer uma baita reforma no site e passa
uma porção enorme de tempo alterando seus scripts PHP, HTML,
folhas de estilo, imagens e tudo mais que se possa imaginar e
agora precisa atualizar a nova versão offline com a versão que
existe no servidor em produção.
O grande problema é que você passou horas programando e já não
recorda quais arquivos foram alterados. E agora, que solução te
vem à cabeça? Enviar os 300 MB por FTP para o servidor? Ou passar
outro bocado de horas selecionando os arquivos que você "lembra"
que alterou e fazendo seu upload um a um? Que nada, isso é um
mártir exclusivo para usuários de Windows. Quem programa em
desktops Linux e claro, hospeda seus projetos em servidores
Linux pode contar com a ferramenta dos sonhos, o rsync.
O que diabos é rsync
Rsync, como o nome sugere, é um programa que sincroniza remotamente
os dados entre duas máquinas. Por ser baseado no antigo rcp (remote
copy), o software herdou as propriedades de criptografia do protocolo
SSH, o que torna sua transmissão de dados mais segura que o FTP.
Além das propriedades de segurança, o rsync utiliza o protocolo
remote-update, o que aumenta assustadoramente sua velocidade e
diminui a quantidade de dados transferidos, pois são trocados entre
os servidores somente as diferenças entre dois grupos de arquivos.
Voltando ao nosso estudo de caso introdutório, se alteramos uma dúzia
de arquivos numa porção de centenas, ao executar um rsync do seu
desktop para o servidor, somente os arquivos alterados serão enviados
por upload e você ainda não corre o risco de algum espertinho utilizando
um sniffer1 na rede capturar sua senha de FTP em plain text.
1 - sniffer é um tipo de software utilizado para capturar
pacotes que trafegam pela sua rede.
Resumindo, existem pelo menos quatro situações onde o rsync pode te ajudar:
copiando (ou sincronizando) arquivos entre dois diretórios locais;
copiando (ou sincronizando) arquivos de sua máquina local para um
servidor remoto;
copiando (ou sincronizando) arquivos de um servidor remoto para
sua máquina local;
listando os arquivos de um diretório no servidor remoto (como um
"remote ls").
[5] Comentário enviado por lgustavo em 22/08/2003 - 10:39h
Muito boa essa ferramenta!!!!mas,
Como eu faço para especificar uma porta no rsync ?tentei -z --port=29922.
#rsync -Cravpe ssh /home/Admin/teste/ Admin@10.1.0.1:/home/Admin/teste/
ssh: connect to address 10.1.0.1 port 22: Connection refused
Obrigado!
[7] Comentário enviado por SirGalahad em 27/08/2003 - 12:04h
2 pontos a serem considerados.
Abordagem do Assunto : O autor inicia o artigo crucificando o FTP. O FTP é uma aplicativo excelente para transferência de arquivos. Ele realmente não sincroniza dados. O Rsync sincroniza. Portanto, é errado comparar um com o outro. O ideal seria ter iniciado a abordagem do assunto tratando apenas de uma ferramenta para sincronismo, a transferência é um mero detalhe.
Rcp encriptado? : O autor diz "Por ser baseado no antigo rcp (remote copy), o software herdou as propriedades de criptografia do protocolo SSH ...". Isso é uma inverdade. Justamente por ser antigo, o rcp, bem como todos os aplicativos da "família r" (rcp, rlogin, rshell etc.) não possuíam encriptação. Com o advento do SSH, todas as "funções r" foram assimiladas por esse novo aplicativo. Para efetuar uma cópia entre servers, utiliza-se o scp (Secure Copy), que é integrante do SSH, ao invés do rcp (Remote Copy).
Seria mais ou menos assim. Devido a alguns problemas, nao estou no exato momento com a minha maquina q tem o CONECTIVA, apenas so estou adiantando oq farei mais tarde. Por favor, responder para o email: hjromano@bol.com.br
[9] Comentário enviado por bbnasc em 21/06/2004 - 15:23h
Legal, Fábio, muito bom o artigo! Mas eu preciso tirar uma dúvida sobre o rsync. Eu tenho um servidor de backup Linux com 4 HD's IDE de 120Gb. A minha idéia é usar um desses HD's para fazer backup full do meu ambiente e os outros três pra fazer backup diferencial. Cada um desses HD's vai fazer backup diferencial em dois dias alternados (por exemplo, um deles faz de segunda e quinta, o outro de terça e sexta e outro de quarta e sábado). Já uso esse método no backup das minhas máquinas Linux, mas ainda não consegui implementar nos meus servers Windows. Isso porque o backup diferencial faz uma comparação dos dados com o último backup full... O problema é que o último backup full fica em outro HD, o rsync instalado no Windows não consegue fazer essa comparação (ao menos eu não descobri como). Você pode ajudar? Valeu!
[11] Comentário enviado por stgpereira em 06/02/2005 - 23:06h
Valeu Fábio. Parabéns e obrigado. Por que? Simples: sou inexperiente em Linux e nunca havia configurado uma rede. Aqui aprendi a configurar a rede e usar o grande RSYNC. Não aguentava mais ficar transferindo arquivos via CD ou disquete para manter em dia o desktop e notebook.Grande Site este aqui.
[14] Comentário enviado por presunto em 25/05/2006 - 12:39h
excelente!! ótimo trabalho, tava procurando um jeito de aprender rsync e não estava achando em lugar nenhum.
uma pergunta basica a respeito: um amigo meu tem um servidor FTP, nao existe um jeito de eu usar o rsync pra fazer um sistema de backup continuo?? ele tem o servidor ftp pq foi o que ele conseguiu pra botar o site dele em funcionamento, e acho que nao tem SSH lá... queria saber se existe um jeito?
[15] Comentário enviado por jeffleme em 19/07/2006 - 18:37h
Olá vou aproveitar para ver se alguém pode me ajudar tenho um servidor Windows 2000 e estou tentando copiar arquivos para um servidor red hat 9 via rsync. Ele copia quase todos os arquivos, porém quando tém acento não cópia. Alguém conhece alguma solução?
[17] Comentário enviado por sandrosms em 27/11/2006 - 16:34h
estou com um problemas usando as opcoes do rsync acima descritas no tutorial:
rsync: chown "/mnt/usbdisk2/install/setup.dll" failed: operation not permitted"
[18] Comentário enviado por dockism em 23/01/2007 - 14:43h
Show, fiz local aqui na minha maquina mesmo e funcionou blz....
mas vou testar ainda remotamete, mas assim, teria como deixar isso automatico, tipo x hora ele fazer esse backup?
[19] Comentário enviado por Dillon em 10/02/2007 - 23:07h
Lembrando aos amigos que para um sincronismo perfeito faz-se necessário incluir " --delete=excluded" ao final do comando. Desta forma o rsync apagará os arquivos do destino que não mais existem na origem.
[20] Comentário enviado por Dillon em 10/02/2007 - 23:12h
Aos colegas femartini e dockism, a resposta para vocês é o "cron". Digite crontab -e e agende o que for necessário. Para maiores informações consulte o man...
[21] Comentário enviado por Santclair em 20/04/2007 - 14:55h
Estou com uma dúvida. O rsync sincroniza o destino com a origem?: por exemplo se incluirmos um arquivo no no destino e mandarmos sincronizarmos (rsync) os arquivos incluidos no destino serão incluídos na origem.
[23] Comentário enviado por Santclair em 20/04/2007 - 15:18h
Mas no meu caso, os dois tem o rsync mas, por exemplo se eu mandar o comando numa determinada máquina destino (onde eu criei um novo arquivo) e mando o rsync rodar com as opções -r --update e outros, o que foi alterado na origem é atualizado no destino, mas o que foi alterado no destino não é alterado na origem.
[24] Comentário enviado por dockism em 20/04/2007 - 15:23h
sim, mas dai lá na origem vc tem que rodar o mesmo comando para ele enviar as atualização de lá para o destino....
porque pelo o que ta escrito no artigo funcionaria tipo um backup....
Destino > Origem
Pelo o que entendi vc quer fazer uma integração dos dois servidores, correto?
Acho que funcionaria pelo rsync sim, mas vc teria que fazer o comando no destino e na origem...assim eles variam a integração...
faz uns testes ai...
[25] Comentário enviado por Santclair em 20/04/2007 - 15:36h
Realmente, este teste eu já havia feito, e faz o que eu quero, mas eu pensei que o rsync faria isso com um simples comando em uma das duas máquinas. Mas de qualquer jeito obrigado pela ajuda.
só que surgiu um problema o root,para isso teria que ser feito com o sudo....ta problema resolvido....
mas gostaria de deixar isso automatico, como o nosso amigo Dillon disse para agendar teria que usar o comando "crontab -e" tá, o melhor seria montar um script para isso correto? alguem sabe como fazer isso, mas não esquecendo de root claro né...
[29] Comentário enviado por vanervainer em 27/12/2007 - 18:29h
Muito massa o artigo!
Só um comentário........... pelo que eu li no man do rsync se vc usar a opção -a vc não precisa usar nem a opção r nem a opção p, pois a=rlptgoD que respectivamente são:
r -> recursivo
l -> copia links simbólicos como links simbólicos
p -> preserva as permissões do arquivo
t -> atualiza a data e hora para a mais atual, porém não copia o arquivo se este não tiver sido alterado.
g -> mantém o grupo dono do arquivo
o -> mantém o dono do arquivo
D -> preserva devices
Valeu Fabio pelo artigo! Valeu galera pela atenção!
[31] Comentário enviado por Wesllay em 18/07/2008 - 15:48h
E ai cara blz? queria saber se este artigo é válido p/ freebsd tmb
tive o seguinte problema executei o comando
#rsync -Cravzp samba@10.0.0.5:/usr/dados/sistema/ /home/public/sistema/
Resultado copiou quase tudo só faltaram vários executáveis que parou meu trabalho com algumas horas. Sendo que o servidor a qual eu estava tirando os arquivos já estava dando seus ultimos suspiros quase me deu mau. existe alguma diferença deste comando p/ o freebsd?
[35] Comentário enviado por Wesllay em 16/08/2008 - 08:13h
Artigo muito bom, mas gostaria de ver se alguns tivervam o mesmo problema do que eu, ao executar o comando entre dois servidores samba, ocorreu um grande quantidade de perca de arquivos *.exe que estavam no samba, tive problema com vários executáveis e principalmente programas que rodavam do samba. Já viu uma situação como está?
[36] Comentário enviado por Jorge Kalado em 08/10/2008 - 16:34h
Ola, alguem pode me dar uma dica
Eu tenho um servidor Linux para backup e quero usar o RSYNC nele para fazer o backup das estações de trabalho de minha empresa que são Windows, só as estações de trabalho são em Windows, os servidores nosso são em Linux.
Comecei assim, criei em cada estação de trabalho (Windows) uma pasta chamada Backups que esta compartilhada para que somente o usuario administrator leia essa pasta, e nessa pasta os usuarios colocam nela arquivos que acham necessarios guardar para empresa.
E agora, eu queria saber como faço o rsync no linux, e queria que tambem fosse feito de forma que a primeira vez que fosse feito esse backup que viesse tudo e nas proximas vezes que só viesse arquivos novos ou atualizados recentemente.
As estações tem IP´s fixo, ja temos aqui o rsync rodando assim mais acho que mesmo funcionando não é a forma correta.
[39] Comentário enviado por lgguerino em 08/08/2010 - 22:56h
Olá! Preciso de uma ajuda da comunidade. Instalei o Linux Educacional 3.0 (é uma versão do KUbuntu, maiores informacões em http://linuxeducacional.com/) em diversos pcs de uma escola da minha cidade e gostaria que em cada reinicializacão o desktop fosse restaurado, assim evitando que vire uma esculhambacão nos pcs. Eu li um artigo escrito por Wesley Nascimento em http://www.donosdelanhouse.com.br/linux/deepfreeze-no-linux/ que diz o seguinte:
________________
A primeira coisa que se tem a fazer é fazer todas devidas configurações na home (papel de parede, ícones, atalhos, temas e etc), depois faça uma sincronização da pasta /home/usuário-configurado para uma pasta em que os usuários não tenham acesso:
# rsync -azv /home/aluno /mnt
No meu caso o usuário é aluno e a pasta escolhida foi a mnt.
Depois edite o arquivo /etc/init.d/bootmysc (no caso do Ubuntu, se for usar Fedora é /etc/rc.local).
# nano /etc/init.d/bootmysc
Acrescente no final do arquivo os seguintes comandos:
rm -rf /home/aluno
rsync -azv /mnt/aluno /home
(substitua o “aluno” por seu usuário a ser restaurado)
Explicando: tudo que um aluno baixa ou modifica ele estará salvando ou alterando em sua pasta de usuário, então basta apagar sua pasta de usuário e levantá-la novamente usando o rsync, você poderia usar o “cp” também, mas eu achei o rsync mais rápido.
OBS: Se você posteriormente quiser fazer qualquer alteração na home terá que sincronizá-la novamente para a pasta que foi salva, por exemplo, troquei o papel de parede e depois:
# rsync -azv /home/aluno /mnt
________________
Pois é...só que não consegui fazer os passos descritos acima...dá erro já no primeiro comando.
Eu tenho criados uma conta de administrador(root) e outra de usuário limitado(aluno).
Eu quero fazer uma sincronizacão de pastas localmente, tipo salvar os arquivos do Desktop do aluno numa pasta do administrador(onde aluno não tenha acesso) e carregar a cada inicializacão do sistema.
Desde já agradeco a ajuda e a atencão dispensada à minha dúvida. Acredito a solucão desse pequeno problema será de muita utilidade para todos que utilizam linux em pcs, principalmente em escolas.
[41] Comentário enviado por rafacosme em 16/09/2010 - 21:34h
Gostaria de fazer o BACKUP do SUSE LINUX 10 para o WINDOWS XP. Já instalei o RSYNC mas o script abaixo não funcionou:
@ECHO OFF
REM *****************************************************
REM Script de Backup
REM Autor: Dailson Fernandes
REM Data: 16/09/2010
REM Função: Faz o backup das pastas importantes do usuário
REM *****************************************************
SETLOCAL
SET CWRSYNCHOME=%PROGRAMFILES%\CWRSYNC
SET CYGWIN=nontsec
SET HOME=%HOMEDRIVE%%HOMEPATH%
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH%
[44] Comentário enviado por UnsigneD em 05/12/2010 - 19:25h
Boas
Eu tenho uma máquina com ubuntu que serve para armazenar os backus das outras máquinas da rede, é como se fosse um servidor de backups da rede. Onde eu uso o rsync para fazer os backups das máquinas que quero. Eu gostaria de fazer com que o rsync funcionasse automaticamente durante todos os dias a hora definida por mim, utilizando o crontab e o rsync mas também queria utilizar encriptação, chaves privadas e públicas!
[45] Comentário enviado por romuleta em 12/01/2011 - 18:50h
A melhor solução de backup em disco rígido é BACKUPPC + RSYNC. Os clientes podem ter qualquer S.O. que rode rsync. Nos horários especificados por mim o BACKUPPC vai nos clientes e pega só o backup incremental, e uma vez na semana faz o FULL. Meu chefe tentou montar um servidor chamado Bacula e desistiu, por ser mto complicado. Montei o BACKUPPC no Ubuntu 10.04 LTS, sem dificuldades, e tá redondinho. Recomendo!
Quem se aventurar, pode solicitar minha ajuda, principalmente se tiver clientes Windows 64bits, pois o cliente rsync pra windows disponível no site do BACKUPPC não funciona com win64. Tive que fazer uma gambiarra de DLLs pra funfar.
[48] Comentário enviado por alexandr3 em 10/09/2012 - 09:58h
Olá bom dia a todos.
Utilezei o: rsync -Cravzp fabio@10.0.0.5:/etc/ para verificar o que tenho no servidor remoto e no servidor local(backup do remoto), agora, alguem sabe como fazer para eu comparar esses dois arquivos, para saber se todo conteudo do servidor remoto esta no servidor local de backup?
[49] Comentário enviado por rodrigo.leonel em 09/04/2013 - 15:46h
como usar o rsync em maquinas do amazon colocando a porta e a chave .pem como seria a sintaxe desse comando, fazendo backup la do servidor pra maquina local
[50] Comentário enviado por k_cesar em 10/05/2014 - 13:43h
Só ficou uma dúvida.
tenha pasta onde esta os arquivos encaminhar para server, o problema e que nesse server outro programa vai retirar o arquivo.
Com rsync
Estava pensado se toda hora coloco um arquivo rsync copia o arquivo para server, outro programa vai retirar esse arquivo e essa pasta vai ficar sem nada.
rsync vai enviar outro novamente então isso vai gerar loop.
[54] Comentário enviado por rafaelsantos2802 em 30/05/2017 - 12:02h
Excelente tutorial.
Preciso sincronizar uma partição com o rsync, porém devido ao tamanho de uma das pastas na origem quero que ela não seja copiada para o destino. Alguém Conseguiria me ajudar com esse detalhe.
[55] Comentário enviado por fabio em 30/05/2017 - 12:52h
[54] Comentário enviado por rafaelsantos2802 em 30/05/2017 - 12:02h
Excelente tutorial.
Preciso sincronizar uma partição com o rsync, porém devido ao tamanho de uma das pastas na origem quero que ela não seja copiada para o destino. Alguém Conseguiria me ajudar com esse detalhe.
[57] Comentário enviado por rafaelsantos2802 em 30/05/2017 - 15:28h
[55] Comentário enviado por fabio em 30/05/2017 - 12:52h
[54] Comentário enviado por rafaelsantos2802 em 30/05/2017 - 12:02h
Excelente tutorial.
Preciso sincronizar uma partição com o rsync, porém devido ao tamanho de uma das pastas na origem quero que ela não seja copiada para o destino. Alguém Conseguiria me ajudar com esse detalhe.