mini_fo ist ein Overlay-Dateisystem vergleichbar mit UnionFS, welches von diversen Live-Distributionen (z.B. Knoppix) bekannt ist. Vereinfacht ausgedrückt, lässt sich damit ein schreibgeschütztes Dateisystem beschreibbar machen. Natürlich kann man auf dem schreibgeschützten Medium nicht wirklich (physisch) schreiben: Änderungen werden an anderer Stelle gespeichert, was aber für den Anwender derart transparent geschieht, dass er davon eigentlich nichts merkt - sondern wirklich den Eindruck eines einzelnen, beschreibbaren Mediums hat.
Das Paket wird über das Webinterface konfiguriert. Hierbei kann der Speicherort für die Änderungen ausgewählt werden. Entweder RAM (flüchtig) oder JFFS2 (reboot resistent). Bei Auswahl der Option JFFS2 muss genügend freier Speicherplatz verfügbar sein (die Daten werden gzip komprimiert abgespeichert):
root@fritz:/var/mod/root# df /dev/mtdblock5
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mtdblock5 3200 2612 588 82% /sto
Das Paket kann nur durch einen Reboot de-/aktiviert werden.
mini_fo ist ein Kernel-Modul, das man entweder ohne Argumente mit insmod lädt…
insmod mini_fo
…oder in der Freetz-Oberfläche in Modules einträgt, damit es beim Start geladen wird:
mini_fo
Ist es aktiv steht der mount-type ‘mini_fo’ zur Verfügung. Um /usr/www beschreibbar zu machen genügt diese Zeile in rc.custom:
mkdir -p /tmp/usrwww /tmp/usrwww-sto &&
mount -o bind /usr/www /tmp/usrwww &&
mount -t mini_fo -o base=/tmp/usrwww,sto=/tmp/usrwww-sto minifo /usr/www
Im Pfad /tmp/usrwww-sto befinden sich dann jegliche Änderungen.
Ein Firmware-Update kann evtl. mit geladenem mini_fo Modul scheitern (getestet mit 7170 4.8x). Es gibt dann keine Fehlermeldung aber die Box hängt vor dem Herunterfahren und der Flash-Vorgang kommt nie zustande. Wenn dies passiert sollte man vor einer Firmware-Aktualisierung ohne mini_fo booten. Aktueller Trunk zeigt das Phenomen nicht.
Wird mini_fo auf einer Box ohne JFFS2-Partition betrieben fängt es auch Schreibzugriffe auf /data ab, zumindest bis ein USB-Stick gemountet ist. In /sto/mini_fo taucht dann data/tam/config und data/tam/rec/ mit dem Datum 2000 (also vor Zeitsync) auf. Dieser Nebeneffekt ermöglicht es Anrufbeantworter ohne JFFS2-Partition und ohne USB-Stick zu testen, z.B. zur Weiterleitung per Email mit anschließender Löschung. Dabei sollte man die Aufnahmelänge begrenzen damit der RAM-Speicher nicht versehentlich aufgebraucht werden kann. Speichert mini_fo im RAM gehen allerdings bei einem Neustart alle derart definierten Anrufbeantworter verloren.
Bei Modellen der Generation 7170 zeigten sich Watchdog initiierte Rebootschleifen (ca. 2-4min) bei aktiviertem WLAN mit Verschlüsselung im DSL-Modem Modus (also Default nach Werksreset). Rebootgrund in crash.log ist dann ein dsld Watchdog Timeout. Ohne WPA Verschlüsselung oder im IP-Client Modus zeigt sich das Phenomen nicht. Offensichtlich werden Semaphoren die dsld zur Verwaltung von Shared Memory in /var/tmp/csem ablegt teilweise in /sto abgefragt und der Mechanismus empfindlich gestört.
The modified files are stored here (trunk version):
/sto/mini_fo/...
So for example a modified /usr/sbin/blkid is stored as /sto/mini_fo/usr/sbin/blkid.
If you remove the latter one, the original one will reappear in your file system.