如何排查实例故障¶
如果您的实例无法启动并进入错误状态,这通常表示与用于创建实例的镜像或服务器配置相关的更大问题。
要排查问题,请完成以下步骤
保存相关的日志文件和调试信息
- 实例日志
输入以下命令以显示实例日志
incus info <instance_name> --show-log
- 控制台日志
输入以下命令以显示控制台日志
incus console <instance_name> --show-log
重新引导运行 Incus 服务器的机器。
尝试再次启动您的实例。如果错误再次出现,请比较日志以检查它是否是相同的错误。
如果是,并且如果无法从日志信息中找出错误的来源,请在论坛中提出问题。请务必包含您收集的日志文件。
故障排除示例¶
在此示例中,让我们调查一个 RHEL 7 系统,其中systemd无法启动。
user@host:~$ incus console --show-log systemd控制台 日志: 无法 插入 模块 'autofs4'无法 插入 模块 'unix'无法 挂载 sysfs 到 /sys: 操作 不允许无法 挂载 proc 到 /proc: 操作 不允许[!!!!!!] 无法 挂载 API 文件系统, 冻结。这里的错误表明无法挂载/sys和/proc - 这在非特权容器中是正确的。但是,如果可以,Incus 会自动挂载这些文件系统。
容器要求指定每个容器都必须带有一个空的/dev、/proc和/sys目录,并且必须存在/sbin/init。如果这些目录不存在,Incus 无法挂载它们,然后systemd将尝试这样做。由于这是一个非特权容器,因此systemd没有执行此操作的能力,然后它会冻结。
因此,您可以查看任何内容更改之前环境,并且可以使用raw.lxc配置参数在容器中显式更改 init 系统。这相当于在 Linux 内核命令行上设置init=/bin/bash。
incus config set systemd raw.lxc 'lxc.init.cmd = /bin/bash'
以下是它的外观
user@host:~$ incus config set systemd raw.lxc 'lxc.init.cmd = /bin/bash'user@host:~$ incus start systemduser@host:~$ incus console --show-log systemd 控制台 日志: [root@systemd /]#现在容器已启动,您可以检查它并查看事物是否按预期运行
user@host:~$ incus exec systemd -- bash[root@systemd ~]# ls[root@systemd ~]# mountmount: 无法 读取 mtab: 没有 此类 文件 或 目录[root@systemd ~]# cd /[root@systemd /]# ls /proc/sys[root@systemd /]# exit由于 Incus 尝试自动修复,因此它在启动时创建了一些目录。关闭并重新启动容器可以解决问题,但根本原因仍然存在 - 模板不包含所需的文件。