uifs没有FSCK程序,那么在使用uifs时如何检查文件系统的完整性呢?
我的目标系统是ARM, Linux 3.2.58
从目前为止我在uifs的网页上发现的内容:
完整性 - uifs(以及UBI)对写入的所有内容进行校验和flash介质保证数据完整性,不留下数据或元数据损坏未被注意到(JFFS2也在做同样的事情);通过默认情况下,uifs在读取媒体时只检查元数据CRC,而不是数据CRC;但是,您可以强制对数据进行CRC检查使用其中一个uifs挂载选项—参见这里。
如果您需要检查文件系统是否损坏
如果您的UBIFS
文件系统是用chk_data_crc
选项挂载的,那么简单的cat $FILES > /dev/null
应该就足够了。如果没有,则只能检测和恢复元数据损坏。文件体的损坏不会被发现。
我用的是find / -type f -print -exec cat {} + > /dev/null
如果您需要恢复损坏的文件
还是来自概述部分:
更清楚,想象您已经删除了FAT表您的FAT文件系统;对于FAT FS来说,这将是致命的;但是如果你类似地抹去uifs索引,你仍然可以重建它,虽然这需要一个特殊的用户空间工具来完成实用程序目前还没有实现,但是)
虽然理论上可行,但你得靠自己。
备份flash内容,用uifs数据结构(可能是源代码)和十六进制编辑器武装自己,祝你好运。
edit:正如我所知,Linux的MTD驱动程序已经将ECC(错误纠正码)应用于MTD设备。
我相信,如果每个/sys/class/mtd/mtd*/ecc_step_size
闪存块有超过/sys/class/mtd/mtd*/ecc_strength
个错误,则数据丢失的标准。在这种情况下,mtd_read()
(它是一个比uifs低一级的MTD API)将返回EUCLEAN
。不知道是否有工具可以使用它来检查错误。
我们得到的"位翻转"警告并不意味着有数据丢失。您可以写入/sys/class/mtd/mtd*/bitflip_threshold
来控制您获得的警告数量。
您可以读取所有文件,这实际上会导致uifs检查它们。病死率。邮件列表上给出的建议。如果可能的话,uifs实现将恢复。但是,不能保证这将捕获所有的损坏。
理论上,uifs应该永远不会被损坏,但在实践中,uifs或NAND驱动程序中的错误仍然可能导致损坏。