quinta-feira, 8 de novembro de 2012

Rsync e SSH copiando ficheiros pela rede automáticamente.

Isto de andar a brincar com o Raspberry Pi como servidor, acabou por me criar um pequeno problema... Então se eu já tinha um NAS personalizado e mais potente para arquivo e proteção de ficheiros, que faria agora com os ficheiros partilhados no RPi ?

Eu precisava arranjar uma forma de sincronizar pastas pela rede de modo a arquivar transferido ficheiros novos ou alterados do RPi para o meu NAS de forma automática! Pois não quero trabalhos adicionais ;)

Depois de alguma pesquisa e muita batuta, arranjei e adaptei a seguinte solução (Os 3 passos):

1 - MaqA com ip 192.168.1.89 é o RPi, este eu esqueço-me dele sempre ligado pois gasta apenas 3.5W. Pretendo  guardar os ficheiros partilhados que estão no diretório (home/pi/downloads/USB/Media) da MaqA

2 - MaqB com ip 192.168.1.68 é o Unraid, este esta quase sempre desligado, é mais guloso e gasta 33W. Pretendo  guardar os ficheiros do RPi em (/mnt/user) nesta MaqB.

E para sincronizar ficheiros e pastas nada melhor que o Rysnc em conjunto com o protocolo de rede SSH. Assim tanto às maquinas A como a B terão que ter acesso por SSH. O Rysnc instalado em ambas também!

3 - Como quero saber o que se passou em cada sincronização de ficheiros, guardo um log com data em (/mnt/cache/unraid/$(date +%Y%m%d)_rsync.log)

  • O objectivo é que os ficheiros novos ou alterados sejam copiados para a MaqB. 
  • Na MaqB não existe perigo de eliminação de ficheiros.
  • E na MaqA os ficheiros também não são apagados.
E é isto que faz o seguinte comando (executado na MaqB 192.168.1.68 por ssh):

rsync -avh --log-file=/mnt/cache/unraid/$(date +%Y%m%d)_rsync.log root@192.168.1.89:/home/pi/downloads/USB/Media /mnt/user/

Mas ao executar este comando pede-me sempre a password de acesso a MaqA!! Ora se pretendo criar uma forma automática de isto correr sem a minha intervenção, então vou ter que gerar a keygen de acesso a essa maquina. É com o seguinte comando, fazendo ENTER em tudo:

ssh-keygen

Depois copio o ficheiro gerado para a MaqA através de ssh. Pedirá uma password e coloco a password da MaqA:

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.89

Agora já devo aceder a MaqA sem password, e vou testar:

ssh 192.168.1.89


Ou entrar na MaqA 192.168.1.89 não foi pedida a password. Então esta tudo correto e a copia de ficheiros com o rsync sobre a rede por ssh vai funcionar sem o pedido da dita password.

A partir deste passo posso executar então o comando completo, ou adiciona-lo a um ficheiro de arranque da maquina em questão.

Na minha MaqB eu adaptei da seguinte forma:

Como o objectivo é a MaqB copiar os ficheiros novos e alterados da MaqA sempre que ligue a MaqB, vou adicionar algumas linhas a um ficheiro de arranque da MaqB com essas mesmas instruções adaptando tudo há maquina em questão:

Neste caso o software da MaqB é o Unraid, e este deixa sempre tudo na RAM, o que quer dizer que o diretório root/.ssh onde estão os ficheiros gerados pela ssh-keygen desaparecem a cada reboot!

Para dar a volta a isto, copio primeiro esse diretório para uma diretoria do disco ou da PenUSB que serve de arranque do Unraid.

cp -R /root/.ssh /boot/


Um dos ficheiros de arranque do Unraid é o go, e esta em /boot/config/go. Então vou adicionar as seguintes linhas ao ficheiro go, salvando e gravando as alterações no final (nano /boot/config/go):

# Copia o diretório .ssh para root para funcionar sem pedido de password:
cp -R /boot/.ssh /root/
# Reponho permissões perdidas na copia:
chmod 600 -R /root/.ssh
# Espero que o sistema arranque antes de iniciar copias, 240 segundos de espera:
sleep 240
#  O comando seguinte escrito todo numa linha, inicia a copia de ficheiros:
rsync -avh --log-file=/mnt/cache/unraid/$(date +%Y%m%d)_rsync.log root@192.168.1.89:/home/pi/downloads/USB/Media /mnt/user/


Agora cada vez que ligo a MaqB, o Unraid após quatro minutos verifica e transfere ficheiros novos ou alterados da MaqA que ainda não estão na MaqB!

Acabou por ser simples, vai ser eficaz, e é engraçado.

1 comentário:

Related Posts Plugin for WordPress, Blogger...

Popular no Blogue: