您描述的错误可能意味着两件事:
它正在记录 xenstore 中的一场众所周知的比赛
附加到域控制台所需的伪 TTY 存储在 xenstore 的多个位置。Xen 控制台客户端在该值上建立一个 inotify 样式的监视,以便它可以在支持文件描述符发生更改时重新连接到控制台。但是,从最初创建域开始,需要几秒钟时间才能将该信息填充到 xenstore 中。
如果您发布 xm info 的输出,则很容易看出您是否正在处理众所周知的比赛。
无法创建后备伪终端
造成这种情况的常见原因是 /dev/pts 未安装。如果您xenstore-ls /local/domain/{domain_id}
在没有该-c
选项的情况下启动域后运行,您将看到该域的存储内容。寻找显示的行(靠近底部)
tty="/dev/pts/{pty}"
验证 pty 确实存在。
xen 控制台守护进程使用两个实际的文件描述符来实现它。第一个是节点中特定信息的伪文件描述符(通过 xs_fileno() 获得),因此它可以 poll() 以查看该信息是否更改。第二个是从open()
(是的,传递了 O_NONBLOCK)返回的真实 FD,它实际上读/写到伪 tty。
看起来它甚至没有从 xenstore 中找到伪 FD,这意味着支持 pty 可能存在存在挑战。