腾讯云云服务器CVM - Linux 实例使用 VNC 及救援模式排障
文档简介:
现象描述:
在通常情况下,多数 Linux 系统类问题可通过 VNC 方式及救援模式进行排查及修复。本文介绍如何使用这两种方式排查 Linux 实例无法 SSH 登录、系统失败问题。您可通过本文了解并在遇到实例问题时,进行排查及修复。
在通常情况下,多数 Linux 系统类问题可通过 VNC 方式及救援模式进行排查及修复。本文介绍如何使用这两种方式排查 Linux 实例无法 SSH 登录、系统失败问题。您可通过本文了解并在遇到实例问题时,进行排查及修复。
排查工具
VNC 登录是通过 Web 浏览器远程连接云服务器的方式,一般在无法正常 SSH 远程登录实例时使用。使用 VNC 登录方式可直接观察云服务器状态,或进行修改系统内配置文件等操作。
救援模式一般在 Linux 系统无法正常启动,或无法通过 VNC 登录时使用。常见使用场景例如 fstab 配置异常、系统关键文件缺失、lib 动态库文件损坏/缺失等。
问题定位及处理
VNC 方式排查 SSH 无法登录问题
现象描述
使用 SSH 登录 Linux 实例时,出现报错信息 “ssh_exchange_identification: Connection closed by remote host”。如下图所示:

可能原因
kex_exchange_identification 阶段的 connection reset 报错,一般代表 ssh 相关进程已启动,但是配置可能存在异常,例如 sshd 配置文件权限被修改。
解决思路
参见 处理步骤,检查 sshd 进程,定位并解决问题。
处理步骤
1. 参考以下步骤,使用 VNC 登录 Linux 实例:
1.1 登录 云服务器控制台,找到需要登录的 Linux 云服务器,单击右侧的登录。如下图所示:


1.2 在打开的登录窗口,单击 VNC 登录。如下图所示:

1.3 在 login 后输入用户名,按 Enter,在 Password 后输入密码,按 Enter。如下图所示即为登录成功:


2. 执行以下命令,查看 sshd 进程是否正常运行。
ps -ef | grep sshd
返回结果如下图所示,sshd 进程正常。


3. 执行以下命令,查看报错原因。
sshd -t
返回类似如下图所示信息 “/var/empty/sshd must be owned by root and not group or world-writable.
”,可定位错误原因为 /var/empty/sshd/ 权限问题导致。

您还可通过查看 /var/log/secure 日志中的报错信息来辅助排查。如下图所示:



4. 执行以下命令,查看 /var/empty/sshd 目录权限。
ll -d /var/empty/sshd/
返回结果如下图所示,可知权限被修改为777。


5. 执行以下命令,修改 /var/empty/sshd/ 文件权限。
chmod 711 /var/empty/sshd/
参见 使用 SSH 登录 Linux 实例 测试后,可正常远程登录实例。
VNC 方式排查 Linux 系统启动失败问题
现象描述
无法正常 SSH 远程登录 Linux 云服务器,但使用 VNC 方式登录后,查看系统启动失败且提示信息 “Welcome to emergency mode”。如下图所示:


可能原因
可能由于 /etc/fstab 配置不当导致。
例如,已在 /etc/fstab 中配置使用设备名称自动挂载磁盘,但云服务器重启时设备名称发生改变,导致系统无法正常启动。
解决思路
参见 处理步骤 修复 /etc/fstab 配置文件,重启服务器后再进行核验。
处理步骤
1. 参见 处理步骤1,使用 VNC 登录 Linux 实例。
2. 进入 VNC 界面后,查看到如 现象描述 中所示界面,请输入 root 账户密码并按 Enter 登录服务器。输入的密码默认不显示,如下图所示:


3. 进入系统后,执行以下命令,查看 fstab 文件中盘符信息是否正确。
lsblk
返回结果如下图所示,文件中盘符信息有误:


4. 执行以下命令,备份 fstab 文件。
cp /etc/fstab /home
5. 执行以下命令,使用 VI 编辑器打开 /etc/fstab 文件。
vi /etc/fstab
6. 按 i 进入编辑模式,将光标移动至错误配置行首,并输入 # 注释该行配置。如下图所示:


7. 按 Esc 输入 :wq 后,按 Enter 保存设置并退出编辑器。
8. 通过控制台重启实例,详情请参见 重启实例。
9. 验证是否能正常启动及登录。
救援模式排查 Linux 系统启动失败问题
现象描述
Linux 系统重启之后无法正常启动,提示信息有诸多 FAILED 启动失败项。如下图所示:


可能原因
可能由于关键系统文件缺失导致启动失败,例如 bin 或 lib 文件缺失。
解决思路
参见 处理步骤,通过控制台进入实例救援模式,进行问题排查及修复。
处理步骤
1. 进入救援模式前,强烈建议您对实例进行备份,以防止由于出现误操作等造成的影响。云硬盘可通过 创建快照 备份,本地系统盘可通过 创建自定义镜像 镜像备份。
2. 登录 云服务器控制台,在“实例”页面中,选择实例所在行右侧的更多 > 运维与检测 > 进入救援模式。如下图所示:


3. 在弹出的
进入救援模式
窗口中,设置救援模式期间登录实例的密码,勾选同意强制关机。如下图所示:

4. 单击进入救援模式,此时实例状态会变为进入救援模式。如下图所示,该过程一般会在几分钟内完成:

正常进入救援模式后实例的状态会变为红色叹号的救援模式。如下图所示:



5. 使用 root 账户及 步骤3 中设置的密码,通过以下方式登录实例。
若实例有公网 IP,则请参见 使用 SSH 登录 Linux 实例。
若实例无公网 IP,则请参见 使用 VNC 登录 Linux 实例。
6. 本文以 VNC 方式登录为例,登录成功后,依次执行以下命令挂载系统盘根分区。
说明
救援模式下实例系统盘设备名为 vda,根分区为 vda1,默认未挂载。
mkdir -p /mnt/vm1
mount /dev/vda1 /mnt/vm1
执行完成后,返回结果如下图所示:

7. 挂载成功后,即可操作原系统根分区中的数据。
您也可使用 mount -o bind 命令,挂载原文件系统的一部分子目录,并通过 chroot 命令用来在指定的根目录下运行指令,具体操作命令如下:
mount -o bind /dev /mnt/vm1/devmount -o bind /dev/pts /mnt/vm1/dev/ptsmount -o bind /proc /mnt/vm1/procmount -o bind /run /mnt/vm1/runmount -o bind /sys /mnt/vm1/syschroot /mnt/vm1 /bin/bash
执行 chroot 命令时:
若无报错信息,可继续执行 cd / 命令。
若出现如下图所示报错信息,说明无法正常切换根目录,此时可执行 cd /mnt/vm1 查看根分区数据。


8. 通过命令,可查看原系统根分区中 /usr/bin 目录下的所有文件被删除。如下图所示:


9. 此时,可创建一台同操作系统的正常机器,并执行以下命令将正常系统 /usr/bin 目录下的文件压缩后远程拷贝至异常机器上。
正常机器:依次执行以下命令
cd /usr/bin/ && tar -zcvf bin.tar.gz *
scp bin.tar.gz root@异常实例ip:/mnt/vm1/usr/bin/
说明
有公网 IP 可通过公网拷贝,无公网 IP 需通过内网拷贝。
执行结果如下图所示:


异常机器:在救援模式下依次执行以下命令
cd /mnt/vm1/usr/bin/
tar -zxvf bin.tar.gz
chroot /mnt/vm1 /bin/bash
执行结果如下图所示:


10. 实例修复完成后,选择实例所在行右侧的更多 > 运维与检测 > 退出救援模式。如下图所示:


11. 退出救援模式后实例处于关机状态,开机后进行系统验证。如下图所示,系统已恢复。

