有关 VPC 的虚拟服务器实例的故障诊断
如果使用 IBM Cloud® Virtual Servers for Virtual Private Cloud 实例遇到困难,请查看以下可能的原因。
未在 IBM Cloud 中设置许可权
在创建 Virtual Servers for VPC之前,需要在 IBM Cloud 控制台中设置正确的许可权。 如果许可权不正确,您可以创建服务器,但该服务器会显示 Pending
状态,并且会迅速变为 Failed
状态。 请确保账户管理员为您分配了正确的 权限。
服务器全部处于 Unknown 状态
最可能的原因是您没有足够的许可权来查看服务器状态。 请确保您具有正确的许可权。
Unknown 状态也可能是由到期的 IMS 令牌引起的。 请重新运行 bx sl init
,然后使用新令牌重新构建 ims_subject
。 确保在请求头中传递 X-Subject-Token:$ims_subject
参数。
错误:创建实例操作时发生 409 冲突
如果实例的状态与其他操作相冲突,那么无法创建某些实例操作。 例如,如果实例状态为 stopped
,而您尝试创建 reboot
操作,那么系统会返回 409 错误。
状态 | 操作 | 冲突 |
---|---|---|
正在运行 | 启动 | 是 |
已停止 | 除启动以外的任何操作 | 是 |
未在运行 | pause | 是 |
未在运行 | 重新引导 | 是 |
非 paused | resume | 是 |
已暂停 | 除恢复以外的任何操作 | 是 |
实例未响应 instance-reboot
请求
如果实例未响应 instance-reboot
请求,那么可以尝试 instance-reset
请求。 instance-reboot
请求向实例发送操作系统重启请求,而 instance-reset
请求则对虚拟服务器实例执行硬重置。 您可以将这两者的差别视为在计算机键盘上键入“ctrl-alt-delete”与按重置或电源按钮的差别。 请记住,完成 instance-reset
请求需要的时间比 instance-reboot
请求长。
为什么无法添加 SSH 密钥?
如果您尝试向帐户添加 SSH 密钥,但迂到无法解析该密钥的错误,请确保字符串中没有换行符。 SSH 密钥是连续的字符串; 有时从终端复制 SSH 密钥时引入换行符。 要避免此问题,请首先将 SSH 密钥粘贴到文本编辑器中,并除去任何换行符。 然后,从文本编辑器复制 SSH 密钥,并将其粘贴到 VPC UI,CLI 或 API 中。
如何重新注册 RHEL 虚拟服务器实例?
如果您看到以下错误信息:
This system is not registered with an entitlement server.
已从胶囊服务器注销 REHL 虚拟服务器实例。 要解决此问题,请运行 reregister-ng-rhel-vsi.sh
脚本以重新注册虚拟服务器实例。
#!/bin/bash
##
## =============================================================================
## IBM Confidential
## © Copyright IBM Corp. 2020
##
## The source code for this program is not published or otherwise divested of
## its trade secrets, irrespective of what has been deposited with the
## U.S. Copyright Office.
## =============================================================================
##
#
# Description: Reregister an RHEL virtual server instance to its respective capsule server
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
argumentsFound=false
FILE_DIR=/var/lib/cloud/instance/scripts/vendor
file=$(grep -src -r -w 'REDHAT_CAPSULE_SERVER\|OS_INSTALL_CODE' $FILE_DIR | awk -F: '$2 != 0 {print $1}')
echo "Processing $file..."
if [ -f "$file" ]; then
capsule="$(grep "REDHAT_CAPSULE_SERVER=" $file | cut -d\" -f2)"
organization="$(grep "OS_REDHAT_ORG_NAME=" $file | cut -d\" -f2)"
activationKey="$(grep "ACTIVATION_KEYS=" $file | cut -d\" -f2)"
profileName="$(grep "PROFILENAME=" $file | cut -d\" -f2)"
if [ ! -z "$capsule" ] && [ ! -z "$organization" ] && [ ! -z "activationKey" ] && [ ! -z "profileName" ]; then
argumentsFound=true
fi
fi
if [ "$argumentsFound" = false ]; then
if [ -z "$4" ]; then
echo Please provide capsule hostname, organization, activation key and profile name
exit
fi
capsule="$(echo $1 | cut -d. -f1).adn.networklayer.com"
organization=$2
activationKey=$3
profileName=$4
fi
echo "Cleaning metadata..."
yum clean all
echo "Unregistering system..."
subscription-manager unregister
subscription-manager clean
echo "Removing any existing katello-ca RPMs..."
rpm -qa | grep katello-ca | xargs rpm -e
echo "Installing consumer RPM..."
rpm -Uvh http://${capsule}/pub/katello-ca-consumer-latest.noarch.rpm
subscription-manager config --server.hostname=${capsule}
subscription-manager config --rhsm.baseurl=https://${capsule}/pulp/repos
if [ -f /etc/rhsm/facts/katello.facts ]; then
mv /etc/rhsm/facts/katello.facts /etc/rhsm/facts/katello.facts.bak.$(date +%s)
fi
echo '{"network.hostname-override":"'${profileName}'"}' > /etc/rhsm/facts/katello.facts
echo "Registering system..."
subscription-manager register --org="${organization}" --activationkey="${activationKey}" --force
要运行脚本,请执行以下操作:
- chmod + x reregister-ng-rhel-vsi.sh
- ./reregister-ng-rhel-vsi.sh
如果脚本失败,请提供以下参数:
- 胶囊主机名
- 组织
- 激活密钥
- 概要文件名
能否在虚拟服务器实例上配置嵌套虚拟化?
虚拟服务器实例上的嵌套虚拟化不是受支持的配置。
如何解决 SSH 密钥错误?
从终端复制 SSH 密钥以将密钥添加到 VPC 时,有时会引入额外的换行符,这会导致解析错误。 要避免此问题,请首先将 SSH 密钥粘贴到文本编辑器中,并除去任何额外的换行符。 然后,从文本编辑器复制 SSH 密钥,并将其粘贴到 VPC UI,CLI 或 API 中。
为什么我接收到 SSH 密钥许可权被拒绝错误?
当您接收到 SSH 密钥许可权被拒绝错误时,您的主机可能无法识别为授权主机。 要将主机添加为已知主机,请在终端中运行以下命令。 确保将 [sFTP]
替换为主机。
ssh-keyscan -t rsa [sFTP] >> ~/.ssh/known_hosts
如果需要更多帮助,可以打开 支持案例。
有关 z/OS 虚拟服务器实例的故障诊断信息,请参阅 IBM Wazi as a Service 文档。
尝试为现有虚拟服务器实例添加超过 5 个网络接口时,为什么会收到错误?
如果用于配置虚拟服务器的 x86实例配置文件 包含 17 个或更多vCPUs,现在可以添加 5 个以上的网络接口。 要利用向网络接口限制增大之前存在的虚拟服务器添加更多网络接口的能力,必须先停止正在运行的虚拟服务器,然后再次将其启动。 有关多个网络接口的更多信息,请参阅 管理网络接口。
如何使用Linux SysRq密钥从串行控制台排除Linux虚拟服务器实例的故障?
出现Linux虚拟服务器实例无响应的原因有很多,如系统崩溃、死锁或内核相关问题。 当虚拟服务器无响应时,标准故障排除方法(如 SSH 或直接访问)可能不起作用。 在这种情况下,串行控制台仍可访问,这使得管理员可以使用Linux系统请求SysRq)键在较小的级别上与服务器进行交互。
系统故障、内核慌乱或无响应进程会导致Linux服务器无法通过常规进程运行。 这些问题可能源于软件错误、硬件故障或系统参数配置错误。 SysRq密钥提供对Linux内核的低级访问,并绕过冻结或无响应的高级进程。 Linux内核内置了这一机制,作为一种故障保护措施,帮助用户执行关键的系统操作,如重启服务器或转储诊断信息,即使在其他输入方法不可用的情况下也是如此。 它提供了一种直接的方法来控制服务器,并在常规访问方法失效时获得系统级洞察力。
要通过串行控制台使用SysRq密钥排除故障并解决问题,请按照以下步骤操作:
-
通过连接串行控制台访问虚拟服务器实例。 有关详细信息,请参阅 使用 VNC 或串行控制台访问虚拟服务器实例。
-
启用SysRq命令。 如果 SysRq 命令已经启用,您可以跳过此步骤。 要启用SysRq命令,请设置kernel.sysrq参数。
echo 1 > /proc/sys/kernel/sysrq
-
从串行控制台发送SysRq命令。 下面的示例启动了内核崩溃转储(kdump)。
- 按下回车键。
- 按
~B
键(大写字母 B 键后的转折键)。 - 按
c
(小写 c)键启动内核崩溃转储(kdump)。
示例:
ENTER + ~ + B + c
要触发崩溃转储,请确保在Linux虚拟服务器实例上配置了
crashkernel
。 有关说明,请参阅 内核崩溃转储机制。 -
分析诊断输出。 例如,之前的SysRq内核崩溃转储会生成重要的诊断数据,您可以对其进行分析。 通过发送相关的SysRq命令,您可以收集到宝贵的诊断数据,用于排除故障和重新获得对系统的控制。
要查看 SYSRQ 命令键列表,请按 Enter,然后按 ~Bh
(梯形符号,大写 B,小写 h)。 有关这些键的更多详情,请参阅 LinuxMagic System Request Key Hacks - What are the 'command' keys?