如果我将 USB 记忆棒(FAT 格式)插入 Windows PC,然后拔出它而不“弹出”它,然后再次将其插入,Windows 对此没有问题,不会给出任何有关它“可能有问题”的警告。
但是,如果我对 Linux(例如 Ubuntu 15.04)执行相同的操作,那么在第二次插入后,我会在日志中收到警告消息,如下所示:
FAT-fs (sdf1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
如果我随后将其放入 Windows PC 中,则会弹出一条消息,提示我检查它是否有错误。
为什么 Linux 对 FAT“脏”标志的处理如此简单?我本来认为最好只设置“脏”标志,如果它确实可能是“脏”的——例如:
- 写入文件时设置“脏”标志。
- 在以下情况下清除“脏”标志:
- 所有写入的文件都已关闭,和/或
- 写缓存被写出到磁盘,
- 当然,当磁盘被卸载时。
如果至少有一些安装选项可以在该模式下运行,以减少用户仅因插入和拔出可移动设备而收到“脏”标志错误警报的机会,即使实际上没有写入任何内容,那就太好了。
答案1
我的 C 很粗糙,但看起来像读取超级块时设置胖脏位(这犯罪解释了为什么它是这样实施的)。
Windows 可能会选择在 FS 中发生某些更改之前不设置该位,而 linux 会在挂载时采取更偏执的方法来设置它。
对我来说,这种方式似乎更有效,在挂载后假设脏并在干净卸载时取消设置,否则内核将必须跟踪卷的脏/干净状态并检查是否需要在每次写入时设置它。
正如您在代码和提交注释中所看到的;您可以安装 RO,并且位不会改变。