cat Befehl liefert Fehlermeldung: "cat: Write Error: Bad address"

TelefonSparbuch

Aktives Mitglied
Mitglied seit
23 Nov 2004
Beiträge
2,504
Punkte für Reaktionen
0
Punkte
36
Hallo,

seit einigen Tagen versuche ich die Ursache für diesen seltsamen Fehler zu finden, bzw. einen Workaround für die eigentliche Aktion, die ich realisieren möchte.

Es scheint so, dass der cat Befehl bei größeren Dateien (ca. ab 62 Kbyte oder ab 2000 Zeilen?) Probleme hat, denn solange diese Grenzen nicht überschritten werden, gibt es auch keine Probleme.

So nun zu dem, was ich bislang gemacht und probiert habe:
Ziel ist es, auf der Fritzbox (meine ist eine 7050 / Firmware .01) die Datei debug.cfg um eine Erweiterung zu ergänzen (konkret um den LCR Updater).

# alte Daten temporär ablegen:
cat /var/flash/debug.cfg > /var/debug.tmp
# Erweiterung hinzufügen (ca. 60 Kbyte ~ 2300 Zeilen)
cat /var/debug.add >> /var/debug.tmp
# Erweiterte Datei wieder am alten Platz sichern
cat /var/debug.tmp > /var/flash/debug.cfg
# liefert: cat: Write Error: Bad address

Der letzte cat Befehle lässt sich via mv ersetzen:
# alte Daten temporär ablegen:
cat /var/flash/debug.cfg > /var/debug.tmp
# Erweiterung hinzufügen (ca. 60 Kbyte ~ 2300 Zeilen)
cat /var/debug.add >> /var/debug.tmp
# Erweiterte Datei wieder am alten Platz sichern
mv /var/debug.tmp > /var/flash/debug.cfg

Das funktioniert ohne Fehlermeldung, nur sind die Daten in der debug.cfg nach dem Neustart wieder die alten (vor dem überschreiben...).

Hat jemand eine Idee, worin das Problem liegt, bzw. noch Ideen, wie man die debug.cfg auch mit größeren Datenmengen erweitern kann?

Gibt es irgendwelche Zeichenfolgen, die nicht in der debug.cfg enthalten sein dürfen (ich habe zumindest keine ungewöhnlichen Sonderzeichen im Quellcode).

Danke und Grüße
Harald
 
Mach mal bitte
Code:
ls -l /var/flash/debug.cfg
und poste das.
 
crw-r--r-- 1 root root 254, 98 Sep 8 2002 /var/flash/debug.cfg

Nach cat /var/debug.tmp > /var/flash/debug.cfg
cat: Write Error: Bad address
crw-r--r-- 1 root root 254, 98 Sep 8 2002 /var/flash/debug.cfg

mv debug.tmp /var/flash/debug.cfg
-rw-r--r-- 1 root root 123214 Mar 3 21:34 /var/flash/debug.cfg


Danke und Grüße
Harald
 
Hi.
Geht es denn wenn du woanders hin cattest? Oder passiert das nur unter /var/flash? Vielleicht ist dein tffs voll.

MfG Oliver
 
Es betrifft nur das /var/flash/debug.cfg eine Kopie via cat im /var Ordner ist kein Problem...

Das Problem besteht auch beim Einspielen via Installationstar (wodurch ich kein Update auf aktuelle Versionen vornehmen kann, da die debug.cfg nicht aktualisiert wird...)

Sehr seltsam ist nur, das wenn ich mir ein Testfile (jeweils ca. 50Kbyte) erstelle mit
a) 2500 Zeile à 40 Zeichen mit 'x' = #xxxxxxx....
b) 200 Zeilen à 2000 Zeichen mit 'x' = #xxxxx....

Dann kann ich die debug.cfg mit diesem Testfile (oder auch beiden) erweitern und speichern (überlebt auch einen Neustart).

Es muss also irgendwie mit dem Dateiinhalt zusammenhängen. Warum spielt der Inhalt der Datei eine Rolle? Welche Zeichenfolgen sind nicht zulässig...

Danke und Grüße
Harald
 
mtd3 und mtd4 sind jeweils 131 KByte groß.
Dadrin liegen die Konfigurationsdateien => /var/flash/*

Wenn ich das richtig verstanden habe sind mtd3/mtd4 im Wechsel gültig.
Irgendwas mit backup. Genaues weiß ich aber nicht.

Es sollten also insgesamt für alle Konfigurationen incl. Fragmentierung
( schreiben / löschen => Lücke => nicht groß genug für nächstes...)
nur 131 KB frei sein.
Die Anruflisten und internen Konfigurationen werden einiges an Platz einnehmen.
Ich kenne nicht AVM's Pläne, vermute aber mehr als 10-20 KByte dort
abzulegen ist nicht geplant.
Als Fehlerquelle würde ich also "zu wenig Platz" , Fragmentierung, etc.
vermuten.

Wenn du Dateien unabhängig von debug.cfg ablegen wolltest würde ich folgendes vorschlagen:
- Freie Major/Minor Nummer in /var/flash/* suchen
- in debug.cfg nur mit "mknod /var/flash/sparbuch 254 <deinenummer>" anlegen.
- Eventuell Fragen ob AVM dir die Nummer als "wird niemals belegt" bestätigt.

Dann kannst du die Syntax von der debug.cfg ( shell script ) umgehen und
vielleicht etwas Platz sparen.

Haveaniceday
 
Hallo haveaniceday,

das bedeutet auch, dass die Character Devices komprimierte Laufwerke/Dateien sind, denn ich kann auch Dateien anlegen, die über 200 Kbyte groß sind und einen Neustart überleben (zum Beispiel Daten die nur aus "#xxxxx..." bestehen und sich sehr gut komprimieren lassen...).

Im Prinzip ist die Lösung mit mknod etwas heikel aber schon mal eine neue Lösungsmöglichkeit :)
Wie groß dürfen denn eigene Konfigurationsdateien werden, was gewinne ich dadurch tatsächlich, von wieviel freiem Speicher darf ich im ungünstigen Fall (zum Beispiel der Fritzbox Fon mit nur 2 Mbyte Flash!?) ausgehen?

Die Lösung (zum Testen) wäre also, mit ls -l die Subnodes auszulesen und einen freien Platz zu verwenden. Auf meiner Fritzbox 7050/Firmware .01 beginnen diese erst bei 98 (debug.cfg) und enden bei 133 (telefon_misc). Wenn ich das richtig verstehe kann ich eine Subnode im Bereich 0 bis 255 verwenden. Dieses Character Device und dessen Inhalt überlebt auch einen Neustart.
Wie sieht es bei einem Firmwareupdate aus, falls mein bereits verwendetes Character Device plötzlich verwendet wird? Ist dann nur mein Inhalt futsch und ich suche mir eine neue Subnode und richte meinen Progrmmteil neu ein oder könnte das auch die Fritzbox zum Recoverfall werden lassen?

Alternativ werde ich wieder zur "alten" Lösung zurückgreifen und nur eine kleine Installationszeile in der debug.cfg ablegen und den Rest vom Server nachladen...

Ich schätze, das ich die Daten (LCR Updater Scripte) unterhalb von 60 Kbyte halten kann.

Vielen Dank (das Problem hat mir bislang wirklich Nerven gekostet :rolleyes:) und Grüße
Harald
 
Neinnein, die Daten dürfen weiterhin nur vermutlich 10-20 KB groß werden.
Du musst dir 131 KByte mit sämtlichen Konfigurationen und Daten wie
Anruflisten/Status teilen !
Nur du bist das Problem mit der Formatierung und dem Klammern los.

Haveaniceday
 
Ich verwende im danisahne mod die Minor 0x3c (hex) um die Konfiguration zu speichern. Der m*.* mod hatte da glaube ich 0x3b (und noch ein paar mehr). Die Minor 0x3d (hex) wäre denke ich eine gute Wahl. Damit das TFFS nicht zu voll ist, hab ich eine Grenze von standardmäßig 30KB unkomprimierte Daten gesetzt. Darüber hinaus weigert sich das Skript zum Speichern einfach die neuen Daten in den Flash zu schreiben. 60KB sind schon ein Ding, vor allem auf der Fritzbox SL ist das TFFS drastisch kleiner (nach meinen Informationen nur 32 KB, im Gegensatz zu 128 KB auf der Fon WLAN 7050). Bedenke immer, dass auch noch andere Mods auf der Fritzbox sein können.

Den aktuellen Füllstand kannst du dir mit
Code:
echo 'cleanup' > /proc/tffs
cat /proc/tffs | grep fill
ausgeben lassen.

Mfg,
danisahne
 
hallo,

das device mtd3 und mtd4 hat jeweils nur 128kByte!

hier die memory map einer 7050 mit 4MByte speicher:
Code:
dev          adresse          size(hex)  size kb   funktion 
mtd2: 0x90000000-0x9000ffff   00010000       64    adam2 bootloader
mtd1: 0x90010000-0x900bffff   000b0000      704    kernel
mtd0: 0x900C0000-0x903bffff   00300000     3072    root filesystem
mtd3: 0x903C0000-0x903dffff   00020000      128    konfiguration 1
mtd4: 0x903E0000-0x903fffff   00020000      128    konfiguration 2
 
Kostenlos!

Statistik des Forums

Themen
248,887
Beiträge
2,303,981
Mitglieder
378,566
Neuestes Mitglied
draco777