Squashfs の破損したデータ

Squashfs の破損したデータ

埋め込みデバイス用の小さな rootfs ディレクトリから squashfs を作成しました:

mksquashfs rootfs_image rootfs.squashfs -b 1024k -comp xz -Xbcj x86

この squashfs をデバイスの NOR フラッシュにコピーし、この NOR を rootfs として使用するようにブートローダー (U-boot) とカーネルを設定することに成功しました。

ただし、一部のファイルは適切 (つまり、cat できる) ですが、そうでないファイルもあります。

具体的な例で見てみましょう。

# 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
#

ここでの問題は何ですか、どうすれば解決できますか? squashfs が破損しているかどうかを確認する簡単な方法はありますか?

squashfs ファイルは破損しておらず、ホスト マシン上で問題なく unsquashfs できることに注意してください。

答え1

xz 圧縮を使用しないことでこの問題を解決しました。

mksquashfs rootfs_image rootfs.squashfs -b 1024k

この方法では、squashfs は gzip によって圧縮されたままですが、これは私のデバイスにはより適しているようです。

関連情報