ubifs没有fsck程序,那么在使用ubifs时如何检查文件系统的完整性?
我的目标系统是ARM,Linux 3.2.58。
答案 0 :(得分:1)
从我迄今为止在UBIFS' web page上发现的内容:
完整性 - UBIFS(以及UBI)校验和写入的所有内容 闪存介质保证数据完整性,UBIFS不会留下数据 或者没有注意到元数据损坏(JFFS2正在做同样的事情);通过 默认情况下,UBIFS在从媒体读取时仅检查元数据CRC, 但不是数据CRC;但是,您可以强制CRC检查数据 使用其中一个UBIFS挂载选项 - 请参阅here。
如果您的UBIFS
文件系统使用chk_data_crc
选项挂载,则简单cat $FILES > /dev/null
就足够了。如果没有,您只能检测并恢复元数据损坏。文件正文的损坏将被忽视。
我使用find / -type f -print -exec cat {} + > /dev/null
再次来自overview部分:
使其更清晰,成像你已经消灭了FAT表 你的FAT文件系统;对于FAT FS来说,这将是致命的;但如果你 同样消灭UBIFS索引,你仍然可以重新构建它, 虽然需要一个特殊的用户空间工具来做这个(这个 但是,实用程序目前尚未实现)
虽然理论上可行,但你是独立的。
备份Flash内容,用UBIFS数据结构(可能是源代码)和十六进制编辑器武装自己,祝你好运。
编辑:正如我所知,Linux的MTD驱动程序已经将ECC(纠错码)应用于MTD设备。
我相信,如果每个/sys/class/mtd/mtd*/ecc_strength
闪存块有超过/sys/class/mtd/mtd*/ecc_step_size
个错误,则会导致数据丢失的标准。在这种情况下,mtd_read()
(在UBIFS下面是一个级别的MTD API)will return EUCLEAN
。不知道是否存在使用它来检查错误的工具。
The "bit flipped" warnings we get do not mean that there was a data loss yet。您可以写信至/sys/class/mtd/mtd*/bitflip_threshold
来控制您收到的警告数量。
答案 1 :(得分:0)
您可以只读取所有文件,这实际上会导致ubif检查它们。 (CFR)。 the advise given on the mailing list。如果可能的话,ubifs实现将恢复。但是,无法保证这将捕获所有损坏。
理论上,ubif应该永远不会被破坏,但实际上ubif或NAND驱动程序中的错误仍然会导致损坏。