uevents 和 GFS2¶
在 GFS2 挂载的生命周期中,会生成多个 uevent。本文档解释了这些事件是什么以及它们的作用(由 gfs2-utils 中的 gfs_controld 使用)。
GFS2 uevent 列表¶
1. ADD¶
ADD 事件在挂载时发生。它始终是新创建的文件系统生成的第一个 uevent。如果挂载成功,将跟随一个 ONLINE uevent。如果挂载不成功,则会跟随一个 REMOVE uevent。
ADD uevent 具有两个环境变量:SPECTATOR=[0|1] 和 RDONLY=[0|1],它们分别指定了文件系统的旁观者状态(未分配日志的只读挂载)和只读状态(已分配日志)。
2. ONLINE¶
ONLINE uevent 在成功挂载或重新挂载后生成。它具有与 ADD uevent 相同的环境变量。ONLINE uevent 以及用于旁观者和 RDONLY 的两个环境变量是相对较新的添加(2.6.32-rc+),旧版内核不会生成它们。
3. CHANGE¶
CHANGE uevent 用于两个地方。一个是在第一个节点报告文件系统成功挂载时(FIRSTMOUNT=Done)。gfs_controld 将此用作信号,表明集群中的其他节点可以挂载文件系统了。
另一个 CHANGE uevent 用于通知文件系统某个日志的恢复完成情况。它有两个环境变量:JID=,指定刚恢复的日志 ID;以及 RECOVERY=[Done|Failed],指示操作的成功(或失败)。这些 uevent 是为每个恢复的日志生成的,无论是在初始挂载过程中,还是 gfs_controld 通过 /sys/fs/gfs2/<fsname>/lock_module/recovery 文件请求特定日志恢复的结果。
由于 CHANGE uevent 在早期版本的 gfs_controld 中未检查环境变量以发现状态就被使用,因此我们不能再向其添加更多功能,否则会有用户使用旧版用户工具并破坏其集群的风险。因此,在添加新的用于成功挂载或重新挂载的 uevent 时,使用了 ONLINE uevent。
4. OFFLINE¶
OFFLINE uevent 仅因文件系统错误而生成,并作为“撤回”机制的一部分使用。目前,它没有提供任何关于错误是什么的信息,这是需要修复的。
5. REMOVE¶
REMOVE uevent 在不成功挂载结束时或文件系统卸载结束时生成。所有 REMOVE uevent 之前都至少有一个针对同一文件系统的 ADD uevent,并且与其他 uevent 不同,它由内核的 kobject 子系统自动生成。
所有 GFS2 uevent 的共同信息(uevent 环境变量)¶
1. LOCKTABLE=¶
LOCKTABLE 是一个字符串,通过挂载命令行 (locktable=) 或 fstab 提供。它用作文件系统标签,并提供 lock_dlm 挂载加入集群所需的信息。
2. LOCKPROTO=¶
LOCKPROTO 是一个字符串,其值取决于挂载命令行或 fstab 中设置的内容。它将是 lock_nolock 或 lock_dlm。未来可能会支持其他锁管理器。
3. JOURNALID=¶
如果文件系统正在使用日志(旁观者挂载不分配日志),那么在所有 GFS2 uevent 中都会提供数字日志 ID。
4. UUID=¶
在使用最新版本的 gfs2-utils 时,mkfs.gfs2 会将 UUID 写入文件系统超级块。如果存在,此 UUID 将包含在每个与文件系统相关的 uevent 中。