FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Lista de Membros Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > GNU-Linux, FreeBSD e Software Livre > Interfaces, aplicativos, multimídia e wine
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 666.585 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 22-01-2009, 9:11   #1 (permalink)
realmagnum
Newbie
 
Registrado em: May 2006
Mensagens: 10
Reputação: 0 realmagnum possui ótimo potencial
Padrão Como sincronizar 2 pastas, incluindo arquivos deletados, usando rsync?

Procurando respostas para minha dúvida, acessei o seguinte tópico: Como sincronizar 2 pastas (diretórios)?

Lá e em outros lugares da Web há muitas informações sobre o rsync, sendo que cheguei a configurá-lo e utilizá-lo com relativo sucesso. Passada a minha fase de testes, resolvi elaborar um pequeno script, com a ajuda do que li por aí. O script seria algo assim:

Código:
#!/bin/bash INICIO=`date +%d/%m/%Y-%H:%M:%S` LOG=/var/log/rsync/`date +%Y-%m-%d`.txt echo " " >> $LOG echo " " >> $LOG echo "|--------------------------------------------" >> $LOG echo " Sincronizacao iniciada em $INICIO" >> $LOG sudo rsync -ravzuptP /home/magnum/Documentos /media/Servidor/ >> $LOG sudo rsync -ravzuptP --delete /media/Servidor/ /home/magnum/Documentos >> $LOG FINAL=`date +%d/%m/%Y-%H%:M:%S` echo " Sincronizacao Finalizada em $FINAL" >> $LOG echo "|--------------------------------------------" >> $LOG echo " " >> $LOG echo " " >> $LOG
Do script acima, o que realmente importa aqui são apenas estes dois comandos, nesta ordem:

Código:
sudo rsync -ravzuptP /home/magnum/Documentos /media/Servidor/ sudo rsync -ravzuptP --delete /media/Servidor/ /home/magnum/Documentos
Vou explicar qual foi minha idéia. No meu escritório há um servidor rodando Windows XP Professional que possui uma pasta acessada por todos os computadores Windows XP Pro e Home, e o meu, um glorioso Ubuntu 8.10.

Ouvi falar em algumas configurações em SSH, mas isso me pareceu muito complexo para o sistema amador aqui do escritório. Além do mais, eu não sou o responsável pela rede e não poderia ficar fazendo alterações no servidor. Assim, seguindo as informações desse fórum: http://ubuntuforums.org/showthread.php?t=288534, eu montei a pasta que estava no servidor em /media/Servidor.

Mas, como o bom é sempre complicar, eu queria poder trabalhar com o meu notebook em casa, tendo todos os arquivos do escritório à disposição. Assim, eu tive a idéia de fazer um "sudo rsync -Cravzp /media/Servidor/ /home/magnum/Documentos". Funcionou perfeitamente. O "-Cravzp" eu tirei da internet, sem ler o man rsync.

Mas, como é sempre bom complicar mais um pouquinho, eu queria que os arquivos que eu tivesse feito no meu notebook em minha casa fossem mandados para o Servidor. Simples, não? Bastava fazer um "sudo rsync -ravzuptP /home/magnum/Documentos /media/Servidor/". Lendo o man rsync, eu resolvi alterar as opções "-Cravzp", retirando o "C", para que até os *.exe fossem sincronizados, e acrescentando "u", "t" e "P", para, entre outros motivos, evitar que um arquivo mais antigo substituísse um mais novo, alterado no servidor enquanto eu estava em casa.

Estou fazendo os testes, rascunhando o script, e tudo parece perfeito. Mas, para poder complicar mais, eu vi que era necessário que um arquivo deletado no servidor fosse deletado no meu notebook. E eu não queria o contrário. Se eu acidentalmente deletasse um arquivo no notebook, eu não ia querer correr o risco de em uma sincronia automática o meu notebook excluísse o arquivo do servidor. Assim, eu iria trabalhar desse modo: Eu só iria usar os arquivos locais, do /home/magnum/Documentos. Se fosse preciso deletar de verdade algum arquivo, eu iria no servidor, pensaria três vezes, e deletaria o infeliz do arquivo.

Continua simples, não é? Basta incluir o "--delete" na sincronia do servidor para o meu notebook. Para evitar que o servidor deletasse os novos arquivos criados pelo meu notebook, eu coloquei a linha de sincronia do meu notebook para o servidor antes, sem o "--delete", obviamente. Logo depois vem a linha do servidor para o notebook, com o "--delete".

Desse modo, em um primeiro momento, os meus novos arquivos seriam levados para o servidor. Em um segundo momento, os novos arquivos do servidor seriam levados para o meu notebook, mais a ordem para deletar o que tivesse sido deletado no servidor.

Aí é que está o problema... para esse script funcionar, a exclusão de arquivos teria que acontecer necessariamente entre o primeiro e o segundo momento. Se a exclusão acontecer depois do segundo momento, quando o script for rodado de novo ele vai jogar os arquivos que estão no meu notebook mas tinham sido deletados do servidor de volta para o servidor.

O problema é que eu não posso chegar para o pessoal do escritório e falar que ninguém mais pode deletar arquivo do servidor. Isso acontece a todo momento e tem que acontecer. Assim, especialmente se eu colocar o script para rodar de hora em hora, ou mesmo uma vez por dia, eu vou acabar "ressuscitando" os arquivos que tinham sido deletados no servidor. Só eu que vou morrer nessa história...

Só consegui pensar em uma solução "teórica", mas nem sei se isso é possível... A idéia é "descobrir" um comando do rsync que criasse um registro dos arquivos do servidor. Quando o arquivo fosse deletado no servidor, o rsync, milagrosamente, manteria o registro do tamanho e hora da última modificação do arquivo. Assim, se o meu notebook tentasse enviar um arquivo que foi deletado no servidor, esse envio seria negado, a não ser que o arquivo deletado tivesse sido alterado no meu notebook. Apenas nesse caso, a versão mais nova do meu notebook iria parar no servidor. Desse modo, se o notebook não conseguir restaurar o arquivo deletado, quando for executada a 2ª linha do rsync, com o comando "--delete" do servidor para o notebook, o arquivo finalmente seria deletado no meu notebook e tudo estaria resolvido.

Perfeito, não é?

Como tem muita gente boa neste fórum, tenho certeza que logo logo vai aparecer uma solução simples e boba! Ou pelo menos a recomendação de usar um outro programa...

Desculpem o longo texto, mas achei importante deixar claro qual é o meu problema para evitar que me sejam passadas soluções que não tem a ver com o que preciso. Quanto ao local do tópico, escolhi a mesma categoria do Como sincronizar 2 pastas (diretórios)? que foi meu ponto de partida. Além disso, o rsync é um aplicativo do GNU-Linux. Peço desculpas se tiver me equivocado.

Um abraço e, desde já, agradeço.
realmagnum está offline   Responder com Quote
Antigo 22-01-2009, 10:40   #2 (permalink)
jhense
Membro Senior
 
Avatar de jhense
 
Registrado em: Aug 2005
Idade: 24
Mensagens: 305
Reputação: 10 jhense está indo no caminho certo
Enviar mensagem via MSN para jhense Enviar mensagem via Skype para jhense
Padrão

Ja penso em usar o SVN? atende o que vc quer. abraço t+
__________________
|Slackware 11.0 -> 2.6.20|
|Gentoo -> 2.6.19|
http://game4.guerrakhan.com/signatur...ld_5/11588.jpg
jhense está offline   Responder com Quote
Antigo 22-01-2009, 18:34   #3 (permalink)
mabittenc
Newbie
 
Avatar de mabittenc
 
Registrado em: May 2006
Localização: Rio de Janeiro
Mensagens: 16
Reputação: 0 mabittenc está indo no caminho certo
Padrão

Existe o Unison, ele é muito bom e simples. Serve para sincronizar pastas, vale a pena pelo menos uma googlada sobre ele.
__________________
Kurumin Linux! Eu já usei um
mabittenc está offline   Responder com Quote
Antigo 22-01-2009, 21:37   #4 (permalink)
Marcacini
Ubbergeek
 
Avatar de Marcacini
 
Registrado em: Jul 2006
Mensagens: 4.398
Reputação: 38 Marcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhanteMarcacini tem um futuro brilhante
Padrão

Já que é uma coisa assim manual, já tentou instalar o krusader? É um gerenciador de arquivos com duas janelas fixas e que traz uma função de sincronização; só que, antes de fazer as copias, ele te mostra uma listagem dos arquivos a serem copiados e você pode "desligar" alguns.
__________________
KURUMIN LONGA VIDA (ainda em uso com pacotes Lenny... mas estou migrando para Debian)
Marcacini está offline   Responder com Quote
Antigo 28-01-2009, 12:33   #5 (permalink)
realmagnum
Newbie
 
Registrado em: May 2006
Mensagens: 10
Reputação: 0 realmagnum possui ótimo potencial
Padrão

Desculpem a demora no retorno, mas ainda estou testando as opções apresentadas.

Após chegar a alguma conclusão, vou voltar ao tópico e comentar.

Mas já adianto que descobri que o Unison se propõe a fazer exatamente o que eu preciso. Como padrão, o Unison, em vez de restaurar um arquivo deletado em uma das pastas, deleta este arquivo na outra pasta. Há dois problemas que eu preciso resolver. (1) nos meus testes preliminares, o Unison, além de demorar mais que o rsync na primeira sincronia, demora muito mais ainda que o rsync nas próximas sincronias. Como eu vou precisar sincronizar diariamente mais de 20.000 arquivos, eu comecei a ficar preocupado, mas ainda não deu para fazer um teste definitivo (2) o rsync está muito melhor documentado que o Unison. Estou tendo muita dificuldade em configurar opções no modo texto, como, por exemplo, alterar o padrão do Unison para que um arquivo deletado no notebook não seja deletado no Servidor.

Ainda não deu tempo de brincar com o SVN e com o krusader, mas também pretendo ver se são boas alternativas para o que eu preciso.

Valeu demais pelas dicas! Um grande abraço!
realmagnum está offline   Responder com Quote
Antigo 29-01-2009, 1:32   #6 (permalink)
helton
Novo Membro
 
Avatar de helton
 
Registrado em: Nov 2002
Idade: 7
Mensagens: 128
Reputação: 15 helton está indo no caminho certo
Padrão

O grsync é uma interface gráfica em GTK para o rsync... é bem simples de configurar e você pode fazer uma simulação do que seria feito antes de sincronizar os arquivos.

Boa sorte
__________________
Arch Linux
Intel D102GGC2 | Celeron 3,06Ghz | 512Mb DDR2 533mhz | ATI Radeon XPRESS 200 | HD Seagate ATA ST3250310AS 250Gb | Som Realtek ALC833 (HDA ATI SB) | Rede Realtek 8101L | Modem Agere V.92 56k
helton está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -2. Agora são 16:08.