/dev/mtdblockNにjffs2のイメージファイルのマウントに失敗した理由

目的

組み込みのLinux開発で,コンソールに今まで見かけなかった以下のエラー

Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes
empty_blocks 0, bad_blocks 0, c->nr_blocks 6
mount: mounting /dev/mtdblock8 on /foobar failed

を見かけた.これが発生すると,/foobarディレクトリーに何もマウントされない現象が発生する.今まで見かけたことがなく,ちょっとした変更でルートファイルシステムを変えたことによりjffs2のイメージファイルを作り直しただけで"ちょい変"になってしまった始末であり,その原因を調査および解決したので記録に残しておく.

結論

仮想マシン環境でビルド中のjffs2のイメージを,ビルド完了前にWindowsホストにコピーしてしまっていたことにより,jffsのイメージが欠損してしまっていた.
ファイルシステムとして,一定区間ごとにヘッダーのようなものがあるものと考えられる.

バイナリーデータの欠損(左:異常ファイル,右:正常ファイル)

ただし,ビルドが正常なものと異常なものとで,ファイルサイズに違いはない:

ファイルサイズの比較(左:異常ファイル,右:正常ファイル)

また,上記エラーの周辺には以下のようなエラーメッセージがあり,いずれにしてもファイルシステム異常と推測される:

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x007a0070: 0xffff instead
Further such events for this erase block will not be printed
Empty flash at 0x007a007c ends at 0x007a00a0

改訂履歴

# 日付 内容
1 2024/11/04 結論を(ようやく)記載