uevents 和 GFS2¶
在 GFS2 挂载的生命周期中,会生成许多 uevents。本文档解释了这些事件是什么以及它们用于什么(由 gfs2-utils 中的 gfs_controld 使用)。
GFS2 uevents 列表¶
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 uevents 的通用信息(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 写入文件系统超级块。如果存在,这将包含在与文件系统相关的每个 uevent 中。