Ver Feed RSS

acris

Sincronizar pastas de dois micros usando uma pendrive

Avalie este Post de Blog
O problema é simples: tenho um micro no trabalho e um em casa, mas uso os dois para fazer tarefas semelhantes, portanto tenho arquivos que começo a mexer no trabalho e continuo mexendo em casa. Todos os dias. Comecei aquela doideira de ficar salvando tudo na pendrive (pen é caneta: feminino), cola daqui, copia lá, e pimba! loguinho descobri que num dia bem atarefado eu jamais lembraria de atualizar de um lado pra outro todos os arquivos em que mexesse.
A solução foi fazer um script para rodar no udev que atualizasse as pastas do micro quando a pendrive fosse nele conectada. E, antes de ir embora de um lugar para outro, rodar no shell outro script que fizesse o caminho inverso.

Estou na fase da parte-1 (segundo artigo parte-1 da semana...).
Essa justifica-se: o script que vou mostrar aqui é bem mais simplezinho do que poderia ser, mas está funcionando. Tive muita ajuda do leleobhz para fazer isso. Ele acha que ainda tem muita gambi no script, que falta pelo menos uma interface grafica que avise o usuario sobre o andamento do rsync, que avise quando acabou. Mas isso ainda não ficou pronto e, como eu tinha que fazer a maratona já, decidi ficar com esse por enquanto. Quando o outro ficar pronto, coloco aqui.

Evidentemente a primeira coisa necessária é ter os dois micros com linux (debian, no caso ubuntu) e ter privilégio de root nos dois.

Vamos começar fazendo o script para colocar no udev. O que é o udev? é o gerenciador de dispositivos. No diretório /etc/udev/rules.d/ você encontra várias regras que o udev varre quando detecta um novo dispositivo. Todas as regras começam com um número, que indica a seqüência de execução, e terminam com .rules. Bom, achei bom não colocar a minha regra nem muito no começo, nem muito no fim, por receio (sem comprovação, confesso) de causar qualquer problema no sistema. Por isso chamei minha regra de 60-sonyRsyncAut.rules. Sony porque minha pendrive é Sony, Rsync porque é o comando que uso para sincronizar os conteúdos e Aut porque automatiza o processo. Enfim, dê o nome que quiser

O comando que deve entrar nesse script informa qual o dispositivo. Para isso, você deve obter informação de ID da sua pendrive, para que o script só funcione com ela. Você consegue essa informação com o comando:

$ udevinfo -q all -n /dev/sdc1

Onde sdc1 deve corresponder à pendrive.

Procure a linha que começa com E: ID_FS_UUID= e copie o número depois do = (vamos dizer que eh 1111 para fins de exemplo):

E: ID_FS_UUID="1111"

Então digite no seu script:

SUBSYSTEMS=="usb", ATTRS{serial}=="1111", SYMLINK+="pendrive", GROUP="<seugrupo>", RUN+="/opt/sonyRsyncAutScript.sh"


Substitua <seugrupo> pelo nome de usuário e 1111 pelo número da sua pendrive. Salve o script na pasta /etc/udev/rules.d/ e dê permissão de escrita e execução com o comando:

$ chmod a+rw /etc/udev/rules.d/60-nomedaregra.rules

Agora crie o arquivo de script, que chamei de sonyRsyncAutScript.sh. Voce pode mudar esse nome, mas não esqueça de alterar no arquivo do udev. Copio abaixo o conteúdo do arquivo com os devidos comentários. Coloquei 3 pastas para exemplo, mas você pode colocar quantas quiser:

# cria o diretório para montar a particao caso ele nao exista
mkdir /media/pendrive/

# monta a particao
mount /dev/pendrive /media/pendrive/

#cria os diretórios de destino caso não existam
mkdir -p /caminhodapasta1noseumicro/pasta1
mkdir -p /caminhodapasta2noseumicro/pasta2
mkdir -p /caminhodapasta3noseumicro/pasta3


#faz a sincrizacao do conteudo das pastas
rsync -avuz /media/pendrive/pasta1/
/caminhodapasta1noseumicro/pasta1/
rsync -avuz /media/pendrive/pasta2//caminhodapasta2noseumicro/pasta2/
rsync -avuz /media/pendrive/pasta3/ /caminhodapasta3noseumicro/pasta3/


# desmonta a particao
umount /media/pendrive/

#apaga o diretorio provisorio
rmdir /media/pendrive/


Cuidado para não esquecer as barras finais depois de todas as pastas no rsync, isso pode dar uma confusão danada.

Salve esse arquivo no /opt/ e de as mesmas permissões que deu para o outro.

Feito isso, sempre que você colocar a dita pendrive no micro, o conteúdo dela vai atualizar o conteúdo do seu micro. Nada será deletado, somente acrescidos os arquivos inexistentes no destino e atualizados os mais velhos no destino.

Tome o cuidado de mudar as pastas, se for o caso, quando fizer o mesmo procedimento para o segundo micro.

Agora vamos fazer um script para rodar antes de retirar a pendrive quando voce for sair de um micro para ir para o outro.

Crie um arquivo que chamei de sonyRsyncAutScript-SalvaNaPendrive.sh. Eu salvei no /opt.

O conteúdo dele será:

# cria o diretorio para montar a particao casa ele nao exista
mkdir /media/pen/

# monta a particao. VERIFIQUE ANTES QUAL O NOME DO DISPOSITIVO, que deve ser informado ao rodar o script na linha de comando
mount /dev/$1 /media/pen/

#faz a sincrozacao do conteudo das pastas
rsync -avuz /caminhodapasta1noseumicro/pasta1/ /media/pen/pasta1/
rsync -avuz/caminhodapasta2noseumicro/pasta2/ /media/pen/pasta2/
rsync -avuz/caminhodapasta3noseumicro/pasta3/ /media/pen/pasta3/
#só por desencargo de consciencia...
sync

# desmonta a particao
umount /media/pen/

#apaga o diretorio provisorio
rmdir /media/pen/

# aviso de que o script acabou:
echo PENDRIVE ATUALIZADA!!! Pode retirar a pendrive se desejar


Para rodar, entre no console, vá até a pasta e digite os seguintes comandos, imediatamente antes de retirar a pendrive:

$ sudo cd /opt/
$ sudo /bin/bash sonyRsyncAutScript-SalvaNaPendrive.sh sdc1

Onde sdc1 é o nome da pendrive no /dev/.
Aguarde aparecer no console a mensagem final:

$ PENDRIVE ATUALIZADA!!! Pode retirar a pendrive se desejar

Então o processo fica bem mais simples: quando chego num dos micros, simplesmente conecto a pendrive e em pouco tempo o micro contém os arquivos atualizados conforme os do outro. Quando vou embora, rodo o script e rapidinho tudo que fiz de novo vai para a pendrive.

Cuidado importante: a soma do conteúdo das pastas evidentemente não pode ser maior do que o espaço da pendrive. Para saber o tamano das pastas, dê um comando:

$ du -sh /caminhodapasta/pasta/

E some o resultado de todas elas.
Se tudo der certo, a parte 2 deste artigo vai permitir trabalhar com uma pendrive com mais de uma partição e vai ter mensagens gráficas sobre o andamento.

Por enquanto, bom proveito!

Atualizado 11-03-2009 em 21:05 por acris

Categorias
Não Categorizado

Comentários

Página 2 de 2 PrimeiroPrimeiro 12
  1. Avatar de river2
    Muito bom...
  2. Avatar de acris
    Grande, Magnun! vou testar assim que fizer o upgrade do meu Ubuntu.
    Valeu pela super dica.
    Eu estava indo muito bem com meu backup, até que lotei a pendrive de 2G...
Página 2 de 2 PrimeiroPrimeiro 12

+ Enviar Comentário