Backup OpenWrt: differenze tra le versioni
(Creata pagina con "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 anch...") |
m (Workaround bug di mediawiki, come fanno su wikipedia, altrimenti appaiono due punti di elenco su una riga...) |
||
(6 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
Seguendo questa procedura è possibile ottenere un backup di un router o antenna che gira OpenWrt o LEDE. | Seguendo questa procedura è possibile ottenere un backup di un router o antenna che gira [[OpenWrt]] o LEDE.<br> | ||
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. | 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 <code>ar71xx</code> (SoC Atheros) e alcuni <code>ramips</code> (SoC Ralink/MediaTek), ed è valida se il router utilizza un'immagine <code>squashfs</code> read-only ("<code>rootfs</code>"), overlayata quindi da una partizione <code>jffs2</code> read-write ("<code>rootfs_data</code>").<br> | |||
La partizione 'virtuale' "<code>firmware</code>" che si andrà a backuppare infatti contiene le due partizioni "<code>kernel</code>" e "<code>rootfs</code>", mentre "<code>rootfs_data</code>" a sua volta è una partizione virtuale compresa in "<code>rootfs</code>" (e grande quanto lo spazio non utilizzato dallo squashfs). | |||
== Procedura di backup == | == Procedura di backup == | ||
* Per prima cosa, bisogna accedere al router via ssh ed eseguire | * Per prima cosa, bisogna accedere al router via ssh ed eseguire <code>cat /proc/mtd</code>, comparirà questo: | ||
<pre> | |||
root@ | root@casottino-ap ~ # cat /proc/mtd | ||
dev: size erasesize name | dev: size erasesize name | ||
mtd0: 00020000 00010000 "u-boot" | mtd0: 00020000 00010000 "u-boot" | ||
Riga 14: | Riga 17: | ||
mtd4: 00010000 00010000 "art" | mtd4: 00010000 00010000 "art" | ||
mtd5: 007d0000 00010000 "firmware" | mtd5: 007d0000 00010000 "firmware" | ||
</pre> | |||
Bisogna segnarsi il numero del device | :Bisogna segnarsi il numero del device <code>mtd</code> corrispondente alla partizione chiamata "<code>firmware</code>".<br> | ||
In questo caso di esempio, è | :In questo caso di esempio, è <code>mtd5</code>. | ||
* Sul computer, in un'altra shell, eseguire questo comando: | * Sul computer, in un'altra shell, eseguire questo comando: <code>nc -l 6666 > backup.bin</code><br> | ||
Ciò dirà al computer di mettersi in ascolto sulla porta TCP 6666, e di scrivere tutto quello che riceverà sul file chiamato | :Ciò dirà al computer di mettersi in ascolto sulla porta TCP 6666, e di scrivere tutto quello che riceverà sul file chiamato <code>backup.bin</code>.<br> | ||
:'''Attenzione: se il file esiste già, verrà sovrascritto senza chiedere conferma!''' | |||
* Nella shell con la connessione ssh verso il router, eseguire questo comando: | * Nella shell con la connessione ssh verso il router, eseguire questo comando: <code>nc 192.168.1.222 6666 < /dev/mtdblock5</code><br> | ||
Dove | :Dove <code>192.168.1.222</code> è l'indirizzo IP del computer, <code>6666</code> è la porta TCP alla quale il router si collegherà, e <code>/dev/mtdblock5</code> è il file a blocchi virtuale dove si trova la partizione <code>firmware</code> del router.<br> | ||
:'''Attenzione a non sbagliare a scrivere la riga, specialmente NON bisogna confondere <code><</code> con <code>></code> se non si vuole cancellare il firmware dal router invece di leggerlo!''' | |||
* Aspettare il completamento dell'operazione. | * Aspettare il completamento dell'operazione.<br> | ||
Se passa tanto tempo (più di 15 secondi) senza che | **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.<br> | ||
::(Questo accade specialmente con GNU Netcat invece di OpenBSD Netcat o BusyBox Netcat...)<br> | |||
::In questo caso, premere <code>CTRL + C</code> per chiudere il netcat e tornare alla shell. | |||
* Eseguire un checksum dei file, per verificare che l'operazione sia andata a buon fine. | * Eseguire un checksum dei file, per verificare che l'operazione sia andata a buon fine.<br> | ||
Nella shell del router, eseguire: | **Nella shell del router, eseguire: <code>md5sum /dev/mtdblock5</code><br> | ||
Nella shell del PC eseguire: | **Nella shell del PC eseguire: <code>md5sum backup.bin</code><ref>Purtroppo va usato md5sum perché è l'unico incluso di default in OpenWrt/LEDE...</ref><br> | ||
::(sostituendo i nomi dei file come necessario.)<br> | |||
* Se i valori corrispondono, fatto! | * Se i valori corrispondono, fatto!<br> | ||
Se invece non corrispondono, il file di backup è corrotto, e la procedura va ripetuta. | **Se invece non corrispondono, il file di backup è corrotto, e la procedura va ripetuta. | ||
== Procedura per il ripristino == | == Procedura per il ripristino == | ||
* Trasferire il file | * Trasferire il file <code>backup.bin</code> precedentemente ottenuto nella cartella <code>/tmp/</code> del router.<br> | ||
Se si ha accesso SSH al router, è possibile usare | **Se si ha accesso SSH al router, è possibile usare <code>scp backup.bin root@192.168.1.1:/tmp/</code><br> | ||
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 | **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:<br> | ||
***<code>nc -l 6666 < backup.bin</code> sul PC, e<br> | |||
***<code>nc 192.168.1.222 6666 > /tmp/backup.bin</code> sul router.<br> | |||
::'''Attenzione sempre a non confondere <code><</code> con <code>></code> altrimenti si cancella il backup dal PC!''' | |||
* Eseguire questo comando sul router: | * Eseguire questo comando sul router: <code>sysupgrade -n -v /tmp/backup.bin</code><br> | ||
L'opzione | **L'opzione <code>-v</code> significa verbose, ossia stampa informazioni sul progresso dell'operazione di flashing.<br> | ||
L'opzione | **L'opzione <code>-n</code> 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. | * Attendere che il router si riavvii. | ||
Enjoy! | |||
== Note == | |||
<references /> | |||
[[Categoria:EigenNet]] | |||
[[Categoria:HowTo]] |
Versione attuale delle 14:55, 15 set 2017
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 partizionefirmware
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.
- 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.
- (Questo accade specialmente con GNU Netcat invece di OpenBSD Netcat o BusyBox Netcat...)
- 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]
- Nella shell del router, eseguire:
- (sostituendo i nomi dei file come necessario.)
- (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, enc 192.168.1.222 6666 > /tmp/backup.bin
sul router.
- Se si ha accesso SSH al router, è possibile usare
- Attenzione sempre a non confondere
<
con>
altrimenti si cancella il backup dal PC!
- Attenzione sempre a non confondere
- 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!
- L'opzione
- Attendere che il router si riavvii.
Enjoy!
Note
- ↑ Purtroppo va usato md5sum perché è l'unico incluso di default in OpenWrt/LEDE...