Backup e sincronia de arquivos sem nuvens comerciais, só com software livre

Foto de uma nuvem no céu. Acima dela, os logos do Syncthing, VeraCrypt, rsync e Rclone.

Admitamos desde já: somos preguiçosos. Quando algo funciona, ainda que não da maneira ideal, a tendência é deixar estar, seguir a vida. Essa era a minha postura em relação a backups remotos. Por muito tempo usei nuvens comerciais, os iCloud, Dropbox, Google Drive e OneDrive da vida, como único backup do tipo.

Resolvi mudar isso no final de 2021, motivado por aquela cisma com a Apple. Meu objetivo era substituir o iCloud, que usava para sincronizar arquivos entre celular e computador, e que por conveniência e inércia acabava sendo o meu único backup remoto.

Esses serviços funcionam para tal fim e, em grande medida, são eficientes e seguros no sentido de prevenir que seus dados se percam em um evento catastrófico, como falha do celular/computador, furto/roubo ou algum outro desastre. Mas também existe a chance, ainda que remota, de um dia a Apple ou o Google te trancar para fora da sua conta e aí boa sorte tentando recuperá-la — e todos os arquivos da sua vida.

(De qualquer forma, nada impede que as nuvens comerciais continuem sendo usadas em paralelo a backups e aplicativos de sincronia alternativos, como os que mostrarei a seguir, embora isso aumente o risco de conflitos de versões que podem levar à perda de dados.)

Ainda mantenho o iCloud por causa das fotos (é um dilema à parte). Para os demais arquivos, porém, consegui substituir o serviço da Apple por quatro aplicativos gratuitos e de código aberto, um serviço barateza de backup remoto e alguns comandos esquisitos no terminal.

Este texto é um relato que pode servir de guia, mas, por favor, não o encare como um guia muito confiável. Eu não sou administrador de sistemas nem versado nas ferramentas apresentadas, e consegui montar essa estrutura pesquisando, testando (e errando) e pedindo a ajuda de quem entende. No fim, funcionou, mas é algo um tanto frágil e, por isso, com várias redundâncias. É como diz aquele meme: não me siga porque eu estou perdido. Resolvi publicá-lo mesmo assim pela curiosidade, para inspirar quem está em cima do muro e também receber sugestões de como melhorar essa estrutura. Vale o alerta: o Manual do Usuário não se responsabiliza por eventuais perdas que você venha a ter.

Os aplicativos funcionam melhor em sistemas *Unix, ou seja, em sabores Linux e no macOS. Eu uso o macOS. Eles também estão disponíveis no Windows, mas não sei se existem peculiaridades nem se funcionam bem no sistema da Microsoft.

Sincronia

Para manter os mesmos arquivos acessíveis no celular e no computador, adotei o Syncthing. Ele é similar ao iCloud e Dropbox, só que sem o componente da nuvem, ou seja, não tem um servidor remoto onde os arquivos repousam1.

O Syncthing é um projeto de código-aberto, fácil de instalar e gerenciar, e que funciona maravilhosamente bem. Do tipo “configure e esqueça”. A única diferença prática em relação aos aplicativos de nuvem é que os dispositivos precisam estar ligados ao mesmo tempo para fazerem a sincronia. Não chega a ser um problema para mim, pois computador e celular ficam ligados direto.

Após a instalação, a área administrativa do Syncthing é acessível pelo navegador, no endereço localhost:8384. Nesse painel é possível definir alguns comportamentos do dispositivo em questão, como se ele pode ser descoberto via internet, a política de versionamento de arquivos e as conexões com outros dispositivos e os diretórios (pastas) a serem sincronizados.

Print de uma janela do Firefox com o painel de controle do Syncthing aberto.
O prático painel administrativo do Syncthing. Imagem: Manual do Usuário.

Um possível entrave ao uso do Syncthing é a ausência de um aplicativo oficial para iOS. Felizmente, existe um “alternativo” que quebra o galho, chamado Möbius Sync. Não é tão bom quanto os aplicativos para Android (imagino que por limitações artificiais que a Apple impõe ao iOS), mas funciona minimamente bem. Ao contrário do Syncthing e dos apps para Android, o Möbius Sync é pago. Custa R$ 27,90 (pagamento único, sem assinatura).

O Möbius Sync não roda continuamente em segundo plano. Em vez disso, vez ou outra ele faz uma varredura, sincroniza o que estiver pendente e dispara uma notificação. Por isso, tive que aprender a, quando preciso acessar em um dispositivo um arquivo recém-alterado no outro, rodá-lo manualmente. Não é o ideal, mas funciona — essas situações, de acesso imediato, são bem raras no meu fluxo de trabalho2.

Para minimizar os prejuízos em caso de um evento catastrófico, criei um diretório dentro dos meus documentos, no computador, e sincronizo apenas ele com o celular via Syncthing. Tipo a pasta do Dropbox. Assim, caso meu celular seja furtado ou roubado, por exemplo, meu imposto de renda e exames de saúde não correm o risco de serem acessados por terceiros3.

O Syncthing meio que dá conta da necessidade de sincronia. Já a de backup é mais complexa e se divide em duas partes: o backup local e o backup remoto.

Backup local

Foto em close de uma Yubikey preta e um pen drive prata unidos por uma argola/chaveiro. Ao fundo, desfocado, os fones dos EarPods.
Yubikey 5 NFC e pen drive Samsung BAR. Foto: Rodrigo Ghedin/Manual do Usuário.

Antes do backup remoto, é bom ter algo local. O acesso é mais rápido e… bom, é algo que está com você fisicamente, o que passa mais tranquilidade para algumas pessoas.

Escolhi um pen drive para esse tipo de backup. Talvez não seja a melhor mídia do ponto de vista da confiabilidade e longevidade, mas trabalho com poucos arquivos e estou sempre usando esse pen drive (quase sempre só para atualizar o backup), então se ele manifestar algum problema, é provável que eu perceba antes de ele me deixar na mão. Nessas circunstâncias, acredito que ele sirva.

Outro motivo para a escolha de um pen drive é a portabilidade. Desde que tive o apartamento invadido e por muito pouco não perdi o HD externo onde guardava meu backup local, portabilidade passou a ser um aspecto relevante para mim.

Um pen drive é pequeno o bastante para eu poder carregar comigo sempre, até mesmo quando saio para caminhar/correr. Ele fica grudado à minha chave de segurança em um chaveiro.

Uso dois aplicativos para fazer o backup, o VeraCrypt para criptografia e o rsync para sincronizar os arquivos do computador com o pen drive.

Tela do VeraCrypt com um disco montado.
Um disco virtual montado no VeraCrypt. Imagem: Manual do Usuário.

O VeraCrypt é o melhor “fork” (derivado) do finado TrueCrypt. Ele pode criptografar o disco inteiro, mas para não inutilizar o espaço não usado do pen drive, optei pelo outro modo, que cria um arquivo/disco virtual criptografado. Assim consigo manter meus arquivos protegidos no pen drive ao mesmo tempo em que posso usá-lo para coisas do dia a dia.

Todos os meus arquivos estão na pasta ~/Documents. Uma vez por semana, espeto o pen drive no computador, abro o disco virtual do VeraCrypt guardado nele e rodo este comando no terminal:

rsync -vrht --delete --exclude={'.*','*.hc','*.kdbx*'} ~/Documents/ /Volumes/Documentos/

O rsync é um utilitário em linha de comando para sincronizar diretórios. O comando acima contém diversos parâmetros (parâmetros, ou flags, ou argumentos; não sei qual o nome exato, mas são esses comandos precedidos por hífens). Explicando em detalhes:

  • -v, de “verbose”. Aumenta as informações que o terminal devolve durante a execução do comando.
  • -r diz ao rsync para fazer a sincronia em modo recursivo, ou seja, sincronizar os diretórios dentro do diretório de origem.
  • -h deixa as informações que o terminal devolve mais legíveis.
  • -t diz ao rsync para preservar os meta dados de data de criação e modificação dos arquivos sincronizados. (Note que é possível unir todos esses parâmetros de uma letra só em um comando. No caso, -vrht.)
  • --delete diz ao rsync para sincronizar as exclusões também, ou seja, se eu excluí um arquivo no diretório de origem, ele será excluído no de destino (no caso, no pen drive).
  • --exclude={'.*','*.hc','*.kdbx*'} diz ao rsync para ignorar arquivos ocultos (em *Unix, arquivos ocultos são iniciados com um ponto final), discos criptografados do VeraCrypt (extensão *.hc) e meu cofre de senhas do KeePassXC (extensão *.kdbx).

Para uma explicação mais técnica e detalhada do comando (em inglês), clique aqui.

Print do terminal do macOS mostrando o relatório de uma sincronia feita com o rsync.
Detalhamento do processo de sincronia do rsync. Imagem: Manual do Usuário.

Excluo da sincronia o cofre do KeePassXC, gerenciador de senhas que uso, porque faço uma à parte, fora do disco criptografado do VeraCrypt, direto na raiz do pen drive. Afinal, o cofre é criptografado por padrão e, em último caso, é a única senha de que eu preciso me lembrar — as dos discos do VeraCrypt estão salvas nesse cofre de senhas.

O comando não difere muito:

rsync -vth ~/Documents/Syncthing/cofre.kdbx /Volumes/RGHEDIN128G/

Note que mantenho o cofre do KeePassXC numa pasta diferente (~/Documents/Syncthing/), que é a mesma que sincroniza com o celular via Syncthing. Dessa maneira, tenho acesso às minhas senhas no computador e no celular.

No terminal, é possível dar dois ou mais comandos de uma vez só, conectando-os com um &&. Na imagem acima dá para ver como funciona.

Backup remoto

Para fazer o backup remoto, recorro a outro aplicativo de código aberto que funciona em linha de comando, o Rclone. Ele é parecido com o rsync, mas “conversa” com serviços de nuvem comerciais e permite montar diretórios remotos no gerenciador de arquivos local (Finder, no caso do macOS). Nunca fiz uso dessa segunda opção, porém.

Meu backup remoto é feito no Backblaze B2, um serviço de armazenamento em nuvem bem generoso e confiável. E ridiculamente barato: o armazenamento de cada giga byte (GB) custa US$ 0,005 por mês, com direito a 10 GB grátis. A Backblaze também cobra por download, e novamente o custo não é algo de outro mundo, de US$ 0,01 por GB. Até agora, não gastei um centavo com isso.

A Backblaze tem um serviço de backup pessoal para computadores que é bem mais simples do que usar essa parafernália em linha de comando. O problema é que é bem mais caro, custa US$ 7/mês.

Se no rsync não existe configuração inicial, não é o caso no Rclone. É preciso, antes mesmo de abrir o terminal, configurar um “bucket” no Backblaze B2 (uma espécie de disco remoto criptografado) e, depois disso, aí sim no Rclone, conectá-lo à sua conta e a esse bucket remoto recém-criado.

Parece algo complexo, mas a documentação do Rclone é muito boa. Aqui tem o passo a passo para configurar o Backblaze B2 e aqui, a lista dos serviços suportados e seus respectivos tutoriais.

Depois de configurado, o comando para fazer a sincronia é este:

rclone sync ~/Documents/ backblaze:nome-do-bucket --progress --exclude ".*{/**,}" --exclude "/Blog/**"

Note que a sintaxe é um pouco diferente. Para ignorar arquivos ocultos, por exemplo, é preciso escrever --exclude ".*{/**,}". O argumento --progress exibe no terminal alguns indicadores do progresso da sincronia, o que é especialmente útil em conexões lentas e/ou quando os arquivos são muito grandes. Assim você consegue acompanhar e saber se a demora é normal ou se algo saiu errado.

Detalhamento de uma sincronia feita com o Rclone.
Rclone em ação. Imagem: Manual do Usuário.

O Rclone também permite copiar e mover arquivos entre computadores locais e remotos.

Automações

Rodar esses comandos em intervalos regulares não é dos trabalhos mais difíceis, mas é possível facilitar com recursos nativos do sistema, como scripts em Bash e cron jobs (tarefas agendadas).

Em vez de escrever (ou colar) os comandos no terminal, ou ainda reescrevê-los toda vez que quiser executá-los, criei scripts em Bash super simples. Assim, em vez do comando inteiro, apenas executo o script:

./b2backup

Já facilita horrores.

Para criar o script, primeiro é preciso criar o arquivo (que não precisa ter extensão), assim:

touch b2backup

Depois, abra-o com um editor de textos qualquer, como o nano:

nano b2backup

Aí é só colar o comando:

#!/usr/bin/env bash
/usr/local/bin/rclone sync $HOME/Documents backblaze:nome-do-bucket --progress --exclude ".*{/**,}" --exclude "/Blog/**"

A Fedora Magazine tem uma série introdutória (em inglês) bem didática a respeito de scripts Bash.

Uma ideia legal é mover esse script para o diretório /usr/local/bin. Feito isso, ele entra no $PATH4 e pode ser invocado de qualquer lugar e com suporte ao autocompletar do Bash — no terminal, digite b2b e aperte Tab, por exemplo.

O backup em pen drive depende de alguns preparativos manuais, como inserir o pen drive fisicamente no computador e descriptografar os discos (leia-se: inserir as senhas) no VeraCrypt. Com o backup remoto no Backblaze B2, porém, não há nada do tipo. Em outras palavras, é possível automatizá-lo.

Sistemas *Unix têm um negócio chamado cron jobs, que é uma maneira bem simples de agendar rotinas no sistema. (Outro tutorial da Fedora Magazine, embora nele seja usado o cronie.) Tudo o que precisei fazer foi criar um cron job para rodar aquele script em Bash — no caso, todo dia à meia-noite.

Use este comando para editar o crontab, o aplicativo/binário que controla os cron jobs5:

env EDITOR=nano crontab -e

No nano, um editor de texto em linha de comando, escreva isto:

0 0 * * * /usr/local/bin/b2backup

(Obviamente, ajuste o caminho/diretório onde o script Bash está salvo.)

O comando indica que a tarefa (cd ~/ && ./b2backup.sh) será executada todos os dias, à meio-noite (0h00).

Uma ideia legal, ao menos no início, é gerar um registro da tarefa para saber se correu tudo bem. Para tanto, modifique o cron job para isto:

0 0 * * * /usr/local/bin/b2backup >> ~/registro.txt 2>&1

Agradecimentos ao James Pond pela paciência para tirar as (muitas!) dúvidas minhas relacionadas à automação do backup.

Foto da nuvem (topo): Wolf Zimmermann/Unsplash.

  1. O site do Syncthing diz que ele é capaz de sincronizar arquivos via internet, mas aqui só consegui fazê-lo funcionar na rede local.
  2. E ainda tem o AirDrop, que acabo usando para transferir arquivos descartáveis, como fotos.
  3. Celular e computador estão ambos criptogrados, o que em tese os transforma em pesos de papel sem a senha de acesso. De qualquer modo, prefiro não dar chance ao azar.
  4. Eu não tenho ideia do que estou escrevendo aqui, foi o James que me explicou.
  5. Faço assim porque não sei usar o vi, o editor complexo padrão em sistemas *Unix. Se não for o seu caso, basta escrever crontab -e. Se bem que quem sabe usar o vi/vim provavelmente não está lendo isto, né?

Newsletter

O Manual no seu e-mail. Três edições por semana — terça, sexta e sábado. Grátis. Cancele quando quiser.

Deixe um comentário

É possível formatar o texto do comentário com HTML ou Markdown. Seu e-mail não será exposto. Antes de comentar, leia isto.

29 comentários

  1. Não acho o backup em pendrive ou HD externo uma opção melhor que a nuvem.

    IMHO ter o backup em mais de uma mídia e lugar é o mais importante, já que isso faz parte das boas práticas da gerência de dados.

    Eu faço backup em mais de uma nuvem, já que a nuvem me liberta de muitas limitações da mídia fisica (verificar se a mídia tem de ser trocada ao longo do tempo, p. ex.).

  2. Só passando pra agradecer por ter esse artigo aqui postado.

    Já voltei aqui 2 vezes ao trocar de computador para refazer os procedimentos.

    Obrigado!!!

  3. Aqui eu estou usando o Duplicati pra fazer meu backup, open source também, tem para todos os sistemas. Tanto local (uma vez por semana, manual), quanto remoto (três vezes por semana, automático). Ele tem criptografia integrada e é super fácil de usar, mesmo com várias opções de configuração. Tem inclusive opção de usar o Backblaze B2 que você utiliza. A maior diferença é que ele não cria um disco virtual e coloca tudo em vários arquivos zip criptografados do tamanho escolhido, que para mim não atrapalha.

  4. Muito obrigado, Ghedin. Faz um tempo que pretendo utilizar alternativas aos fechados e esse “mapa” que você disponibilizou é um bom começo pra seguir adiante.

  5. interessante, assim que vencer a preguiça seria legal até para enter mais sobre programação.

  6. Muito bom o artigo, é um não-tutorial melhor que muito tutorial por aí!

    Uma dúvida: qual problema vc vê em criptografar arquivos com o veracrypt e guardar esses arquivos no google e dropbox? É meu atual sistema. Assim imagino que tenho o melhor dos mundos, não?

    1. Nenhum problema. Digo, o Backblaze B2 tem algumas vantagens, como custo e, em relação ao Google, separação das coisas — no Google você pode perder a conta por mau comportamento no YouTube, por exemplo, ou qualquer bobagem do tipo.

        1. não, se encerrar sua conta google perde tudo, o criador do terraria perdeu a conta durante um tempo.

          1. Nossa achei que só ficava sem o YouTube mad o resto continuava funcionando

  7. Uma opção um pouco mais complexa, mas bem interessante é usar o Nextcloud (https://nextcloud.com/).

    Ele é escrito em PHP e você o instala em uma máquina que funciona servidor (pode ser em uma rede local ou na Internet) e ele oferece uma série de serviços. É possível armazenar e sincronizar arquivos (como no Dropbox), criar agendas e livro de contatos, bem como vários outros serviços, como kanban, anotações e até um livro de receitas (tem uma “lojinha” com os serviços disponíveis: https://apps.nextcloud.com/).

    Vários desses serviços possuem clientes para Android (não sei como é a situação para Apple) e a sincronização de arquivos pode ser feita também no PC (todos os sistemas operacionais). Na verdade as sincronizações de arquivos/agenda/contatos é feita usando os protocolos WebDAV/CalDAV/CardDAV. Então basta usar qualquer programa que aceite isso.

    Ah, e o Nextcloud é multiusuário. Então uma única instância dele pode atender várias pessoas.

    1. Já cogitei usar o NextCloud, mas fico bem receoso de expô-lo à internet e acabar sendo alvo de ataques. Como disse no texto, não sou administrador de sistemas nem nada parecido. Sei que algumas empresas, como a Hetzner, oferecem instâncias gerenciadas, mas aí acho que o custo acaba não sendo muito vantajoso.

      O iOS é surpreendentemente bom no suporte a esses protocolos — melhor que o Android, diria. O sistema conversa com WebDAV/CalDAV/CardDAV nativamente. Já o Android, pelo menos no AOSP, não; precisa instalar algo como o DAVx5 para dar suporte.

      1. Olha, eu uso o Nextcloud a cerca de 2 anos. Tudo exposto na internet e funciona maravilhosamente bem. Se tomar alguns poucos cuidados, não vai ter problemas com ataques. Nunca tive nenhum problema. É um serviço maravilhoso. E a instalação? Depois de várias tentativas e erros, entendi que não é nenhum monstro. Na real, super simples.

        Sou super fan, e se quiser, posso apontar uns bons tutoriais. O que eu gosto nele, é que tem tudo que eu preciso: calendários, notas, tarefas (que uso bastante), sincronizar as fotos do celular, todo meu laptop… simplesmente genial. Foi a melhor coisa que fiz. Uma única solução para tudo que preciso. Recomendo muito. Não encana não com ataques Ghedin!!

        1. Ah, um ponto importante: custo. Eu montei uma estrutura que me custa 14 euros por mês (cerca de 95-100 reais). Isso inclui 2TB de armazenamento e uma máquina ubuntu. Mas se puder ter um pc velho em casa pra isso, é custo zero…

  8. Parabéns pela iniciativa Ghedin! Nos inspira a retomar o controle dos nossos arquivos…
    Pergunto se no iOS outros apps conseguem ler os arquivos que estão no Mobius, ou fazes algum outro procedimento… tentei soluções similares para sincronizar os arquivos markdown do Obsidian e ele não conseguia ler os diretórios dentro da árvore do Mobius., travei nesse passo…
    Sobre o rsync tenho uma sugestão: substituir “t” e “r”, por “a”, que já inclui as duas flags mais outras que ajudam a manter os metadados… https://explainshell.com/explain?cmd=rsync+-vah+–delete+–exclude%3D%7B%27.*%27%2C%27*.hc%27%2C%27*.kdbx*%27%7D

  9. Gostei bastante do tutorial.

    Se ajudar alguém, ou você mesmo, a entender, o $PATH é uma variável de ambiente (do sistema operacional) que contém os diretórios (pastas) onde estão localizados os binários executáveis do sistema. Normalmente eles são públicos, como, por exemplo, o famoso ping.
    Cada usuário tem seu próprio $PATH, pra que eu possa ter personalizações relevantes.
    Não é só isso, mas basicamente é este o conceito mais utilizado quando falam dela.

    Exemplo do meu $PATH atual: /sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin
    O caractere “:” (dois-pontos) é utilizado para “separar” os diretórios.

    P.s.: uso vi/vim diariamente e li até o fim seu texto!

  10. Ghedin, quando tiver um tempo, da uma olhada no FreeFileSync.
    Uso há anos, tem atualizações frequentes e é gratuito. Muito bom.

  11. Eu uso uma interface para o RClone, funciona muito bem e uso para o OneDrive em conta Microsoft 365!
    https://github.com/kapitainsky/RcloneBrowser

    Ele funciona no Mac também e você consegue sincronizar várias contas e elas vão aparecer em um estrutura de pastas que você pode selecionar com o mouse e pedir pra baixar, fazer upload, etc!
    Esse que enviei é um fork de outro que parou de funcionar, e apesar de não ter atualização recente, funciona sem nenhum problema!

  12. Sou um usuário satisfeito de um plano de 1 tera no Google Drive + o Insync, que é um software proprietário (com um preço bem razoável pelos benefícios) de sincronização bem completo e compatível com várias clouds (e roda em Linux, maior motivo pra eu usá-lo).

    1. O Insync é tão bom que desconfio que, na real, é um software espião do governo chinês e acaba ficando com uma cópia de todo arquivo meu que upo pro Drive etc.

      1. parece bom mesmo eu tinha, mas depois de instalar e desinstalar algumas versões de linux, e mesmo comprando um versão mais avançada (compra única) parou de funcionar aqui… ai larguei mão uma pena… parecia promissor o insync, usava com o onedrive.