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 和设置结果记录历史的大小。
如果要了解在修复之前 <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.
如果您确定要修复此 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,已修复/检查的详细错误将打印在内核日志中。