最近,我们在运行嵌入式 Linux 系统的 ext3 格式的闪存卡上遇到了问题(坏块)。启动时,启动了根文件系统检查,但由于花费的时间比平时长得多,因此它似乎挂起了。后来,我将卡插入另一台 PC,检测到了坏块。我现在想知道,如果我等待的时间足够长,初始根文件系统检查是否也会发现并修复这些块。为了找到答案,我查看了 tune2fs 和 e2fsck 手册页,但找不到我的问题的答案:
我可以影响这些自动根文件系统检查所执行的检查/修复吗?如果可以,我该如何配置它?
如果无法配置:究竟检查或修复什么,默认设置是什么,自动检查使用哪些标志?
答案1
如果初始根文件系统检查发现并修复了这些块
如果文件系统未启用日志功能且系统崩溃,操作系统只会在 ext3 中触发自动、完整的 fsck或者已达到重新安装限制。如果您尝试写入或读取坏块,它将检测到坏块 - 但这不会触发自动 fsck - 它将以只读方式重新安装磁盘或引发内核恐慌,具体取决于它的配置方式。
假设它是为日志记录而设置的,那么在安装时进行的测试仅检查哪些日志操作可能必须前滚。
我检查了 tune2fs
您看到 -i、-C 和 -c 标志的作用了吗?(请注意,这些标志只会在未来的重新启动时触发 fsck - 无法在正在运行的系统上安排根 fsck)。
CF 技术已经过时了,而且与其他格式相比价格相对昂贵——这不禁让人想问,这种卡有多老了,是否值得尝试挽救它。虽然这种设备完全可以运行操作系统,但它们并不是真正为此而设计的——SATA 连接的 NAND 闪存驱动器正变得越来越普遍,但它们比 SD 卡等更贵的原因是,它们包含许多用于管理存储和处理坏块的智能功能。
不幸的是,没有文件系统能够管理通过 IDE/SCSI/USB 连接的基本、写入受限的存储设备(JFFS2 利用对底层存储的直接访问 - 即插入 PCIe 总线的设备)。
期望 CF 设备像普通磁盘一样运行当然是一个非常糟糕的想法 - 看看 puppy - 它通过覆盖做了一些非常聪明的事情来减少对磁盘的写入量,尽管可以在所有文件系统上进行大量调整以减少写入频率 - 看看对笔记本电脑上的 Linux 进行调整以减少 I/O 的建议。