问题描述
通过远程连接软件无法登录Linux实例,通过使用管理终端连接Linux实例远程连接时,发现系统出现进入到急救模式(emergency mode)的信息,且出现报错。
-
CentOS实例报如下错误。
-
Ubuntu实例报如下错误。
An error occurred while mounting /alidata. Press S to skip mounting or M for manual recovery
具体信息以下图所示。
问题原因
一般是因为/etc/fstab
文件中写入了错误的文件系统,或者磁盘的分区信息不正确。/etc/fstab
文件主要用于保存服务器的磁盘挂载信息,如果该配置文件中写入不正确的挂载信息或者该文件自身存在访问错误,例如:权限配置、文件丢失等,系统启动时就可能出现异常,导致启动失败。
解决方案
-
如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
-
如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
-
如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
本节主要解决CentOS和Ubuntu系统因为/etc/fstab
配置文件错误导致启动失败的解决方法。
本文相关配置及说明适用于CentOS6.5、CentOS7.0、Ubuntu12.04和Ubuntu14.04等操作系统。在其它操作系统版本上的配置可能有所差异,具体情况请参阅相应操作系统官方文档。
CentOS实例
本文主要介绍以下两种方法解决该问题,推荐您使用方法一。
方法一
-
通过使用管理终端连接Linux实例远程连接ECS实例。系统提示进入急救模式时,输入实例登录密码。
-
执行以下命令,将根分区的挂载模式变更为读写。
mount / -o remount,rw
-
执行
blkid
命令,查看ECS实例上磁盘的分区情况以及文件系统。如下图所示,ECS实例数据盘分区为/dev/xvdb1
,文件系统类型为ext4。 -
执行以下命令,检查磁盘的分区信息与文件系统和上一步返回的结果是否一致。
vim /etc/fstab
-
如果不一致,按以下步骤进行修改。
-
将光标移到异常的参数行,按i键进入编辑模式,写入正确的分区信息,如下所示。
/dev/xvdb1 /mydata ext4 defaults,nofail 0 0
建议您在挂载的时候添加nofail参数,在启动实例时,若设备不存在会直接忽略它,从而不发生报错。
-
按Esc键退出编辑模式,并输入:wq!,按Enter键保存并退出。
-
-
执行
reboot
命令,重启系统,确认能成功登录系统。
方法二
-
在ECS控制台重启实例(或者强制重启示例),然后使用VNC连接实例,当系统启动至内核选项界面时,按
e
键进入修改grub引导文件。 -
将光标定位至Linux内核参数行,删除其余内核参数,添加
rw init=/bin/bash
参数,如下图所示,然后按Ctrl和x键,进入单用户模式。 -
参见方法一的第3步至第6步,修改
/etc/fstab
配置后,重启实例即可。
Ubuntu实例
方法一
-
通过使用管理终端连接Linux实例远程连接ECS实例。
-
按S键跳过磁盘挂载,进入系统。
-
执行如下命令,变更根分区的挂载模式为读写。
mount / -o remount,rw
-
执行
blkid
命令,查看ECS实例上磁盘的分区情况以及文件系统。如下图所示,ECS实例数据盘分区为/dev/xvdb1
,文件系统为ext4。 -
执行如下命令,检查磁盘的分区信息与文件系统和上一步返回的结果是否一致。
vim /etc/fstab
-
如果不一致,按以下步骤修改。
-
将光标移到异常的参数行,按i键进入编辑模式,写入正确的分区信息,如下所示。
/dev/xvdb1 /mydata ext4 defaults,nofail 0 0
建议您在挂载的时候添加nofail参数,在启动实例时,若设备不存在会直接忽略它,从而不发生报错。
-
按Esc键退出编辑模式,并输入:wq!,按Enter键保存并退出。
-
-
执行
reboot
命令,重启系统,确认能成功登录系统。
方法二
具体操作请参见CentOS实例的方法二。