OCFS2 文件系统 - 在线文件检查

本文档将介绍 OCFS2 在线文件检查功能。

介绍

OCFS2 常用于高可用性系统。 但是,OCFS2 通常会在遇到错误时将文件系统转换为只读。 这可能没有必要,因为将文件系统转换为只读也会影响其他正在运行的进程,从而降低可用性。 然后,引入一个挂载选项 (errors=continue),它会将 -EIO errno 返回给调用进程并终止进一步的处理,以避免文件系统进一步损坏。 文件系统不会转换为只读,并且有问题的文件的 inode 编号会在内核日志中报告。 用户可以尝试通过在线文件检查功能来检查/修复此文件。

范围

这项工作的目的是检查/修复可能阻碍集群文件系统日常运行的小问题,这些问题通常会将文件系统转换为只读。 检查/修复的范围在文件级别,最初是针对常规文件,最终扩展到文件系统的所有文件(包括系统文件)。

如果目录到文件的链接不正确,则目录 inode 将报告为错误。

此功能不适用于需要依赖文件系统其他组件的额外检查,例如但不限于,检查分配中文件块的位是否已设置。 如果发生此类错误,则应/将建议使用离线 fsck。

最后,不应自动执行此类操作/功能,以免文件系统最终受到比修复尝试之前更大的损坏。 因此,这必须通过用户交互和同意来执行。

用户界面

当 OCFS2 文件系统中存在错误时,通常会附带导致错误的 inode 编号。 此 inode 编号将是检查/修复文件的输入。

每个 OCFS2 文件系统挂载都有一个 sysfs 目录

/sys/fs/ocfs2/<devname>/filecheck

在这里,<devname> 指示已挂载的 OCFS2 卷设备的名称。 上面的文件将接受 inode 编号。 这可用于与内核空间通信,告知将要检查或修复哪个文件(inode 编号)。 目前,支持三种操作,包括检查 inode、修复 inode 和设置结果记录历史的大小。

  1. 如果要了解在修复之前 <inode> 到底发生了什么错误,请执行

    # echo "<inode>" > /sys/fs/ocfs2/<devname>/filecheck/check
    # cat /sys/fs/ocfs2/<devname>/filecheck/check
    

输出如下所示

INO         DONE    ERROR
39502               1       GENERATION

<INO> lists the inode numbers.
<DONE> indicates whether the operation has been finished.
<ERROR> says what kind of errors was found. For the detailed error numbers,
please refer to the file linux/fs/ocfs2/filecheck.h.
  1. 如果您确定要修复此 inode,请执行

    # echo "<inode>" > /sys/fs/ocfs2/<devname>/filecheck/fix
    # cat /sys/fs/ocfs2/<devname>/filecheck/fix
    

输出如下所示:

INO         DONE    ERROR
39502               1       SUCCESS

这一次,<ERROR> 列指示此修复是否成功。

3. 记录缓存用于存储检查/修复结果的历史记录。 它的默认大小为 10,可以在 10 ~ 100 的范围内调整。您可以像这样调整大小

# echo "<size>" > /sys/fs/ocfs2/<devname>/filecheck/set

修复内容

在收到 inode 后,文件系统将读取 inode 和文件元数据。 如果出现错误,文件系统将修复这些错误并在内核日志中报告它修复的问题。 作为一项预防措施,必须先检查 inode 是否有错误,然后才能执行最终修复。

inode 和结果历史记录将临时保存在一个小型的链表缓冲区中,该缓冲区将包含最后 (N) 个已修复/检查的 inode,已修复/检查的详细错误将打印在内核日志中。