sexta-feira, 18 de novembro de 2016

Utilizando Google Drive com o cliente rclone no Linux




Rclone é um cliente cloud com suporte para vários serviços de armazenamento em nuvens pra fazer a sincronização de arquivos, incluindo o Google Drive sendo o seu uso totalmente em linha de comando e sem sincronização automática de arquivos, devendo ser feita sempre manualmente.
Para quem já usou ou ainda usa o rsync em linha de comandos para sincronizar arquivos do computador para uma outra partição, outro computador na sua rede local ou um HD externo usb para backup de arquivos não terá nenhuma dificuldade em usar o rclone pois a forma de funcionamento do mesmo é idêntica apenas as opções são diferentes e mesmo pra que nunca usou nenhum dos dois seu funcionamento e bem simples, no qual explicarei como instalar e utilizar o mesmo.

Acesse a página oficial: http://rclone.org/ e baixe o pacote correto de acordo com seu sistema operacional e arquitetura, no meu caso instalarei para S.O. Linux de 32 bits.

http://downloads.rclone.org/rclone-v1.33-linux-386.zip

Acesse o diretório onde foi baixado o pacote zip e faça:

$ 7z x rclone-v1.33-linux-386.zip
$ cd rclone-v1.33-linux-386/

$ sudo cp rclone /usr/sbin/
$ sudo mkdir -p /usr/local/share/man/man1
$ sudo cp rclone.1 /usr/local/share/man/man1/

Para ajuda:
$ man rclone
$ rclone

Configurando o rclone

$ rclone config
2016/10/12 14:15:57 Failed to load config file "/home/nando/.rclone.conf" - using defaults: open /home/nando/.rclone.conf: no such file or directory
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> 

Tecle n (para iniciar uma nova configuração e digite um nome de sua preferencia para o cloud, no meu caso digitei mydrive)

Nota: 
Use um nome curto, sem espaços e acentos no nome do cloud pois você sempre vará uso dele em todos os comandos do rclone.

name> mydrive
Type of storage to configure.
Choose a number from below, or type in your own value
 1 / Amazon Drive
   \ "amazon cloud drive"
 2 / Amazon S3 (also Dreamhost, Ceph, Minio)
   \ "s3"
 3 / Backblaze B2
   \ "b2"
 4 / Dropbox
   \ "dropbox"
 5 / Encrypt/Decrypt a remote
   \ "crypt"
 6 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
 7 / Google Drive
   \ "drive"
 8 / Hubic
   \ "hubic"
 9 / Local Disk
   \ "local"
10 / Microsoft OneDrive
   \ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
12 / Yandex Disk
   \ "yandex"
Storage> 7     (Aqui você tecla 7 para usar o Google Drive)


Google Application Client Id - leave blank normally.
client_id> 

Google Application Client Id - leave blank normally.
client_id
Google Application Client Secret - leave blank normally.
client_secret
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> 

 Nos itens client_id e client_secret, deixe ambos em branco, e pressione Enter.

No remote config, digite "n" para ser apresentado o link que gerará o código de ativação do Google Drive

If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?xxxxxxxxxx3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%xxxxxxxxxx--xxxxxxxx3e
Log in and authorize rclone for access
Enter verification code>             ( cole o código do navegador aqui )

Ao teclar n sera aberta automaticamente uma janela do seu navegador padrão para acessar a conta do Google, faça login da sua conta do Google, dê permissão para o rclone acessar a sua conta do Google e copie o código exibido no navegador e cole no local (Enter verification code) indicado na janela de terminal e tecle Enter.

Após colado o código e teclado Enter surgi a tela abaixo:
[mydrive]
client_id = 
client_secret = 
token = {"access_token":"ya29.Ci96A_pv-xxxxxx3Hz7yE9hpjd13222","token_type":"Bearer","refresh_token":"1/rWytr-Jr2xZeaaaaDsrjY7A_C8yVhs","expiry":"2016-10-12T15:24:40.195842222-03:00"}
--------------------

y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> 

Tecle y e Enter

Current remotes:

Name                 Type
====                 ====
mydrive              drive

e) Edit existing remote
n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/n/d/s/q> q

Pronto seu Google Drive foi adicionada ao rclone, tecle q para sair do config.

Sincronizando arquivos com o rclone

Você pode enviar diretamente qualquer pasta de qualquer parte do seu computador para sincronizar, mas o recomendável é criar ou usar sempre a mesma pasta e tudo que for colocado nela será enviado para a nuvem ao fazer a sincronização.

Exemplo:
No meu computador eu usarei sempre a pasta ~/bkp para ser usada para enviar arquivos e pastas para a nuvem, mas nada impede de você sincronizar diretamente /mnt/documentos, /livros, /mnt/sda4/apostilas etc... mas se o fizer não existir o caminho e nem o final do nome dela no destino da nuvem ficando tudo uma bagunça com todos os arquivos dentro dela largados na raiz da do drive, apenas sera criado neste caso todos os subdiretórios que existir a partir do caminho que foi especificado no Google Drive.

Para manter sua nuvem organizada crie no seu computador subdiretórios desejados no diretório (~/bkp) que você utilizará sempre para fazer a sincronização com a nuvem e para dentro dos subdiretórios você copia os arquivos conforme a categoria como exemplos videos, mp3, docs etc.. 


Sincronizando do computador para a nuvem

Você pode fazer de duas maneiras diferentes:

$  rclone sync bkp/  mydrive:/ 

Você usa desta forma se você estiver acima do diretório bkp visualizando o nome do mesmo. 

$ rclone sync /home/nando/bkp/  mydrive:/ 

Para executar a sincronização a partir de qualquer diretório do computador onde você estiver ou para incluir a mesma em um script especificando o caminho completo do diretório padrão utilizado para sincronização.

IMPORTANTE:
Onde mydrive não é um diretório e sim o nome que você atribuiu ao seu Google Drive durante a configuração do rclone, por isto foi mencionado anteriormente para usar um nome curto, sem espaços e acentos.


Notas sobre exclusão de arquivos

Se você excluir os arquivos pelo navegador dentro Google Drive, ao sincronizar a partir do computador com o rclone se estes mesmos arquivos não foi excluído antes do diretório do seu computador, eles serão copiados novamente para  Google Drive, novamente já que eles não existem lá.

No caso abaixo eu tinha excluído 2 arquivos no Google Drive, pelo navegador, ao fazer a sincronização os arquivos excluídos foram novamente copiados para o Google Drive, já que eu não excluir os mesmos da pasta do computador.

$ rclone sync /home/nando/bkp/ mydrive:/
2016/10/12 15:34:23 Google drive root '': Waiting for checks to finish
2016/10/12 15:34:23 Google drive root '': Waiting for transfers to finish
2016/10/12 15:34:26 Waiting for deletions to finish
2016/10/12 15:34:26 
Transferred:   129.367 kBytes (18.327 kBytes/s)
Errors:                    0
Checks:               150
Transferred:            2    (foi enviado 2 arquivos para a nuvem)
Elapsed time:         7s

Agora se você excluir arquivos do seu computador, os mesmos arquivos que existir no Google Drive serão automaticamente excluídos da nuvem ao fazer a sincronização usando o comando abaixo.

$ rclone sync /home/nando/bkp/ mydrive:/
2016/10/12 15:40:23 Google drive root '': Waiting for checks to finish
2016/10/12 15:40:23 Google drive root '': Waiting for transfers to finish
2016/10/12 15:40:23 Waiting for deletions to finish
2016/10/12 15:40:24 
Transferred:            0 Bytes (0 Bytes/s)
Errors:                     0
Checks:               152
Transferred:            0  (não foi enviado para a nuvem nenhum arquivo, fica 0)
Elapsed time:        4.9s

No exemplo acima eu excluir 2 arquivos do computador, ao fazer a sincronização os mesmo arquivos que correspondia ao que estavam no computador  antes foi excluído da nuvem também.

Nota:
Caso queira fazer um acompanhamento mais detalhado use o flag -v antes da opção sync onde será exibido os nomes de todos os arquivos e diretórios com data e hora da sincronização dos mesmos e utilize um arquivo de log usando na forma abaixo:

$  rclone -v sync /home/nando/bkp/ mydrive:/ --log-file=/home/nando/rclone.log

No arquivo de log:
Os diretórios e arquivos deletados terá após os nomes deles:  Deleted
Os diretórios e arquivos que foram enviados pra a nuvem terá após os nomes deles:  Copied (new)
Arquivos de mesmo nome que foram substituídos por uma nova versão: Copied (replaced existing)

O arquivo de log nunca é sobre-gravado, sendo todo nova sincronização adicionada ao final da última sincronização.

Para facilitar as coisas vamos criar o script rcloneup com permissão 755 do chmod e salvo em /usr/loca/bin com o conteúdo abaixo:

echo "Sincronizando do computador para a nuvem - subir"
echo "*** Sincronizando do computador para a nuvem - subir ***" >> /home/nando/rclone.log
rclone sync /home/nando/bkp/  mydrive:/ --log-file=/home/nando/rclone.log
echo ==================================== >> /home/nando/rclone.log


Sincronizado da nuvem para o computador

Para sincronizar da nuvem para o computador local,  basta inverter os parâmetros anteriores:


$ rclone sync mydrive:/ /home/nando/bkp
2016/10/12 21:16:12 Local file system at /home/nando/bkp: Waiting for checks to finish
2016/10/12 21:16:12 Local file system at /home/nando/bkp: Waiting for transfers to finish
2016/10/12 21:16:12 Waiting for deletions to finish
2016/10/12 21:16:12 
Transferred:       0 Bytes (0 Bytes/s)
Errors:               0
Checks:          152
Transferred:       0        (zero arquivo baixado)
Elapsed time:     4.1s


Notas sobre exclusão de arquivos e criação de arquivos no Google Drive

Se você excluir 3 arquivos pelo navegador no Google Drive, os mesmos arquivos serão automaticamente excluídos no seu computador local ao usar o comando acima.

Se você copiar arquivos para o diretório /home/nando/bkp eles não serão enviados para a nuvem com este comando acima, mesmo que eles não existem lá e serão excluídos automaticamente do diretório  /home/nando/bkp.

Se você criar arquivos diretamente no Google Drive pelo navegador, ter feito upload pelo navegador a partir de outro computador, os arquivos que não existir no seu diretório padrão de sincronização                  (/home/nando/bkp) serão baixados no mesmo com o comando acima.

Para facilitar o seu uso vamos criar o script  script rclonedown com permissão 755 do chmod e salvo em /usr/loca/bin com o conteúdo abaixo:

echo "Sincronizando da nuvem para o computador - baixar"
echo "*** Sincronizando da nuvem para o computador - baixar ***" >> /home/nando/rclone.log
rclone -v sync mydrive:/ /home/nando/bkp --log-file=/home/nando/rclone.log
echo ==================================== >> /home/nando/rclone.log


Obtendo informações de diretórios e arquivos da nuvem

Lista os nomes de todos os arquivos e seu caminho na nuvem

$ rclone ls  mydrive:/

Usando um filtro para localizar um arquivo específico:

$ rclone ls  mydrive:/ | grep -i mp4
  5876761 pasta1/pasta2/demostração jogando spider.mp4
2016/10/12 15:28:59 
Transferred:      0 Bytes (0 Bytes/s)
Errors:               0
Checks:             0
Transferred:       0
Elapsed time:    3s


No exemplo acima fiz um filtro para listar todos os arquivos mp4.

Listando somente os nomes de diretórios na nuvem

$ rclone lsd mydrive:/

Esta opção lista os nomes de todos diretórios e subdiretórios da nuvem.


Obtendo informações de armazenamento na nuvem

$ rclone size mydrive:/
Total objects: 10
Total size: 2.454 MBytes (2573319 Bytes)
2016/10/16 20:30:42 
Transferred:      0 Bytes (0 Bytes/s)
Errors:                 0
Checks:               0
Transferred:         0
Elapsed time:      7s


Este comando exibiu o número total de arquivos que você tem na nuvem do Google Drive e a soma total dos mesmos.
Um detalhe é que os nomes de diretórios não entra na soma total de arquivos (Total objects).
No caso do exemplo acima eu possuo 10 arquivos na nuvem sendo a soma de todos eles juntos 2.454 MBytes.


Checando diferenças entre o diretório utilizado para sincronização e o seu Google Drive

$  rclone check /home/nando/bkp/  mydrive:/ 
2016/10/16 14:24:32 Local file system at /home/nando/bkp: Building file list
2016/10/16 14:24:32 Google drive root '': Building file list
2016/10/16 14:24:35 Google drive root '': 0 files not in Local file system at /home/nando/bkp
2016/10/16 14:24:35 Local file system at /home/nando/bkp: 1 files not in Google drive root ''
2016/10/16 14:24:35 veja: File not in Google drive root ''
2016/10/16 14:24:35 Google drive root '': Waiting for checks to finish
2016/10/16 14:24:35 varias.txt: Sizes differ
2016/10/16 14:24:35 Bikini-Wallpaper-1069.jpg: Sizes differ
2016/10/16 14:24:35 Google drive root '': 3 differences found
2016/10/16 14:24:35 Failed to check: 3 differences found

Onde os arquivos varias.txt e Bikini-Wallpaper-1069.jpg eu editei no diretório padrão /home/nando/bkp/ utilizando para sincronização do rclone sem ter feita ainda a sincronização pelo mesmo com a nuvem.

Onde após o nome do arquivo a palavra Sizes differ diz que existe tamanho diferente de arquivos entre o computador local e a nuvem.

Outras mensagens ao lado do nome do arquivo que podem aparecer quando haver diferenças entre o computador e a nuvem

Duplicate file detected = existe arquivos duplicados na nuvem mas não no seu computador local.
Google drive root '': 2 files not in Local file system at /home/nando/bkp = existe 2 arquivos na nuvem mas não existe seu computador local.
aula/Bikini9.jpg: File not in Local file system at /home/nando/bkp = não existe o arquivo aula/Bikini9.jpg no seu computador em /home/nando/bkp/aula mas existe na nuvem em /aula.

Estas diferenças também serão somadas nas 2 últimas linhas de saída da opção check.



Agendando a sincronização do rclone

Para que você não se esqueça de fazer a sincronização de arquivos do computador para a nuvem, podemos colocar o rclone no seu contrab de usuário e especificar o intervalo de tempo que o mesmo será executado automaticamente.
No exemplo abaixo utilizarei o script rcloneup criado anteriormente e que também gera o arquivo de log para podemos monitorar o que subiu pra nuvem, foi deletado ou alterado com um intervalo de tempo a cada 15 minutos, mas você pode configurar o tempo de sua preferencia como a cada 5 minutos todos os dias.

$ crontab -e
00-59/15 * * * * /usr/local/bin/rcloneup

Pronto, após salvo o arquivo, a cada 15 minutos todos os dias a sincronização do computador para a nuvem será executada.

Atenção:
Dependendo de quantos megabytes você envia para nuvem diariamente, não use um tempo muito pequeno no crontab, pois se o primeiro processo do rclone ainda estiver rodando e entrar um segundo processo do mesmo sem que o primeiro tenha terminado ainda você terá arquivos duplicados no Google Drive dos novos arquivos recém adicionados; além de prejudicar a velocidade da banda larga da sua internet. Se você tem uma boa banda larga e costuma enviar diariamente até 10 MB em arquivos num mesmo espaço de intervalo de tempo, um tempo entre 10 a 15 minutos já está bom, mas o melhor é deixar um pouco mais como 20 ou 30 minutos de intervalo entre uma execução e outra.
Agora se você costuma enviar de 30 MB em diante diariamente o melhor é fazer a sincronização manualmente sem fazer o uso do crontab para evitar estes transtornos, ou configure apenas um horário fixo que melhor atende suas necessidades, como exemplo uma sincronização todos os dias as 18 horas somente.


Nota:
Caso queira por algum motivo especial interromper a sincronização ativada pelo crontab execute o comando abaixo:

$  killall rclone






14 comentários:

  1. Parabens pelo tutorial...estava procurando uma forma de sincronizar dados com o Dropbox e o Google Drive e me atendeu perfeitamente.

    ResponderExcluir
  2. TOP! Era exatamente isso que eu estava procurando, muito obrigado! =D consegui fazer funcionar aqui meu google photos! Agora basta eu configurar direitinho os scripts pra sincronizar a cada X tempo.

    ResponderExcluir
  3. olá, ele sincroniza arquivos alterados?

    ResponderExcluir
  4. Parabéns pelo artigo, só gostaria de fazer uma correção, no script vc chama ele de rclonedown e para adicionar no crontab usa o nome rcloneup.
    Ou estou errado?
    Abraço!

    ResponderExcluir
  5. Olá, eu consegui, mas gostaria de criptografar, você conhece algum tutorial. Obrigada.

    ResponderExcluir
  6. Bom dia sabem se é possível enviar email com o rclone tmb ou conseguem me indicar uma maneira simples deu receber uma notificação por email sempre que estiver concluído o backup

    ResponderExcluir
    Respostas
    1. instala o sendmail
      no script quando grava o log. aponta o log para
      ./script.email "log.dia.19.04" "log da sync" arquivo.log

      más faz isso só na conclusão, o log já precisa estar gerado,rsrs.

      ---script
      #!/bin/bash

      EMAIL_FROM="para@yahoo.com.br" # usuario de email que se autentica no servidor SMTP
      EMAIL_TO="de@yahoo.com.br" # usuario que receberá os emails

      #Servidor SMTP e porta utilizada
      SERVIDOR_SMTP="smtp.mail.yahoo.com.br:587" #endereço no servidor SMTP, observar no exemplo o yahoo utiliza a porta 587
      SENHA=123456 #informe aqui a senha de autenticação no servidor SMTP

      ASSUNTO="$1"
      MENSAGEM="$2"
      ANEXO="$3"

      if [ "$1" == "" ] ;then
      ASSUNTO="SEM ASSUNTO"
      fi
      if [ "$2" == "" ] ;then
      MENSAGEM="SEM MENSAGEM"
      fi

      sendEmail -f $EMAIL_FROM -t $EMAIL_TO -u "$ASSUNTO" -m "$MENSAGEM" -a $ANEXO -s $SERVIDOR_SMTP -xu $EMAIL_FROM -xp $SENHA

      # Fim do Script

      Excluir
  7. Boa Tarde fiz os procedimentos e funcionou blz, só que a transmissão não passa de 130k numa net de 60 MB não esta muito lento ??? tem algum recurso pra melhorar a performance ?? Grato

    ResponderExcluir
  8. Aeh galera.!
    Olha só, minha empresa trabalha com o Google drive na produção,.
    assim sempre preciso estar sincronizando, quase que minuto a minuto...

    pensei em algo do tipo, fazer um filtro do "check" | grep "Found", tipo se tiver diferença ele sincroniza, senão fica checando...
    isso ficaria mais próximo da realidade da versão para MS.
    alguém já tem algo do tipo,..?

    ResponderExcluir
    Respostas
    1. Muito bom este material! Estou estudando o rclone e estou querendo montar algo parecido para meu onedrive, mas estou esbarrando nas flags, você conseguir fazer este script funcionar para seu caso?

      Excluir
  9. Muito cuidado com o comando para enviar os dados do computador para o Google Drive. Se por acaso criar um diretório zerado no computador e se enganar com o comando, enviando do computador ao invés do contrário, TODOS OS ARQUIVOS DO GOOGLE DRIVE serão sumariamente apagados. Se atentem para isso. No resto, tudo certo. Muito obrigado pelas informações.

    ResponderExcluir
  10. Olá, se eu quiser enviar uma pasta com dezenas de planilhas, cerca de 10GB, e o processo parar no meio do caminho, quando eu voltar a executar o mesmo comando ele continua de onde parou ou ele volta a upar novamente todas as pastas que já tinha sido upada anterior mente?

    ResponderExcluir