Skrypt do przełączania aktywnych partycji WRT1xxxAC

Schemat patycji dla routerów Linksys WRT1xxxAC (https://wiki.openwrt.org/toh/linksys/wrt_ac_series#flash_storage_layout) jest może klarowny, ale jest pewien bardzo ważny szczegół, który nie jest wystarczająco  (jak dla mnie) podkreślony. Otóż oprogramowanie routera jest zainstalowane na dwóch partycjach jednocześnie np. mtd4 i mtd6. Z tym, że oczywiście tylko jedna partycja jest aktywna w danym momencie. Zostało to zaprojektowane w taki sposób aby druga partycja była zawsze zabezpieczeniem na wypadek problemu (np. z flashowaniem) z pierwszą partycją. Jeśli coś pójdzie nie tak, router powinien nas automatycznie przepiąć na druga partycję.

 

I teraz najważniejsze, zwłaszcza jeśli chcemy korzystać lub już korzystamy z openWRT/LEDE/DDWRT. Każda instalacja powoduje nadpisanie drugiej nieaktywnej partycji oraz jej aktywację. Czyli np. jeśli instalujemy LEDE korzystając z oryginalnego softu Linksysa, nadpisana zostanie druga partycja i z niej wystartuje router.

Jeśli jesteśmy już na LEDE a, na drugiej partycji mamy oryginalny soft, a chcemy zaktualizować tylko LEDE to powinniśmy przełączyć się na chwilę na oryginalny soft linksysa i stamtąd dokonać instalacji. W przeciwnym wypadku będziemy mieli LEDE zainstalowane na obu partycjach (starszą i nowszą wersję).

 

Przełączyć się można albo przy pomocy luci i opcji advanced reboot (jeśli mamy zainstalowany pakiet)

lub przy pomocy małego skryptu shellowego:

#!/bin/sh

cur_boot_part=`/usr/sbin/fw_printenv -n boot_part`
target_firmware=""
if [ "$cur_boot_part" = "1" ]
then
target_firmware="kernel2"
fw_setenv boot_part 2
fw_setenv bootcmd "run altnandboot"
elif [ "$cur_boot_part" = "2" ]
then
target_firmware="kernel1"
fw_setenv boot_part 1
fw_setenv bootcmd "run nandboot"
fi
# re-enable recovery so we get back if the new firmware is broken
fw_setenv auto_recovery yes
echo "$target_firmware"
reboot

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.