Procedimento genérico de backup e restauração de firmware linux via telnet

Como o próprio nome diz, este procedimento é genérico. Um exemplo simplificado que você pode adaptar para o seu aparelho. Até agora só testei com meu NVR (backup e restauração) e seis câmeras IP (apenas backup). Eu vou passar a publicar backups de aparelhos que passarem pelas minhas mãos e espero poder estimular outras pessoas a publicarem os backups dos seus.

Do que você precisa:

  • Acesso telnet ao aparelho;
  • Que o linux do aparelho tenha busybox (os comandos necessários são parte dele);
  • Um servidor NFS ou TFTP (por enquanto só abordarei NFS). Aviso: Se o aparelho tem porta USB que suporta pendrives pode ser muito mais simples usá-la em vez de usar o servidor NFS/TFTP. Veja exemplo na seção “DUMP/backup do firmware” no meu post sobre o mini-NVR.

Infelizmente nem todo aparelho com busybox disponibiliza os comandos de que precisamos. Modems e roteadores, por exemplo, costumam vir com uma versão bem limitada do busybox. Aliás, é comum você sequer conseguir listar diretórios via telnet nesses equipamentos.

O que você precisa saber

Para o propósito deste texto, entenda o comando “mount” do linux como o comando para fazer o que é um “mapeamento de rede” no jargão do Windows. Por exemplo:

mount -t nfs 10.0.0.10:/srv/storage /tmp/nfs

Faz com que o conteúdo de 10.0.0.10:/srv/storage seja mapeado localmente como /tmp/nfs

 

Para gravação em memória flash do tipo NOR usa-se o comando flashcp. Em flash do tip NAND usa-se o comando nandwrite. Eu suponho que você possa distinguir qual é o caso por qual comando está presente no seu aparelho. Nos poucos que testei somente flashcp estava disponível.

 

Apesar do firmware que você instala ser apresentado como um único arquivo, no aparelho a memória flash é organizada em partições, como um HDD. No jargão do linux a flash é chamada de “MTD” e as partições são identificadas como “mtd0”, “mtd1”, “mtd2” e assim por diante.

Para obter tudo o que precisamos saber sobre essas partições use o comando:

cat /proc/mtd

A resposta é algo assim:

O campo “name” nos dá a dica do propósito (os nomes variam com os aparelhos) de cada partição o que é muito útil ao fazer restauração e modificações. Você deve fazer backup de todas, mas só deve restaurar o mínimo necessário e com atenção:

  • uboot – A primeira partição, não importando o nome, deve ser o bootloader. Geralmente somente leitura. Não mexa nessa a menos que não tenha escolha.
  • kernel – É onde fica o linux propriamente dito. Geralmente somente leitura. Geralmente você não precisa mexer com ela.
  • rfs – “rootfs” ou sistema de arquivos raiz. Não tenho certeza ainda do que você pode fazer com ela.
  • app – No caso do NVR, é onde fica o programa (app) que você vê no monitor, o controle activex que você baixa, etc
  • config – a configuração do usuário. Muitas vezes apagar essa partição faz um hard reset do aparelho, mas sempre faça um backup antes.
  • logo – no caso do NVR é nessa partição que fica a imagem em formato JPG que aparece na tela quando o aparelho está dando boot.

Vamos supor para os procedimentos a seguir que você tem seis partições no aparelho e tem um servidor NFS no endereço 10.0.0.10 com um export chamado /srv/storage.

Procedimento de backup

mkdir /tmp/nfs

mount -t nfs 10.0.0.10:/srv/storage /tmp/nfs

dd if=/dev/mtd0 of=/tmp/nfs/mtd0.img
dd if=/dev/mtd1 of=/tmp/nfs/mtd1.img
dd if=/dev/mtd2 of=/tmp/nfs/mtd2.img
dd if=/dev/mtd3 of=/tmp/nfs/mtd3.img
dd if=/dev/mtd4 of=/tmp/nfs/mtd4.img
dd if=/dev/mtd5 of=/tmp/nfs/mtd5.img

Pronto, se você não viu nenhuma mensagem de erro uma cópia das seis partições está no seu servidor NFS. Confira o tamanho de cada arquivo com o que aparece na coluna “size” do comando cat /proc/mtd antes de prosseguir. Tem que dar exatamente igual mas perceba que os números em /proc/mtd estão em hexadecimal e o Windows mostra os tamanhos, claro, em decimal.

De posse desse backup você pode fazer comparações grosseiras entre firmwares. Instale várias versões pelo método tradicional, faça backup de todas elas e depois compare os backups com um utilitário de comparação para ter uma idéia do que mudou entre elas. Note que as partições que guardam as configurações de usuário podem ser sempre diferentes.

Procedimento de restauração

Digamos que você só queira restaurar as partições 3 e 4 e que os respectivos arquivos estão no compartilhamento do servidor NFS.

mkdir /tmp/nfs

mount -t nfs 10.0.0.10:/srv/storage /tmp/nfs

#cd /tmp/nfs

ls < – você deve ser capaz de ver uma listagem dos arquivos no servidor
flashcp -v mtd3.img /dev/mtd3
flashcp -v mtd4.img /dev/mtd4
reboot

Pronto. Partições restauradas.

1 comentário
  • Jefferson - 6.543 Comentários

    Hoje eu tentei usar esse procedimento com meu mini-NVR e falhei miseravelmente. Eu jurava que tinha conseguido antes mas agora toda tentativa de usar o comando mount dava o erro “no such device”.

    Depois de apanhar muito eu desisti e fiz o backup das partições via pendrive. Horas depois eu encontrei uma dica que pode explicar o problema: o mini-NVR possivelmente não tem suporte a nfs. Para checar que sistemas de arquivos o aparelho suporta o comando é este:

    cat /proc/filesystems

    E a resposta do mini-NVR é

    # cat /proc/filesystems
    nodev sysfs
    nodev rootfs
    nodev bdev
    nodev proc
    nodev tmpfs
    nodev securityfs
    nodev sockfs
    nodev usbfs
    nodev pipefs
    nodev anon_inodefs
    nodev devpts
    squashfs
    nodev ramfs
    vfat
    msdos
    iso9660
    nodev jffs2
    nodev fuse
    fuseblk
    nodev fusectl
    nodev mtd_inodefs
    ext3

    Note que “nfs” não aparece na lista.

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »