Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.14. GFS2 收回功能

GFS2 收回功能是集群 GFS2 文件系统的数据完整功能。如果 GFS2 内核模块探测到 GFS2 文件系统中存在不一致性,并伴随 I/O 操作,则该文件系统对该集群来说就不可用。该 I/O 操作会停止,同时该系统会等待下一个出错的 I/O 操作,防止进一步的破坏。当出现这种情况时,您可以停止手动停止任意服务或者程序,然后重启并重新挂载 GFS2 文件系统以便重新执行日志操作。如果问题仍存在,您可以在集群的所有节点中卸载该文件系统并使用 fsck.gfs2 命令执行文件系统恢复。GFS2 收回功能没有内核 panic 那么严重,但可造成使用另一个节点 fence 这个节点。
如果您使用启用了启动脚本的 gfs2 配置您的系统,且在 /etc/fstab 文件中包含 GFS2 文件系统,则会在重启时重新挂载该 GFS2 文件系统。如果因为文件系统崩溃造成 GFS2 文件系统收回,则建议您在重新挂载该文件系统前运行 fsck.gfs2 命令。在这种情况下,要防止您的文件系统在引导时重新挂载,您可以执行以下步骤:
  1. 使用以下命令暂时在受影响的节点中禁用启动脚本:
    # chkconfig gfs2 off
  2. 重启受影响的节点,启动集群软件。此时将不会挂载该 GFS2 文件系统。
  3. 在集群的所有节点中卸载该文件系统。
  4. 只在确定没有文件系统崩溃的一个节点的文件系统中运行 fsck.gfs2
  5. 运行以下命令在受影响的节点中重新启用该启动脚本:
    # chkconfig gfs2 on
  6. 在集群的所有节点中重新挂载 GFS2 文件系统。
可能造成 GFS2 收回的不一致性示例为错误的块计数。当 GFS 内核删除文件系统中的某个文件上,它会系统地删除与那个文件关联的所有数据和元数据。完成此操作后,它会检查块计数。如果该块计数不是 1(意思是只剩下磁盘内节点自己),则表明文件系统不一致,因为块计数与找到的块列表不匹配。
You can override the GFS2 withdraw function by mounting the file system with the -o errors=panic option specified. When this option is specified, any errors that would normally cause the system to withdraw cause the system to panic instead. This stops the node's cluster communications, which causes the node to be fenced.
在内部,GFS2 通过让内核向 gfs_controld 守护进程发送请求撤回的信息启动撤回功能。gfs_controld 会运行 dmsetup 程序替换该文件系统中的设备映射器错误目标以防止进一步访问块设备。然后它会告诉内核操作完成。这是 GFS2 支持要求总是在 GFS2 使用 CLVM 设备的理由,否则就不可能插入设备映射器目标。
设备映射器错误目标的目的是确保将来所有的 I/O 操作都将有一个 I/O 出错信息会让该文件系统以较旧的方式卸载。结果是当出现撤回时,通常会在系统日志中看到来自设备映射器的 I/O 出错信息。
偶尔在 dmsetup 程序不可能根据要求插入错误目标则撤回会失败。如果撤回时缺少内存,且由于造成撤回的问题而无法重新使用内存会发生这种情况。
撤回并不总是意味着 GFS2 中有错误。有时撤回功能可由与基础块设备有关的设备 I/O 错误引发。强烈建议您检查日志来查看发生撤回是否是这样的原因。