文件系统不一致问题及解决方案

197 阅读2分钟

如果没有文件系统,那么我们想要写入数据请求时,需要声明把多大的数据写入多少地址上。并且写入后还需要记数据保存的地址、大小以及这份数据的用处。如果数据多了还需要管理可用区域。但我们因为有了文件系统,文件系统替我们管理保存数据和可用区域。

文件系统不一致问题

但是在断电等异常情况下,文件系统中可能出现不一致问题。

什么时候发生

什么时候会发生文件系统不一致,如移动目录。移动目录流程为:

  1. 初始状态

  2. 建立新目录和文件的链接

  3. 删除旧目录和文件的链接

    如果在这里切断电源,重启后会有两个地方链接同一个文件->文件系统就会变成不一致状态。

  4. 完成数据变更处理

什么时候发现

什么时候检测出数据不一致,可能发生在:

  1. 如果挂载时检测出不一致

    导致文件系统无法被挂载。

  2. 如果访问过程中检测到不一致

    以只读模式重新挂载该文件系统。

防止系统不一致

可以采用日志或者写时复制,防止系统不一致情况出现。

日志

ext4与XFS文件系统采用的是日志方式。日志方式存在日志区域记录要更新的操作,基于日志区域中的内容,进行文件系统的更新。

如果更新日志记录时如强制断电了,那么丢弃日志。如果通过日志执行数据更新时,只需要按照日志从头执行。

写时复制

Btfs采用写时复制。采用写时复制时,文件更新,会写入别的位置。当非写时复制时,文件更新,系统位置不改变。 写时复制流程:

  1. 初始状态

  2. 文件更新,创建新的文件如A1

  3. 替换旧链接改为新链接

    如果这里发生问题,只需要删除新的文件A1后恢复到了执行更新前的一致状态。

  4. 丢弃旧的文件完成处理

如果出现系统不一致

如果已经出现了系统不一致问题,可以通过定期备份和恢复指令fsck。但恢复指令执行非常慢并且概率会将问题文件直接删除。因此通常建议定期进行备份,避免出现系统不一致。