Angesteckt von der Frage (und weil ich mich ohnehin im Moment auf nichts wichtiges konzentrieren kann), habe ich dann doch mal in die Recovery-Version für die 7490 geschaut.
Nach Download und Auspacken des ".data"-Segments (mit 7z unter Linux) ergibt sich folgendes Bild für den Inhalt (am Beginn):
Code:
00000000 31 38 35 00 00 00 00 00 00 20 44 00 00 00 00 00 |185...... D.....|
00000010 64 65 00 00 00 00 00 00 10 20 44 00 00 00 00 00 |de....... D.....|
00000020 61 76 6d 20 31 75 6e 64 31 00 00 00 00 00 00 00 |avm 1und1.......|
00000030 20 20 44 00 00 00 00 00 61 76 6d 00 00 00 00 00 | D.....avm.....|
00000040 38 20 44 00 00 00 00 00 04 [COLOR="#FF0000"]73 71 73 68[/COLOR] 81 [COLOR="#008000"]fc 04[/COLOR] |8 D......sqsh...|
00000050 00 01 [COLOR="#FF0000"]d8[/COLOR] 00 03 02 [COLOR="#FF0000"]b4 56[/COLOR] 00 06 05 [COLOR="#FF0000"]7e 07[/COLOR] 00 00 09 |.......V...~....|
00000060 00 03 01 01 00 0b 09 e8 1c 00 00 e8 1c 00 00 48 |...............H|
00000070 00 07 0b a2 53 97 57 00 00 14 00 53 ef 01 00 05 |....S.W....S....|
00000080 04 a2 53 97 57 81 bc 03 00 01 03 00 03 01 04 00 |..S.W...........|
00000090 03 01 05 00 05 03 05 00 01 00 0f 11 eb 1c 00 00 |................|
000000a0 ec 1c 00 00 ed 1c 00 00 7e 07 02 00 08 00 0f 0a |........~.......|
000000b0 d3 39 00 00 d4 39 00 00 d5 39 00 04 03 02 00 02 |.9...9...9......|
000000c0 81 af 03 00 81 08 04 ff 01 07 81 f7 03 ff 00 80 |................|
000000d0 02 ed 41 00 03 0f 04 00 00 a2 53 97 57 a2 53 97 |..A.......S.W.S.|
000000e0 57 a2 53 97 57 00 06 03 0b 00 02 00 0b 01 0e 81 |W.S.W...........|
000000f0 57 04 00 05 ff a1 00 00 0e 00 03 0c a2 53 97 57 |W............S.W|
00000100 a2 53 97 57 a2 53 97 57 00 06 01 01 00 0d 0e 2e |.S.W.S.W........|
00000110 2e 2f 62 69 6e 2f 62 75 73 79 62 6f 78 00 4a 05 |./bin/busybox.J.|
00000120 ff a1 00 00 0e 00 03 0c a2 53 97 57 a2 53 97 57 |.........S.W.S.W|
00000130 a2 53 97 57 00 06 01 01 00 0d 0e 2e 2e 2f 62 69 |.S.W........./bi|
00000140 6e 2f 62 75 73 79 62 6f 78 00 4a 05 ff a1 00 00 |n/busybox.J.....|
00000150 0e 00 03 0c a2 53 97 57 a2 53 97 57 a2 53 97 57 |.....S.W.S.W.S.W|
00000160 00 06 01 01 00 0d 0e 2e 2e 2f 62 69 6e 2f 62 75 |........./bin/bu|
00000170 73 79 62 6f 78 00 4a 05 ff a1 00 00 0e 00 03 0c |sybox.J.........|
00000180 a2 53 97 57 a2 53 97 57 a2 53 97 57 00 06 01 01 |.S.W.S.W.S.W....|
00000190 00 0d 0e 2e 2e 2f 62 69 6e 2f 62 75 73 79 62 6f |...../bin/busybo|
000001a0 78 00 4a 05 ff a1 00 00 04 00 03 0c a2 53 97 57 |x.J..........S.W|
000001b0 a2 53 97 57 a2 53 97 57 00 06 01 01 00 0d 04 64 |.S.W.S.W.......d|
000001c0 73 6c 64 00 54 05 ff a1 00 00 0e 00 03 0c a2 53 |sld.T..........S|
000001d0 97 57 a2 53 97 57 a2 53 97 57 00 06 01 01 00 0d |.W.S.W.S.W......|
000001e0 0e 2e 2e 2f 62 69 6e 2f 62 75 73 79 62 6f 78 00 |.../bin/busybox.|
000001f0 4a 05 ff a1 00 00 12 00 03 0c a2 53 97 57 a2 53 |J..........S.W.S|
00000200 97 57 a2 53 97 57 00 06 01 01 00 0d 12 2f 2e 2f |.W.S.W......././|
00000210 73 62 69 6e 2f 73 68 6f 77 72 6f 75 74 65 73 00 |sbin/showroutes.|
00000220 46 05 ff a1 00 00 0e 00 03 0c a2 53 97 57 a2 53 |F..........S.W.S|
00000230 97 57 a2 53 97 57 00 06 01 01 00 0d 0e 2e 2e 2f |.W.S.W........./|
Das sieht schon ab Offset 0x48 wie das richtige "filesystem.image" aus, aber offenbar noch irgendwie komprimiert. Vergleicht man das mal mit einem Dump der "filesystem.image":
Code:
00000000 [COLOR="#FF0000"]73 71 73 68[/COLOR] 00 00 00 00 00 00 00 00 00 00 00 00 |sqsh............|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000500 [COLOR="#FF0000"]d8[/COLOR] 00 00 00 [COLOR="#FF0000"]b4 56[/COLOR] 00 00 00 00 00 00 [COLOR="#FF0000"]7e 07[/COLOR] 00 00 |.....V......~...|
00000510 09 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
00000520 e8 1c 00 00 e8 1c 00 00 48 00 00 00 00 00 00 00 |........H.......|
00000530 77 ab 7b 57 00 00 14 00 53 ef 01 00 00 00 00 00 |w.{W....S.......|
00000540 77 ab 7b 57 00 00 00 00 00 00 00 00 00 00 00 00 |w.{W............|
00000550 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000900 03 00 00 00 04 00 00 00 05 00 00 00 00 00 05 00 |................|
00000910 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000920 eb 1c 00 00 ec 1c 00 00 ed 1c 00 00 7e 07 02 00 |............~...|
00000930 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000940 d3 39 00 00 d4 39 00 00 d5 39 00 00 00 00 02 00 |.9...9...9......|
00000950 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000d00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00001100 ff ff ff ff ff ff ff ff 07 ff ff ff ff ff ff ff |................|
00001110 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00001500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001580 ed 41 00 00 00 04 00 00 77 ab 7b 57 77 ab 7b 57 |.A......w.{Ww.{W|
00001590 77 ab 7b 57 00 00 00 00 00 00 0b 00 02 00 00 00 |w.{W............|
000015a0 00 00 00 00 00 00 00 00 0e 00 00 00 00 00 00 00 |................|
000015b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001a00 ff a1 00 00 0e 00 00 00 77 ab 7b 57 77 ab 7b 57 |........w.{Ww.{W|
00001a10 77 ab 7b 57 00 00 00 00 00 00 01 00 00 00 00 00 |w.{W............|
00001a20 00 00 00 00 00 00 00 00 2e 2e 2f 62 69 6e 2f 62 |........../bin/b|
00001a30 75 73 79 62 6f 78 00 00 00 00 00 00 00 00 00 00 |usybox..........|
00001a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001a80 ff a1 00 00 0e 00 00 00 77 ab 7b 57 77 ab 7b 57 |........w.{Ww.{W|
00001a90 77 ab 7b 57 00 00 00 00 00 00 01 00 00 00 00 00 |w.{W............|
00001aa0 00 00 00 00 00 00 00 00 2e 2e 2f 62 69 6e 2f 62 |........../bin/b|
00001ab0 75 73 79 62 6f 78 00 00 00 00 00 00 00 00 00 00 |usybox..........|
00001ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001b00 ff a1 00 00 0e 00 00 00 77 ab 7b 57 77 ab 7b 57 |........w.{Ww.{W|
00001b10 77 ab 7b 57 00 00 00 00 00 00 01 00 00 00 00 00 |w.{W............|
00001b20 00 00 00 00 00 00 00 00 2e 2e 2f 62 69 6e 2f 62 |........../bin/b|
00001b30 75 73 79 62 6f 78 00 00 00 00 00 00 00 00 00 00 |usybox..........|
00001b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001b80 ff a1 00 00 0e 00 00 00 77 ab 7b 57 77 ab 7b 57 |........w.{Ww.{W|
00001b90 77 ab 7b 57 00 00 00 00 00 00 01 00 00 00 00 00 |w.{W............|
00001ba0 00 00 00 00 00 00 00 00 2e 2e 2f 62 69 6e 2f 62 |........../bin/b|
00001bb0 75 73 79 62 6f 78 00 00 00 00 00 00 00 00 00 00 |usybox..........|
00001bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001c00 ff a1 00 00 04 00 00 00 77 ab 7b 57 77 ab 7b 57 |........w.{Ww.{W|
00001c10 77 ab 7b 57 00 00 00 00 00 00 01 00 00 00 00 00 |w.{W............|
00001c20 00 00 00 00 00 00 00 00 64 73 6c 64 00 00 00 00 |........dsld....|
00001c30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001c80 ff a1 00 00 0e 00 00 00 77 ab 7b 57 77 ab 7b 57 |........w.{Ww.{W|
00001c90 77 ab 7b 57 00 00 00 00 00 00 01 00 00 00 00 00 |w.{W............|
00001ca0 00 00 00 00 00 00 00 00 2e 2e 2f 62 69 6e 2f 62 |........../bin/b|
00001cb0 75 73 79 62 6f 78 00 00 00 00 00 00 00 00 00 00 |usybox..........|
00001cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001d00 ff a1 00 00 12 00 00 00 77 ab 7b 57 77 ab 7b 57 |........w.{Ww.{W|
00001d10 77 ab 7b 57 00 00 00 00 00 00 01 00 00 00 00 00 |w.{W............|
00001d20 00 00 00 00 00 00 00 00 2f 2e 2f 73 62 69 6e 2f |.......././sbin/|
00001d30 73 68 6f 77 72 6f 75 74 65 73 00 00 00 00 00 00 |showroutes......|
00001d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
fällt ja schon auf, daß die von 00 verschiedenen Bytes aus der "filesystem.image" (ich habe mal die ersten Vorkommen farblich hervorgehoben) auch in der Datensektion vorhanden sind, aber eben ohne die "Platzverschwendung", die in der ext2-Dateisystemstruktur gang und gäbe ist. Bei der grünen "fc 04"-Folge dürfte es sich um die Anzahl der 00-Bytes zwischen den beiden anderen Folgen handeln (4 Byte "sqsh" + 0x4fc Byte Nullen == 0x500 als Start des nächsten Wertes).
Nun wird sicherlich der wirklich wichtige und platzraubende Inhalt der Partition (das wäre ja die filesystem_core.squashfs) nicht so richtig gut zu komprimieren sein und damit würde wohl ein "richtiger" zusätzlicher Packer an der Stelle eher mehr als weniger Daten produzieren, wenn der noch Prüfsummen zu irgendwelchen Blöcken hinzufügt o.ä. - also wird das vermutlich irgendeine sehr simple Kompression (vielleicht ganz einfaches RLE-Encoding?) sein, die da verwendet wird.
Mal schauen, welcher Algorithmus da paßt ... vermutlich findet man sonst das Ende des Dateisystems nicht wirklich und der Kernel kommt ja wohl erst danach. Auf Anhieb hätte ich gesagt, daß der in der ".data" bei Offset 0x13d3fa0 startet, da findet sich zumindest die "Erkennung" des Kernels (81 12 ed fe + die LZMA-"Flags" 12 Byte weiter). Da der Kernel eigentlich selbst wieder komprimiert ist, macht für den auch eine zusätzliche Kompression keinen wirklichen Sinn.
Das würde dann doch eine recht erhebliche Einsparung durch die Kompression ergeben, denn die "natürliche Länge" der "filesystem.image" wären 0x15AD100 Byte und in der ".data" blieben davon nur noch 0x13CE719 - 0x48 Byte übrig (also eine Einsparung von 0x15AD100 - 0x13CE719 - 0x48 = 1960351 Byte), denn am Offset 0x13CE711 findet sich dann die Byte-Folge (b0 80 6a b7 de 1c 2a 74), mit der die "filesystem.image" endet (die sollte ja keine Checksumme am Ende haben und die Nullen sind sicherlich auch ziemlich umsonst (müßte man mal bei Recovery mitschneiden) - zumindest sollten die auch nicht "auftragen" bei der komprimierten Größe.
EDIT:
Ich würde das tatsächlich für irgendeine Abart einer RLE-Codierung halten ... finde jetzt aber keine Library, die so etwas enthalten würde - zumindest nicht in dieser Form.
Wenn ich das richtig sehe, wird immer genau 1 Byte gelesen und dessen Inhalt entscheidet dann erst einmal, was danach kommt.
Ist das direkt eine 0, macht das als Längenangabe ja keinen Sinn und so kommt danach dann ein einzelnes Byte mit der Anzahl der Nullen, die in die Ausgabe zu übernehmen sind ... damit wird diese Art der Kodierung von Nullen natürlich auf max. 255 sequentiell begrenzt.
Ist das gelesende Byte < 128, gibt es die Anzahl der Zeichen an, die im Anschluß 1:1 in die Ausgabe zu übernehmen sind.
Ist es größer als 129, gibt die Differenz zur 128 an, wie oft das nachfolgende Zeichen zu wiederholen ist.
Ist es 129, gibt das folgende 16-Bit-Feld an, wie oft das darauf folgende Zeichen zu wiederholen ist. Da wäre dann "81 fc 04 00" die Angabe für 1276 aufeinanderfolgende Nullen ... eine Angabe von "1" als Anzahl der Wiederholungen direkt macht ja auch wenig Sinn (braucht ja mehr statt weniger Platz).
Wofür eine 128 direkt steht, habe ich noch nicht herausgefunden.
Mit diesem Algorithmus müßte man sich jetzt erst einmal an die Decodierung der ersten Blöcke machen, damit man weitere - bisher nicht berücksichtigte - Kombinationen findet. Vielleicht kennt ja auch jemand einen Quellcode, der eine solche Komprimierung implementiert? Davon bräuchte man dann den Decoder. Irgendwo weiter hinten müßte es noch andere Kombinationen geben, denn im SquashFS-Image gibt es garantiert fast keine Stellen, die sich irgendwie wiederholen und wo so eine RLE dann Sinn machen würde.
EDIT2: Das klappt auch erst einmal einigermaßen ... wobei dann irgendwo mittendrin noch ein Problem existieren muß, denn ein fsck für das entstehende Image (ab Offset 256) bringt noch einiges an Fehlern zutage.