Wraz z pojawieniem się nowej(lepszej) implementacji fstab w OpenWrt do grona nowych funkcjonalności doszła możliwość przeniesienia systemu plików na zewnętrzny i większy nośnik. Powszechnie wiadomo, że routery nie posiadają zbyt dużej przestrzeni na system plików w tym nowe pakiety, dlatego też pojawienie się takiej opcji powiększa możliwości naszego routera.
1) Zainstalowane odpowiednie pakiety:
opkg update opkg install block-extroot block-mount block-hotplug
(opcjonalnie)
opkg install e2fsck
Czas inicjowania dysku wynosi domyślnie 20s, i zdecydowanie wystarczy. W przypadku, gdy jest za krótki zmieniamy go w pliku /lib/preinit/00_extroot.conf po zainstalowaniu block-extroot.
2) Ze względu że extroot to w zasadzie rozszerzenie fstaba to nie ma sensu przedstawiać jak przygotować dysk twardy. Potrzebujemy dysku podzielonego na dwie partycje. Zaleca się, zwłaszcza dla dysków twardych z głowica ruchomą, aby swap umieszczać na początku dysku, w celu szybszego docierania do tych danych. W przypadku flaszy, kart SD nie ma to większego znaczenia. Sposób podziału i przygotowania dysku jest na oddzielnej podstronie
Jeżeli posiadamy już skonfigurowany router warto po prostu te dane przenieść na nowy dysk, tak żeby po restarcie routera działał poprawnie. Pomijając ten krok trzeba mieć na uwadze, że ustawienia będą domyślne(IP 192.168.1.1 na telnecie)
Zadanie jest proste do wykonania, montujemy dysk tymczasowo i zgrywamy dane:
mkdir /tmp/hdd mount -t <nazwa system plików, np. ext3> /dev/sda1 /tmp/hdd mkdir -p /tmp/hdd/etc/config cp -a /overlay/etc/config/* /tmp/hdd/etc/config/ umount /tmp/hdd
Partycje przed extrootem:
root@OpenWrt:/# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 3200 3200 0 100% /rom tmpfs 63504 56 63448 0% /tmp tmpfs 512 0 512 0% /dev /dev/mtdblock3 12096 476 11620 4% /overlay mini_fo:/overlay 3200 3200 0 100% /
Przykładowa konfiguracja dla dysku podzielonego na dwie partycje (/dev/sda1 - ext3, /dev/sda2 - swap):
uci show fstab
fstab.automount=global fstab.automount.from_fstab=1 fstab.automount.anon_mount=1 fstab.autoswap=global fstab.autoswap.from_fstab=0 fstab.autoswap.anon_swap=0 fstab.@mount[0]=mount fstab.@mount[0].options=rw,noatime fstab.@mount[0].enabled_fsck=1 fstab.@mount[0].device=/dev/sda1 fstab.@mount[0].is_rootfs=1 fstab.@mount[0].enabled=1 fstab.@mount[0].fstype=ext3 fstab.@swap[0]=swap fstab.@swap[0].device=/dev/sda2 fstab.@swap[0].enabled=1
Niezwykle ważna opcja to is_rootfs=1, bez tego poprostu nic nie zadziała. Włączenie tej opcji jest proste:
uci set fstab.@mount[0].is_rootfs=1 uci commit fstab
Warto również włączyć sprawdzanie system plików( wymagany jest pakiet e2fsck):
uci set fstab.@mount[0].enabled_fsck=1 uci commit fstab
Ostatecznie dodajemy do autostartu i restartujemy:
/etc/init.d/fstab enable reboot
Tabela montowania po rebocie wyglÄ…daja inaczej:
root@OpenWrt:/# df -h Filesystem Size Used Available Use% Mounted on /dev/root 3.1M 3.1M 0 100% /rom tmpfs 62.0M 44.0K 62.0M 0% /tmp tmpfs 512.0K 0 512.0K 0% /dev /dev/sda1 1.8G 34.9M 1.7G 2% /overlay mini_fo:/overlay 3.1M 3.1M 0 100% /
Zamontowana partycja jako /overlay reprezentuje nasz dysk, wniosek - extroot działa.
Usunięcie/wypięcie dysku z extrootem nie spowoduje uszkodzenia firmware routera lub przypadku, że się nie uruchomi. Po prostu zbotuje z pamięci flash z ustawieniami, pakietami przez dokonaniem przeniesienia systemu plików na dysk zewnętrzny.
