错误的系统配置导致启动或远程登录失败
问题描述
Linux系统经常因为错误的系统配置导致系统无法启动成功或者无法登录系统,由于无法通过SSH或者VNC登录系统,导致错误的系统配置无法得到修复,需要一种通用的方法来修改该异常实例系统盘上的错误配置,使得实例或者系统能够恢复正常。本文介绍一种通用的异常恢复手段,通过卸载该异常实例的系统盘,并作为数据盘挂载到其他正常ECS实例进行修复。
问题原因
常见的可能导致系统启动失败或者无法进入系统的系统配置错误如表1所示。
问题类型 |
典型问题 |
---|---|
配置错误 |
/etc/fstab文件缺失或者配置错误 |
SELinux配置错误 |
|
/etc/security/limits.conf配置错误 |
|
/etc/passwd配置格式错误 |
|
/etc/shadow配置格式错误 |
|
/etc/ssh/sshd_config配置格式错误 |
|
文件或目录缺失 |
/etc/ssh目录被误删 |
/etc/security目录被误删 |
|
/etc/passwd文件被误删 |
|
/etc/shadow文件被误删 |
|
/etc/ssh/sshd_config文件被误删 |
|
文件权限错误 |
SSH依赖的私钥权限配置过大 |
SSH依赖的公钥权限配置过大 |
|
内核参数配置错误 |
vm.nr_hugepages配置过大 |
操作步骤
- 准备正常实例
准备一台可以正常访问的ECS实例,操作系统与该异常实例保持一致。
- 可以是已有ECS实例
- 可以新创建一台ECS实例,具体操作请参见购买并登录Linux弹性云服务器。
- 创建快照
操作异常实例系统盘前,建议您对该实例系统盘创建快照,避免数据丢失。具体操作请参见创建快照。
- 登录管理控制台。
- 单击“”,选择“计算 > 弹性云服务器”。
- 在实例列表页面找到异常的实例,单击该异常实例的实例名称,进入该异常实例的详情页面。
- 在实例详情页面,单击“云硬盘”页签。
- 在“云硬盘”页面中,单击“创建快照”。
图1 创建快照
- 在ECS管理控制台左侧导航栏,选择“云硬盘 > 快照”,可以查看快照状态,当“状态”为“可用”时,表示快照创建成功。
图2 查看快照状态
- 卸载异常实例系统盘
快照创建完成后,需要停止该异常实例,然后卸载该异常实例的系统盘,具体操作请参见卸载系统盘。
- 将异常实例的系统盘挂载为正常实例的数据盘
具体的操作步骤如下:
- 登录管理控制台。
- 单击“”,选择“计算 > 弹性云服务器”。
- 在实例列表页面找到正常的实例,单击该正常实例的实例名称,进入该正常实例的详情页面。
- 在实例详情页面,单击“云硬盘”页签。
- 在“云硬盘”页面中,单击“挂载磁盘”。
图3 挂载磁盘
- 在弹出的对话框中,选择步骤3已卸载的异常实例的系统盘,“磁盘属性”为“数据盘”,单击“确定”,即可完成挂载。
图4 挂载数据盘
- 等待一段时间,在ECS管理控制台左侧导航栏,选择“云硬盘 > 磁盘”,可以查看磁盘状态。当该磁盘“状态”变为“正在使用”时,表示已经成功挂载磁盘。
- 挂载完成后,通过SSH或VNC远程登录正常实例,执行fdisk -l命令,会看到该正常实例新增一块磁盘设备/dev/vdb和分区/dev/vdb1。
图5 查看新增磁盘设备
- 执行以下命令,将异常实例的系统盘作为数据盘挂载到正常实例。
- 数据盘分区:8查询到的分区为准,比如:/dev/vdb1
- 挂载点:正常实例的本地目录,比如:/mnt
以数据盘分区为/dev/vdb1,挂载点为/mnt为例,命令如下:
mount /dev/vdb1 /mnt
- 修复数据盘
您可以在该正常实例中进行对应操作来修复数据盘,常见的四种场景如下:
场景一:文件配置错误
以修复异常实例/etc/fstab文件配置错误为例,操作步骤如下:
- 在正常实例上,对数据盘中的/mnt/etc/fstab文件进行修复,执行以下命令,对文件配置错误的内容进行编辑修改。
vim /mnt/etc/fstab
- 文件编辑修改完成后,按Esc键退出编辑模式,并输入:wq保存后退出。
本示例以异常实例/etc/fstab文件修复为例,其他文件配置错误的修复请修改对应文件的目录。
例如:/etc/ssh/sshd_config文件对应数据盘上的目录为/mnt/etc/ssh/sshd_config。
场景二:文件或目录缺失
以修复异常实例/etc/security目录缺失为例,操作步骤如下:
在正常实例上,执行以下命令,对数据盘中的/mnt/etc/security目录缺失进行修复。
cp -rfa /etc/security /mnt/etc/
本示例以异常实例/etc/security目录缺失进行修复为例,其他文件或目录缺失的修复请修改对应文件的目录。
例如:/etc/ssh/sshd_config文件缺失则执行cp -rfa /etc/ssh/sshd_config /mnt/etc/ssh命令进行修复。
场景三:文件权限错误
以修复异常实例/etc/ssh/ssh_host_ecdsa_key文件权限配置错误为例,操作步骤如下:
在正常实例上,执行以下命令,对数据盘中的/mnt/etc/ssh/ssh_host_ecdsa_key文件进行权限修复。
chmod 600 /mnt/etc/ssh/ssh_host_ecdsa_key
本示例以异常实例/etc/ssh/ssh_host_ecdsa_key文件修复为例,其他文件权限配置错误的修复请修改对应文件的目录。
例如:/etc/ssh/ssh_host_ed25519_key文件对应数据盘上的目录为/mnt/etc/ssh/ssh_host_ed25519_key。
场景四:内核参数优化
修改系统内核参数可能产生内核不稳定,请评估风险后进行操作。
以配置vm.nr_hugepages参数为例,操作步骤如下:
- 在正常实例上,执行以下命令,对数据盘中的/mnt/etc/sysctl.conf文件中的内核参数进行配置优化。
- 按/键,输入nr_hugepages,按回车键搜索定位到该配置项所在的位置。
- 按i键,编辑该配置项,并将该配置项调低至合理的数值,如果未搜索到该配置项则新增如下配置项。
vm.nr_hugepages=4
该数值需要保证vm.nr_hugepages * hugepagesize < memory_total,具体值请根据实际业务需要进行计算。
- 修改完成后,按Esc键退出编辑模式,并输入:wq保存后退出。
- 执行如下命令,使配置生效。
- 在正常实例上,对数据盘中的/mnt/etc/fstab文件进行修复,执行以下命令,对文件配置错误的内容进行编辑修改。
- 恢复异常实例系统盘
通过上述步骤,已经将异常实例系统盘上的配置错误修复完毕,可以将正常实例的ECS数据盘(即原来异常实例的系统盘)卸载,然后再挂载回原异常实例,操作步骤如下:
1. 正常实例卸载数据盘(即原异常实例的系统盘),具体操作请参见卸载数据盘。
2. 将原异常实例的系统盘作为系统盘挂载回原异常实例。