lvmetad 在启动时挂起

lvmetad 在启动时挂起

我有一台运行 Arch Linux 的机器,但启动时出现问题。它挂起 90 秒等待块设备上的 pvscan,然后放弃。 (实际上,pvscan进程仍然卡住,之后的任何lvm命令也会挂起)。有时效果很好。

经过一番挖掘,看起来 lvmetad(8) 是造成此挂起的原因,因为它在启动时就挂起了:

lvmetad[360]: Cannot lock lockfile [/run/lvmetad.pid], error was [Resource temporarily unavailable]

如果我在启动后终止它并重新启动它,挂起的 pvscan 进程将被解锁,完成其工作,并且一切都恢复正常(lvm 命令再次工作等)

您可以在日志中看到这一点:巴斯德宾

我尝试降低 lvmetad 的详细程度,但只得到给出的错误。

有时启动时间比平常长一点(等待根分区),并且 lvmetad 启动良好(但我不确定它是否真的相关)

您知道如何防止此错误吗?

我收集了更多信息:

  • 当 fcntl() 因 EAGAIN 失败时出现“无法记录日志文件”错误(要锁定的文件已被另一个进程共享锁定或独占锁定)
  • 系统上正在运行一个 lvmetad,其 pid 非常小(比我们在日志中看到的失败进程小得多)
  • lvm2-lvmetad.service 生成的 lvmetad 进程是用 -f 运行的,所以运行的不是这个
  • 第一个比第二个早 3 秒启动(在 systemd 之前)

initrd 的 lvm2 组件的清理钩子应该会杀死早期的 lvmetad,但由于某种原因它不起作用:

run_cleanuphook() {
    kill $(cat /run/lvmetad.pid)
}

启动后杀死进程也不起作用。

我进行了调试跟踪(无法发布第三个链接,我将其放在第二个粘贴的末尾),看起来主线程正在等待其他线程的终止,并且有一个 client_thread 卡在读取上在FD 6上(/run/lvm/lvmetad.socket)

相关内容