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:
1 2 3 4 5 6 7 8 |
# cat /proc/mtd dev: size erasesize name mtd0: 00050000 00010000 "uboot" mtd1: 00180000 00010000 "kernel" mtd2: 00400000 00010000 "rfs" mtd3: 01930000 00010000 "app" mtd4: 000c0000 00010000 "config" mtd5: 00040000 00010000 "logo" |
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.
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 é
Note que “nfs” não aparece na lista.