在Linux实例中,如果一些关键文件的格式不是Unix格式,可能导致该实例无法被远程连接。您可以通过实例健康诊断工具进行问题修复。
前提条件
Linux实例已通过实例健康诊断工具进行诊断。具体操作,请参见诊断实例的健康状态。
问题分析
问题描述
实例启动异常或无法远程连接,通过实例健康诊断,诊断结果显示:当前实例中文件格式错误,可能会导致实例无法登录。常见导致实例无法登录或服务无法启动的文件有/etc/passwd
、/etc/shadow
、/etc/ssh/sshd_config
等。在实例诊断结果中会有损坏的文件路径。
常见原因
文件在Windows系统中编辑后上传至Linux(如通过FTP/SFTP)。
使用不兼容的文本编辑器修改文件导致换行符异常。
解决方案
使用具有sudo权限的用户远程连接问题实例。
当ECS实例处于正在挂载修复盘的模式下时,只能通过VNC远程连接。具体操作,请参见通过VNC连接实例。
- 查看问题实例原有系统盘的挂载信息。在临时挂载的修复盘中,问题实例原有系统盘的文件系统会被挂载到某一临时目录下。您可以通过以下任一方式查看所在的临时目录信息:
- 在系统盘详情页的挂载实例进行查看,对应的临时目录格式示例为:
/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****
,其中bp19bspzms79kqse****
为实例原有系统盘的云盘序列号。 - 在临时挂载的修复盘中,运行mount命令查看。例如,问题实例原有系统盘的设备路径为/dev/vda,命令示例如下所示:
mount | grep /dev/vda
返回结果如下所示:/dev/vda1 on /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse**** type ext4 (rw,relatime)
- 在系统盘详情页的挂载实例进行查看,对应的临时目录格式示例为:
运行chroot命令,将根目录切换为问题实例原有系统盘所在的临时路径,并进入chroot环境。
您需要在问题实例原有系统盘所在的临时路径中进行文件修复。例如,临时路径为/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****,命令如下所示:
chroot /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****
若
chroot
失败,检查挂载路径是否正确,或运行以下命令:mount --bind /dev /mnt/repair_disk/dev mount --bind /proc /mnt/repair_disk/proc
在chroot环境中,运行vim命令,编辑指定文件。
备份优先,修改关键系统文件前务必备份,如
cp /etc/passwd /etc/passwd.bak
。编辑前,您需要注意以下事项:
当前编辑的文件均为问题实例原有系统盘中的文件,如果您需要编辑该系统盘挂载点之外的文件,请先运行exit命令退出chroot环境。
当前处于chroot环境,因此命令中不需要加上/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****路径地址。
例如,实例原有系统盘中的/etc/passwd文件,编辑命令为vim /etc/passwd,不需要添加/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****路径地址。
vim [$File]
其中[$File]变量为指定的非Unix格式的文件名。本文以/etc/passwd文件为例,命令示例如下所示:
vim /etc/passwd
调整文件格式。
在文件内,按下Shift+:组合键,并输入
set ff=unix
后按下Enter键。按下Shift+:组合键,并输入
wq
后按下Enter键,保存退出文件。
- 修复完成后,退出修复环境,然后检查问题实例的当前状态。
- 运行exit命令,退出chroot环境。
- 在ECS控制台的实例健康诊断页面,卸载临时挂载的修复盘并恢复问题实例至正常模式。
- 远程连接已修复的ECS实例,确认成功登录。
- 本页导读 (1)
- 前提条件
- 问题分析
- 问题描述
- 常见原因
- 解决方案