4

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

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

4

2 回答 2

2

根据我目前在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 索引,你仍然可以重新构建它,尽管需要一个特殊的用户空间工具来做到这一点(虽然这个实用程序目前还没有实现)

虽然理论上可能,但你是靠自己的。

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

编辑:正如我所想,Linux 的 MTD 驱动程序已经将 ECC(纠错码)应用于 MTD 设备。

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

我们得到的“位翻转”警告并不意味着还存在数据丢失。您可以写信来/sys/class/mtd/mtd*/bitflip_threshold控制收到的警告数量。

于 2017-09-05T00:42:04.333 回答
0

您可以只读取所有文件,这实际上会导致 ubifs 检查它们。参照。邮件列表中给出的建议。如果可能,ubifs 实现将恢复。但是,不能保证这将捕获所有损坏。

理论上,ubifs 不应该被损坏,但实际上 ubifs 或 NAND 驱动程序中的错误仍然会导致损坏。

于 2016-07-05T16:45:53.087 回答