我正在使用从 JFFS2 分区引导的 Linux (3.4.31+) 嵌入式系统。在删除其他文件时发生断电时,我经常遇到文件损坏的问题。它发生在平台的升级过程中。这些是升级的简化步骤:
- 下载包含(以及其他文件)我要升级到的文件系统的 rootfs.squashfs 映像的 tar.gz,验证映像的 md5 校验和。
- 从一个小型 JFFS2 分区引导 linux,该分区具有执行升级所需的最少工具集。
- 挂载必须升级的大分区。
- 挂载存储在大分区中的 rootfs.squashfs。
- 从大分区中删除所有文件,除了一些迁移的数据文件、rootfs.squashfs 映像等。
- 将挂载的 rootfs.squashfs 中的所有文件复制到大分区
- 从大分区启动
提到的功率损失发生在 5. 步骤中。请注意,rootfs.squashfs 以只读方式安装,并且在升级期间永远不会更改。即使这个文件被损坏并且在设备开机后你可以看到文件的 md5 校验和不同,大小保持不变,图像可以挂载但无法从这个图像中读取一些文件。
为什么这个文件被破坏了?JFFS2 不应该处理这种情况吗?有没有办法从这种情况中恢复过来?