Linux实例的/etc/fstab文件配置错误导致系统启动异常

Linux实例的/etc/fstab文件配置错误导致系统启动异常

更新时间:2020-06-19 13:52:02

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺

问题描述

通过远程连接软件无法登录Linux实例,通过使用管理终端连接Linux实例远程连接时,发现系统出现进入到急救模式(emergency mode)的信息,且出现报错。

  • CentOS实例报如下错误。
  • Ubuntu实例报如下错误。
    An error occurred while mounting /alidata.
    Press S to skip mounting or M for manual recovery
    具体信息以下图所示。
    Ubuntu进入维护模式

问题原因

一般是因为/etc/fstab文件中写入了错误的文件系统,或者磁盘的分区信息不正确。/etc/fstab文件主要用于保存服务器的磁盘挂载信息,如果该配置文件中写入不正确的挂载信息或者该文件自身存在访问错误,例如:权限配置、文件丢失等,系统启动时就可能出现异常,导致启动失败。

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

本节主要解决CentOS和Ubuntu系统因为/etc/fstab配置文件错误导致启动失败的解决方法。挂载分区重启实例前,您可以通过自助诊断系统检测挂载信息是否正确,详情请参见自助诊断系统

说明:本文相关配置及说明适用于CentOS6.5、CentOS7.0、Ubuntu12.04和Ubuntu14.04等操作系统。在其它操作系统版本上的配置可能有所差异,具体情况请参阅相应操作系统官方文档。

CentOS实例

本文主要介绍以下两种方法解决该问题,推荐您使用方法一

方法一

  1. 通过使用管理终端连接Linux实例远程连接ECS实例。系统提示进入急救模式时,输入实例登录密码。
  2. 执行以下命令,将根分区的挂载模式变更为读写。
    mount / -o remount,rw
  3. 执行blkid命令,查看ECS实例上磁盘的分区情况以及文件系统。如下图所示,ECS实例数据盘分区为/dev/xvdb1,文件系统类型为ext4。
  4. 执行以下命令,检查磁盘的分区信息与文件系统和上一步返回的结果是否一致。
    vim /etc/fstab
  5. 如果不一致,按以下步骤进行修改。
    1. 将光标移到异常的参数行,按i键进入编辑模式,写入正确的分区信息,如下所示。
      /dev/xvdb1 /mydata ext4 defaults,nofail 0 0
      注意:建议您在挂载的时候添加nofail参数,在启动实例时,若设备不存在会直接忽略它,从而不发生报错。
    2. Esc键退出编辑模式,并输入:wq!,按Enter键保存并退出。
  6. 执行reboot命令,重启系统,确认能成功登录系统。

方法二

  1. 在ECS控制台重启实例(或者强制重启示例),然后使用VNC连接实例,当系统启动至内核选项界面时,按e键进入修改grub引导文件。
  2. 将光标定位至Linux内核参数行,删除其余内核参数,添加rw init=/bin/bash参数,如下图所示,然后按Ctrlx键,进入单用户模式。
  3. 参见方法一的第3步至第6步,修改/etc/fstab配置后,重启实例即可。

Ubuntu实例

方法一

  1. 通过使用管理终端连接Linux实例远程连接ECS实例。
  2. S键跳过磁盘挂载,进入系统。
  3. 执行如下命令,变更根分区的挂载模式为读写。
    mount / -o remount,rw
  4. 执行blkid命令,查看ECS实例上磁盘的分区情况以及文件系统。如下图所示,ECS实例数据盘分区为/dev/xvdb1,文件系统为ext4。
  5. 执行如下命令,检查磁盘的分区信息与文件系统和上一步返回的结果是否一致。
    vim /etc/fstab
  6. 如果不一致,按以下步骤修改。
    1. 将光标移到异常的参数行,按i键进入编辑模式,写入正确的分区信息,如下所示。
      /dev/xvdb1 /mydata ext4 defaults,nofail 0 0
      注意:建议您在挂载的时候添加nofail参数,在启动实例时,若设备不存在会直接忽略它,从而不发生报错。
    2. Esc键退出编辑模式,并输入:wq!,按Enter键保存并退出。
  7. 执行reboot命令,重启系统,确认能成功登录系统。

方法二

具体操作请参见CentOS实例的方法二

相关文档

关于Linux实例上挂载云盘的具体操作,请参见Linux格式化数据盘

适用于

  • 云服务器ECS

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。