Tworzenie kopi zapasowej systemu
Ostatnia zmiana: 2013-12-14 09:52

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:

  • /etc/sysupgrade.conf
  • /lib/upgrade/keep.d/*
  • 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.
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.

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.