Backup OpenWrt
Seguendo questa procedura è possibile ottenere un backup di un router o antenna che gira OpenWrt o LEDE. Il backup sarà flashabile normalmente con sysupgrade, e include anche la partizione jffs2, ossia quella riscrivibile dove vengono memorizzati tutti i file creati o modificati dall'utente o dal sistema.
Procedura di backup
- Per prima cosa, bisogna accedere al router via ssh ed eseguire `cat /proc/mtd`, comparirà questo:
``` root@router ~ # cat /proc/mtd dev: size erasesize name mtd0: 00020000 00010000 "u-boot" mtd1: 00117090 00010000 "kernel" mtd2: 006b8f70 00010000 "rootfs" mtd3: 003d0000 00010000 "rootfs_data" mtd4: 00010000 00010000 "art" mtd5: 007d0000 00010000 "firmware" ```
Bisogna segnarsi il numero del device `mtd` corrispondente alla partizione chiamata "`firmware`". In questo caso di esempio, è `mtd5`.
- Sul computer, in un'altra shell, eseguire questo comando: `nc -l 6666 > backup.bin`
Ciò dirà al computer di mettersi in ascolto sulla porta TCP 6666, e di scrivere tutto quello che riceverà sul file chiamato `backup.bin`.
- Attenzione: se il file esiste già, verrà sovrascritto senza chiedere conferma!*
- Nella shell con la connessione ssh verso il router, eseguire questo comando: `nc 192.168.1.222 6666 < /dev/mtdblock5`
Dove `192.168.1.222` è l'indirizzo IP del computer, `6666` è la porta TCP alla quale il router si collegherà, e `/dev/mtdblock5` è il file a blocchi virtuale dove si trova la partizione `firmware` del router.
- Attenzione a non sbagliare a scrivere la riga, specialmente NON bisogna confondere `<` con `>` se non si vuole cancellare il firmware dal router invece di leggerlo!*
- Aspettare il completamento dell'operazione.
Se passa tanto tempo (più di 15 secondi) senza che non passino dati tra il router e il computer, è possibile che l'operazione sia conclusa, ma che netcat non se ne sia accorto. (Questo accade specialmente con GNU Netcat invece di OpenBSD Netcat...) In questo caso, premere `CTRL + C` per chiudere il netcat e tornare alla shell.
- Eseguire un checksum dei file, per verificare che l'operazione sia andata a buon fine.
Nella shell del router, eseguire: `md5sum /dev/mtdblock5` Nella shell del PC eseguire: `md5sum backup.bin` (sostituendo i nomi dei file come necessario.) (Purtroppo va usato md5sum perché è l'unico incluso di default in OpenWrt/LEDE...)
- Se i valori corrispondono, fatto!
Se invece non corrispondono, il file di backup è corrotto, e la procedura va ripetuta.
Procedura per il ripristino
- Trasferire il file `backup.bin` precedentemente ottenuto nella cartella `/tmp/` del router.
Se si ha accesso SSH al router, è possibile usare `scp backup.bin root@192.168.1.1:/tmp/` Se invece si ha solo accesso di telnet (come ad esempio se il router gira una vecchia versione di OpenWrt ed è in failsafe), bisogna usare netcat "al contrario" di come si è usato per il backup, ossia `nc -l 6666 < backup.bin` sul PC e `nc 192.168.1.222 6666 > /tmp/backup.bin` sul router. Attenzione sempre a non confondere `<` con `>` altrimenti si cancella il backup dal PC!
- Eseguire questo comando sul router: `sysupgrade -n -v /tmp/backup.bin`
L'opzione `-v` significa verbose, ossia stampa informazioni sul progresso dell'operazione di flashing. L'opzione `-n` invece dice a sysupgrade di non ripristinare lo stato attuale del sistema dopo aver flashato l'immagine. Sysupgrade non deve fare ciò perché l'immagine di backup contiene già uno stato del sistema (ossia una partizione jffs2) al suo interno!
- Attendere che il router si riavvii.
- Enjoy!