Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

terça-feira, 29 de setembro de 2015

OpenWRT: Fazendo Backups

Mais um artigo da série sobre o OpenWRT.

Antes de comentar como atualizar para a próxima versão do OpenWRT, achei interessante comentar sobre um assunto relacionado, mas tão importante que merece um artigo próprio: backups.

Tem gente que ainda confia em tecnologia. Brinco dizendo que não adianta rezar, só backup salva. Depois de fotos, vídeos, documentos, os roteadores são a última coisa que as pessoas se preocupam em fazer backup. Afinal de contas, para os mais simples, ele só contém o nome da rede e a senha. Porém, com o OpenWRT, seu roteador pode ser muito mais do que isto. O meu, em especial, é a central de comunicação, entreterimento e armazenamento da casa. Na prática, um servidor na rede com múltiplas funções. Como configurá-lo exige uma significativa quantidade de trabalho, sempre é bom evitar que você tenha que refazê-lo caso algo aconteça com ele.

Saindo do ambiente residencial, o tempo de restauração normalmente é crítico para ambientes empresariais. Neste caso, um backup "na mão" facilita em muito restaurar rapidamente um equipamento com defeito. Fora isto, backup podem ser utilizados para replicação "em massa", evitando o retrabalho de configurar o roteador "do zero" (para este fim, tem que recriar a entrada da ULA do IPv6).

Neste artigo, vou considerar que você conhece um básico do OpenWRT, como a estrutura que usa o squashfs com a overlay.

O OpenWRT tem backup? Sim, mas não de tudo. O backup do OpenWRT guarda somente configurações e dados selecionados do /etc. A lista do que ele copia pode ser vista com o comando "sysupgrade -l":
root@router:~~# sysupgrade -l
/etc/config/dhcp
...
/etc/sysctl.conf
/etc/sysupgrade.conf
São alguns arquivos pré-definidos, listados em /lib/upgrade/keep.d/ (pelos pacotes) ou em /etc/sysupgrade.conf, pelo usuário. Programas instalados não serão salvos, mas somente suas configurações (se estiverem em /etc/config ou forem explicitadas pelo mantenedor do pacote). É isto que é preservado quando você faz uma atualização do OpenWRT e pede para salvar as configurações. Compare isto com o conteúdo da overlay. Tudo que estiver lá foi modificado no seu sistema desde a instalação. O que estiver lá e não na listagem do sysupgrade, será perdido utilizando esta forma de backup. 

E quanto aos programas? Se você usa a firmware no formato squashfs, existem duas opções. A primeira é guardar a lista dos pacotes instalados e reinstalá-los. Para facilitar, você pode ver na /overlay:

root@router:~# ls /overlay/usr/lib/opkg/info/*control | sed -e 's%.*/%%;s/\.control//' | xargs

aiccu bind-dig bind-host bind-libs binutils block-mount coreutils-du coreutils ddns-scripts diffutils e2fsprogs...

Com a lista de pacotes salva, basta instalá-los após a restauração da configuração.

A segunda opção é guardar toda a overlay. Para salvar tudo mesmo que você fez desde a instalação do OpenWRT, é bom copiar a partição overlay. Um tar simples pode fazer o serviço. De um computador com Linux, execute:

$ ssh root@router tar -czv /overlay | dd of=backup-roteador.20150925.tgz

Isto compacta a /overlay em um tar e envia para o arquivo local backup-roteador.20150925.tgz sem criar o arquivo no roteador, que nem sempre tem espaço para isto. O WinSCP poderia copiar a overlay mas provavelmente você teria problemas com a permissão (perdida) dos arquivos. Se a overlay for pequena, você pode fazer o tar no /tmp (memória RAM) e copiar com o WinSCP:

root@router:~# tar -czvf /tmp/backup-roteador.20150925.tgz /overlay

Caso use Linux, fiz um pequeno script que faz a cópia do backup do OpenWRT, da lista de pacotes e da overlay em um único passo. Se seu roteador está em 192.168.1.1, só chamar:

$ ./fullbackup 192.168.1.1

E se eu não uso a firmware em squashfs? Primeiro você é corajoso pois se fizer algo de errado, não terá como usar a recuperação do OpenWRT. Contudo, isto não é um problema se o OpenWRT foi instalado em um PC ou VM. Para estes casos, faça o tar de todo o conteúdo. Só precisa tomar o cuidado de excluir os diretórios de dados voláteis (/proc, /sys, /tmp, /var/tmp, ...) ou simplesmente use a opção "--one-file-system" do tar para não sair da partição raíz.

E para restaurar tudo isto? Se for o backup do OpenWRT, pode ser feito pela interface web ou pelo comando sysupgrade. Se for pela overlay, recomendo entrar no modo de recuperação, zerar o roteador, montar a overlay e descompactar o conteúdo diretamente sobre a partição. Escrever na overlay enquanto ela estiver usada resulta em comportamentos incertos.

E, reforçando, não adianta rezar: só backup salva!

Se pintar um problema, tem sempre o fórum deste blog. Até a próxima.

10 comentários:

  1. Oi Luiz, sempre acompanho seu blog, pois tenho Openwrt e muito usei para me ajudar nas configurações, parabéns, mas eu gostaria de saber se voce alguma vez configurou RAID1 no openwrt, tive um contratempo com meu HD de rede e não gostaria de passar por isso novamente. Abç Ivan

    ResponderExcluir
    Respostas
    1. Ivan, no OpenWRT nunca configurei um RAID1.

      Porém, é questão de usar os comandos do Linux para fazer o mesmo.
      Olhando por cima, tem tudo já empacotado (mdadm e kmod-md-raid1).

      Só não estou certo do carregamento do dispositivo. No pior dos casos, você terá que preencher o mdadm.conf e rodar "mdadm --assemble --scan" antes de usar o disco em /dev/mdx. Testa que vai funcionar.

      Excluir
  2. Respostas
    1. Ivan, se quiser pegar "mais leve", você pode simplesmente sincronizar os dados em lote, usando o rsync. Se a frequência de atualização não for muito alta, o rsync funciona sem problemas.

      Excluir
  3. Obrigado, vou estudar como fazê-lo e posto os resultados. Abç

    ResponderExcluir
  4. Oi, sou novo no OpenWrt, sobre o que vc disse de copiar a pasta overlay usando o Winscp, eu tentei aqui compactando em "Tar" e direcionado para a "Tmp" mas deu um erro e o programa reiniciou! Tentei novamente, mandando ele salvar o o arquivo na sda1 mas novamente ele travou!
    O que será que pode ser?
    Outra coisa, como eu faço para entrar no modo recuperação?

    Por fim, eu fui mais atrevido e alterei o arquivo base-files-essential" na pasta "keep.d/" adicionando o diretório overlay. Após isso tentei fazer um Backup na interface web e o mesmo ficou com uns 5 MB, contendo a aludida pasta overlay!
    Será que seu eu tentar restaurar isso vai dar problema aqui?

    Grato pela atenção!

    ResponderExcluir
    Respostas
    1. Olá Unknown,

      Melhor abrir um tópico no fórum. Fora a saída do seu tar, manda um df também.
      Vou precisar de mais info do que "deu um erro". Qual erro é importante.

      Eh não brincaria com o keep.d (não foi feito para você alterar). O local para você mexer é o sysupgrade.conf.
      De qualquer forma, não acho que toda a overlay no backup seus uma boa ideia. Não tanto para gerar, mas não seu se a restauração do backup seria suave. No mínimo, fazer um upgrade mantendo as configurações já garantidamente não daria certo. Restaurar uma overlay de uma versão diferente de OpenWRT não vai funcionar.

      Quanto ao modo de recuperação, é melhor olhar o artigo específico. Busca por "recuperação luizluca"que você vai achar os dos artigos, um com vídeo, sobre o tema.






      Excluir
  5. Olá Luiz.
    Parabéns pelo artigo.
    Backup realmente é muitíssimo importante de TUDO. O pior que muitos profissionais de informática não fazem: casa de ferreiro, espeto de pau.
    Eu já tinha pensado no problema dos backups dos roteadores que não são completos mas sim apenas das configurações. Mas nunca fui mais a fundo pois tenho só os meus roteadores de casa para administrar, e ai o tempo nunca se justificou em prol de outros assuntos.
    Hoje cai neste post por acaso e a chama se reacendeu. Muito interessante a tua solução com o overlay.
    Mas lendo o artigo, me passaram outros pensamento na cabeça: o que acontece se eu baixar o overlay de um roteador model X para um do modelo Y, com hardwares diferentes? Você já fez essa experiência? Você comentou: "backup podem ser utilizados para replicação 'em massa'".
    Abs,
    Eduardo

    ResponderExcluir
    Respostas
    1. Eduardo, veja bem :-) Tem pacotes específicos para um alvo (target, como ar71xx, ramips), em especial os módulos de kernel.
      Acima disso, cada processador tem sua arquitetura (arm, mips, x86). Um programa compilado para uma arquitetura não funciona em outra.

      Começando com a ideia de usar a overlay completa de um equipamento em outro.

      Para reutilizar uma mesma overlay em outro equipamento extremamente igual, você deve apagar as chaves privadas do ssh (/etc/dropbear/*key), a semente do aleatório /etc/uramdom.seed e trocar o prefixo ula do ipv6 em /etc/config/network.

      Se for usar em outro equipamento do mesmo alvo, vai também precisar trocar o /etc/board.json. As configurações também podem ser específicas, como nome de LEDs e de interfaces de rede. Porém, é comum serem iguais na mesma família.

      Para equipamentos de alvos diferente, mas da mesma arquitetura, vai também precisar reinstalar pacotes específicos do alvo, como módulos de kernel, fora tudo citado anteriormente.

      Para equipamentos de arquitetura diferentes, também vai precisar reinstalar todos os pacotes da overlay.

      O script de backup não foi pensado para esse uso. Porém, ele facilita o processo com o backup onde os arquivos de pacotes são filtrados e fornecer a lista do que estava instalado.

      Excluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir