OCFS2 文件系统 - 在线文件检查¶
本文档将描述 OCFS2 在线文件检查功能。
简介¶
OCFS2 常用于高可用性系统。但是,当遇到错误时,OCFS2 通常会将文件系统转换为只读。这可能不是必要的,因为将文件系统转换为只读也会影响其他正在运行的进程,从而降低可用性。然后,引入了一个挂载选项(errors=continue),它会向调用进程返回 -EIO 错误码,并终止进一步的处理,以防止文件系统进一步损坏。文件系统不会转换为只读,并且问题文件的 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,已修复/检查的详细错误将打印在内核日志中。