如何检查一个ubifs文件系统?

ubifs没有fsck程序,那么在使用ubifs时如何检查文件系统的完整性呢?

我的目标系统是ARM,Linux 3.2.58。

从我在UBIFS的网页上发现的至今:

完整性 – UBIFS(以及UBI)校验和写入闪存介质的所有内容以保证数据的完整性,UBIFS不会忽略数据或元数据损坏(JFFS2也是如此)。 默认情况下,UBIFS只从元件读取元数据CRC,而不读取数据CRC; 但是,您可能会强制使用UBIFS挂载选项之一对数据进行CRC校验 – 请参阅此处 。

如果您需要检查文件系统是否损坏

如果你的UBIFS文件系统被挂载了chk_data_crc选项,那么简单的cat $FILES > /dev/null就足够了。 如果没有,您只能检测和恢复元数据损坏。 文件体的腐败将不被人注意。

我用find / -type f -print -exec cat {} + > /dev/null

如果你需要恢复损坏的文件

再次从概述部分:

为了更清楚一点,你已经擦除FAT文件系统上的FAT表; 对于FAT FS来说,这将是致命的; 但是如果你类似的擦除UBIFS索引,你仍然可以重新构建它,虽然一个特殊的用户空间工具将需要做到这一点(虽然这个实用程序目前尚未实现)

虽然理论上可行,但你自己。

备份Flash内容,使用UBIFS数据结构(可能是源代码)和十六进制编辑器武装自己,祝你好运。

编辑 :据我所知,Linux的MTD驱动程序已经应用ECC(纠错码)到MTD设备。

我相信,如果每个/sys/class/mtd/mtd*/ecc_step_size flash块有超过/sys/class/mtd/mtd*/ecc_strength错误的数据丢失的标准。 mtd_read() (这是比UBIFS低一级的MTD API)在这种情况下将返回EUCLEAN 。 不知道是否存在使用它来检查错误的工具。

我们得到的“翻转”警告并不意味着数据丢失 。 您可以写入/sys/class/mtd/mtd*/bitflip_threshold以控制您获得的警告数量。

你可以读取所有的文件,这实际上导致ubifs检查它们。 (CFR)。 在邮件列表上给出的建议 。 如果可能,ubifs的实现将会恢复。 但是,不能保证这将俘获所有腐败。

从理论上说,ubifs永远不会被破坏,但实际上在ubifs或NAND驱动程序中的错误仍然可能导致腐败。