Backup OpenWrt

Da EigenWiki.
Vai alla navigazione Vai alla ricerca

Seguendo questa procedura è possibile ottenere un backup di un router o antenna che gira OpenWrt o LEDE.
Il backup sarà flashabile (quasi) 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.

La procedura qui descritta è stata testata con molti router ar71xx (SoC Atheros) e alcuni ramips (SoC Ralink/MediaTek), ed è valida se il router utilizza un'immagine squashfs read-only ("rootfs"), overlayata quindi da una partizione jffs2 read-write ("rootfs_data").
La partizione 'virtuale' "firmware" che si andrà a backuppare infatti contiene le due partizioni "kernel" e "rootfs", mentre "rootfs_data" a sua volta è una partizione virtuale compresa in "rootfs" (e grande quanto lo spazio non utilizzato dallo squashfs).

Procedura di backup

  • Per prima cosa, bisogna accedere al router via ssh ed eseguire cat /proc/mtd, comparirà questo:
root@casottino-ap ~ # 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 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 o BusyBox 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[1]
(sostituendo i nomi dei file come necessario.)
  • 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!

Note

  1. Purtroppo va usato md5sum perché è l'unico incluso di default in OpenWrt/LEDE...