Eu criei um squashfs a partir de um pequeno diretório rootfs para dispositivos incorporados:
mksquashfs rootfs_image rootfs.squashfs -b 1024k -comp xz -Xbcj x86
Copiei com sucesso este squashfs para o flash NOR do dispositivo e configurei o bootloader (U-boot) e o kernel para usar este NOR como rootfs.
No entanto, alguns arquivos são bons (ou seja, posso catá-los), mas outros não!
Vamos ver isso em exemplos concretos:
# 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
#
Qual é o problema aqui e como posso resolvê-lo? Existe alguma maneira fácil de verificar se um squashfs está corrompido?
Observe que o arquivo squashfs não está corrompido, pois pode ser removido do squashfs na máquina host sem problemas.
Responder1
Resolvi isso não usando a compactação xz:
mksquashfs rootfs_image rootfs.squashfs -b 1024k
Desta forma o squashfs ainda está compactado mas pelo gzip o que me parece mais apropriado para o meu aparelho.