Linux系统中的/etc/fstab文件主要用于保存服务器磁盘的挂载信息,如果该配置文件中写入不正确的挂载信息或者该文件自身存在访问错误,例如:权限配置、文件丢失等,系统启动时就可能出现异常,导致启动失败。
故障现象
通过远程连接软件无法登录Linux实例,通过控制台VNC远程连接时,发现系统进入到急救模式(emergency mode),且出现报错。见下图
如果是Ubuntu系统报如下错误。
An error occurred while mounting /alidata. Press S to skip mounting or M for manual recovery
具体信息以下图所示。
解决方案
CentOS
方法一
- 通过控制台VNC远程连接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键保存并退出。
- 将光标移到异常的参数行,按i键进入编辑模式,写入正确的分区信息,如下所示。
-
执行
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键保存并退出。
- 将光标移到异常的参数行,按i键进入编辑模式,写入正确的分区信息,如下所示。
- 执行
reboot
命令,重启系统,确认能成功登录系统。
方法二
具体操作请参见CentOS实例的方法二。
【云技术在线】提供云服务器故障排查服务。