如何排查实例故障¶
如果您的实例无法启动并进入错误状态,这通常表示与用于创建实例的镜像或服务器配置相关的更大问题。
要排查问题,请完成以下步骤
保存相关的日志文件和调试信息
- 实例日志
输入以下命令以显示实例日志
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 systemd
user@host:~$
incus console --show-log systemd
控制台 日志:
[root@systemd /]#
现在容器已启动,您可以检查它并查看事物是否按预期运行
user@host:~$
incus exec systemd -- bash
[root@systemd ~]# ls
[root@systemd ~]# mount
mount: 无法 读取 mtab: 没有 此类 文件 或 目录
[root@systemd ~]# cd /
[root@systemd /]# ls /proc/
sys
[root@systemd /]# exit
由于 Incus 尝试自动修复,因此它在启动时创建了一些目录。关闭并重新启动容器可以解决问题,但根本原因仍然存在 - 模板不包含所需的文件。