Tworzenie kopi zapasowej systemu
Ostatnia zmiana: 2018-01-04 07:01
Budowa systemu plików w OpenWrt umożliwia swobodne tworzenie i edytowanie plików, konfigurację, instalację nowych programów i usuwanie istniejących. Po skonfigurowaniu systemu warto wykonać kopię bezpieczeństwa, która będzie zawierała wszystkie zmiany i ustawienia wykonane przez nas. Ponieważ jest to zwykły system komputerowy, przygotowanie kopii oznacza zarchiwizowanie interesujących nas plików. W OpenWrt znajdziemy specjalne narzędzie do tego - jest to znany program o nazwie
sysupgrade który jest wykorzystywany także do aktualizacji systemu.
Należy pamiętać, że z otworzeniem backupu w OpenWrt wiążą się dwie sprawy:
1. backup odtwarza całe pliki konfiguracyjne (w szczególności te zawarte w katalogu
/etc/config). Jeżeli odtwarzamy starszy backup na firmware z nowszą wersją programu, to plik z backupu może nie posiadać wszystkich niezbędnych opcji które są potrzebne dla nowej wersji jakiegoś programu. Często można znaleźć informacje że backup z wersji "abc" nie jest kompatybilny z wersją "abd". Związane jest to właśnie z brakiem odpowiednich opcji w starym pliku konfiguracyjnym. Odtworzenie backupu związane jest więc z nadpisaniem pliku, nie złączeniem starego i nowego we wspólne opcje.
2. backup nadpisuje kompletnie pliki. Jeżeli we flash zostało mało miejsca (np. dla obrazów Gargoyle dla routerów z USB i 4MB pamięci flash) to odtworzenie backupu może się nie udać z powodu braku miejsca na zapisanie plików.
Backup w przypadku OpenWrt to zwykłe archiwum *tar.gz, więc zawsze można z niego usunąć pliki które uważamy za zbędne.
Niezależny backup
Kopię wykonuje się przy pomocy programu
sysupgrade, służą do tego dwie dodatkowe opcje. Dodatkowo można dodać także opcję -v (
sysupgrade -v -b /tmp/archiwum, sysupgrade -v -b /tmp/archiwum), wtedy program będzie wyświetlał co robi.
Tworzenie kopii bezpieczeństwa
# sysupgrade -b /tmp/archiwum
W skład archiwum będą wchodziły pliki i katalogi które są wymienione w:
- pliki konfiguracyjne programów (ich listę można zobaczyć wykonując polecenie opkg list-changed-conffiles w OpenWrt. Gpkg z Gargoyle nie posiada tej opcji.)
Fizycznie tworzone jest archiwum typu tar/gz zawierające kopię tych plików. Archiwum to można rozpakować i dowolnie zmodyfikować wg własnych potrzeb. W skład archiwum wejdą wszystkie pliki z wymienionych źródeł, nie tylko te które zostały zmodyfikowane. Warto zauważyć że ten backup tworzy się tylko z listy wymienionych plików, nie będzie zawierał programów zainstalowanych ręcznie przez użytkownika ani innych plików, skryptów i ustawień przez niego wykonanych.
Odtwarzanie plików
# sysupgrade -r /tmp/archiwum
Oczywiście plik z archiwum może być także na pendrive czy innym nośniku. Odtwarzanie backupu związane jest z rozpakowaniem i utworzeniem lub nadpisaniem przez system oryginalnych plików tymi z archiwum. Po odtworzeniu należy wykonać reboot lub zrestartować poszczególne usługi.
Kopia wszystkich zmian
Najczęściej jednak chcielibyśmy wykonać kopię wszystkiego co zostało zmienione w systemie. Jeżeli używamy obrazów z systemem plików
squashfs to taka operacja jest możliwa, ponieważ wszystkie zmiany odkładane są na osobnej partycji o nazwie
rootfs_data montowanej w działającym systemie w katalogu
/overlay. Aby wykonać kopię wszystkich zmian, zainstalowanych programów i innych danych wystarczy więc skopiować partycję
rootfs_data. Najlepiej wykonać to w trybie
failsafe, ponieważ będziemy mieli pewność że żadne dane w momencie wykonywania backupu nie są na niej zmieniane. Poniższe czynności mają zastosowanie tylko dla obrazów
squashfs; dla innych (jffs2, ext4) nie ma to sensu ponieważ nie występuje dla nich partycja
rootfs_data. N/w sposób możemy wykorzystać tylko w przypadku gdy ilość pamięci flash jest mniejsza niż ilość pamięci ram.
Sprawdzamy w jakim urządzeniu blokowym znajduje się partycja
rootfs_data:
# grep rootfs_data /proc/mtd
powinna pojawić się pewna informacja, dla przykładu:
mtd3: 00190000 00010000 "rootfs_data"
Interesująca partycja ma numer 3 (czyli jest to urządzenie /dev/mtdblock3), więc wykonanie backupu to (jeszcze raz: dobrze to zrobić w trybie
failsafe):
# dd if=/dev/mtdblock3 of=/tmp/zmiany.bin
Plik można przesłać przez scp czy wput na inny serwer.
Odtworzenie: instalujemy identyczny system jak mieliśmy wcześniej (chodzi o to żeby rozmiar partycji nie uległ zmianie) i wykonujemy (najlepiej w trybie
failsafe):
# dd if=/tmp/zmiany.bin of=/dev/mtdblock3
# reboot
Plik
/tmp/zmiany.bin należy wcześniej przesłać do routera przy pomocy scp, pobrać przy pomocy wget z zewnętrznego komputera/serwera lub dostarczyć na pendrive. Należy pamiętać że w/w czynności możemy wykonać tylko wtedy, gdy rozmiar pamięci flash nie przekracza ilości dostępnej pamięci ram. Inaczej po prostu nie będzie miejsca żeby zapisać plik z backupem.
Aktualizacja systemu
Zwykle aktualizację systemu robimy bez zachowywania zmian, czyli z opcją
-n. Jeżeli nie użyjemy tej opcji to przed wykonaniem upgrade zostanie wykonany backup plików które zostaną odtworzone po wgraniu nowego firmware (pliki wybierane są na identycznych zasadach jak przy zwykłym backupie)
# sysupgrade /tmp/code.bin # lub sysupgrade -v /tmp/code.bin
Oczywiście należy pamiętać o wspomnianych problemach: jeżeli zrobimy upgrade starego systemu z zachowaniem plików to może to na nowym nie działać z powodu braku jakiś plików czy opcji które powinny się w konfiguracji znajdować.
Kolejną ciekawą opcję jest możliwość upgrade firmware z wykorzystaniem zewnętrznego pliku backupu:
# sysupgrade -f /tmp/archiwum /tmp/code.bin
jeżeli plik z backupem mamy na routerze lub
# sysupgrade -f ftp://192.168.1.100/konfig/archiwum /tmp/code.bin
jeżeli plik znajduje się np. na zewnętrznym serwerze (tu: ftp o adresie 192.168.1.100).
Extroot
O ile zrobienie archiwum i odtworzenie kopii ma wpływ także na extroota (zostaną zmodyfikowane pliki w systemie plików, więc jak mamy extroota to właśnie na nim), o tyle kopiowanie partycji
rootfs_data dotyczy tylko pamięci flash - wewnętrznej routera. Jeżeli chcemy wykonać kopię plików z extroota to należy wyłączyć router i wykonać po prostu kopię zapasową plików z pendrive.