Ich habe ein Squashfs aus einem kleinen Rootfs-Verzeichnis für eingebettete Geräte erstellt:
mksquashfs rootfs_image rootfs.squashfs -b 1024k -comp xz -Xbcj x86
Ich habe dieses Squashfs erfolgreich in den NOR-Flash des Geräts kopiert und den Bootloader (U-Boot) und den Kernel so eingerichtet, dass dieses NOR als Rootfs verwendet wird.
Einige Dateien sind jedoch gut (d. h. ich kann sie caten), andere jedoch nicht!
Sehen wir uns dies anhand konkreter Beispiele an:
# cat /var/www/hello.html
# hi, hello
# head /lib/modules/3.10.14/rtl8189es.ko
[ 21.940062] SQUASHFS error: xz_dec_run error, data probably corrupt
[ 21.946652] SQUASHFS error: squashfs_read_data failed to read block 0x1b9f76
[ 21.953963] SQUASHFS error: Unable to read fragment cache entry [1b9f76]
[ 21.960960] SQUASHFS error: Unable to read page, block 1b9f76, size 3c9d8
... (last 2 lines are repeated for a while
head: rtl8189es.ko: Input/output error
#
Was ist hier das Problem und wie kann ich es lösen? Gibt es eine einfache Möglichkeit, ein Squashfs auf Beschädigungen zu überprüfen?
Bitte beachten Sie, dass die SquashFS-Datei nicht beschädigt ist, da ein UnsquashFS-Vorgang auf dem Hostcomputer problemlos durchgeführt werden kann.
Antwort1
Ich habe das Problem gelöst, indem ich die xz-Komprimierung nicht verwendet habe:
mksquashfs rootfs_image rootfs.squashfs -b 1024k
Auf diese Weise wird das Squashfs immer noch komprimiert, jedoch mit gzip, was für mein Gerät geeigneter erscheint.