自助救治损伤的ECS实例Linux系统盘

如需在ECS Linux实例系统盘异常时进行自助修复,您可以使用OOS提供的一键修复功能。

前提条件

已创建RAM用户并赋予,AliyunOOSFullAccess、AliyunROSFullAccess、AliyunECSFullAccess和AliyunVPCFullAccess的权限。具体操作,请参见创建RAM用户权限策略概览

使用说明

使用场景

在某些情况下,Linux操作系统可能出现启动异常。此时,尽管阿里云ECS控制台显示实例状态为“运行中”,但实际上实例内的应用无法访问,且实例网络也不可达(无法ping通,也无法通过Workbench或SSH建立连接)。如果您通过VNC在阿里云ECS控制台连接到该实例,可能会看到以下错误提示之一:

  • unexpected inconsistency;RUN fsck MANUALLY
  • Give root password for maintenance (or type CTRL-D to continue)
  • Enter 'help' for a list of built-in commands.
    (initramfs)

造成上述问题的原因包括但不限于:

  • 实例被强制关机或重启。

  • 突然宕机导致文件系统数据不一致。

  • 卸载了数据盘但未从/etc/fstab中删除相应的挂载信息。

  • /etc/fstab文件丢失或损坏。

  • initrd文件被损坏。

  • 其他原因导致的文件系统损害。

解决方案概览

本文提供了一个一键修复的自动化方案,该方案采用了一个经过阿里云官方测试的OOS模板。模板流程如下:

  1. 对出现问题的实例进行镜像备份。

  2. 卸载问题实例的系统盘,并将其挂载至新创建的临时实例上。

  3. 在临时实例上执行检查与修复操作。

  4. 修复完成后,将系统盘重新挂载至原实例并尝试启动。

  5. 最后,释放临时实例。

支持的操作系统

  • CentOS 7.2 64位,7.3 64位, 7.4 64位,7.5 64位,7.6 64位,7.7 64位,8.0 64位。

  • Debian ,8.9 64位,8.11 64位,9.8 64位,9.9 64位,9.11 64位。

  • OpenSUSE 42.3 64位,15.1 64位

  • SUSE Linux Enterprise Server 12 SP4 64位,12 SP2 64位。

  • Alibaba Cloud Linux 2.1903 64位。

  • Ubuntu 18.04 64位。

重要

Linux启动失败的原因多样,本自救方案可能无法解决所有问题。修复过程会创建临时实例并产生小额费用(通常不足1元人民币)。我们将修改fstab和initrd文件,并在修改前自动备份实例。保留备份需付费,请参见快照计费。确认修复后,可删除备份以节省费用。

操作步骤

  1. 登录系统运维管理控制台。

  2. 单击自动化任务 > 公共任务模板,选择ACS-ECS-RescueUnreachableInstance-Linux。image

  3. 单击创建执行

  4. 单击下一步:设置参数,设置参数。image

  5. 输入以下的参数。

    • unreachableInstanceId:必填,待修复系统盘的实例ID。

    • credentialType:必填,修复完系统盘后,将系统盘挂回原实例时将设置的认证凭证,可选择KeyPairName(密钥对)或Password(自定义密码)方式。

    • credentialValue:必填,认证凭证值,如选择了密钥对方式则输入密钥对名称;如选择了自定义密码方式,则输入密码。

    • imagePrefix:选填,在修复前对待修复实例打镜像,打镜像时设置的镜像名称前缀,默认为OOSRescueBackup-。

    • helperInstanceTypes:选填,将创建临时实例的规格,默认会从已输入的实例规格列表中选择一个单价最低的。

    • 执行使用到的权限的来源:选择当前账号的已有权限。

  6. 单击下一步:确定image

您可在执行详情中查看OOS模板执行情况,通过执行输出的参数rtCommandOutput查看修复脚本执行情况。此执行过程大约需要5-10分钟,请耐心等待。如果执行成功,您的实例应当已被修复并处于正常运行状态。

挂载恢复(可选)

如果模板执行过程中被取消或中断,可能会导致实例的系统盘被卸载后未能重新挂载。此时,实例状态会显示为“无系统盘”。您可以按照以下步骤进行挂载恢复:

  1. 登录ECS控制台,找到需要修复的实例。

  2. 单击该实例的ID进入实例详情页。

  3. 在实例详情页中找到并单击系统盘。

  4. 单击挂载云盘

  5. 页面上会显示源系统盘对应的ID(以d-bp为前缀)。

  6. 复制该系统盘ID并粘贴到目标光盘搜索栏中,尝试搜索该磁盘ID。

    • 如果能搜索到该ID:

      1. 确认选择该磁盘ID。

      2. 设置登录凭证(可以选择密钥对或自定义密码)。如选择自定义密码,请在登录密码和确认密码中输入新密码。

      3. 单击确定,然后单击执行挂载

      4. 若挂载成功,实例状态将变为已停止

    • 如果无法搜索到该ID:

      1. 返回检查之前创建的OOS执行记录,在untilStackReady任务中查找输出参数helperInstanceId。

      2. 复制该参数值(以i-为前缀的实例ID)。

      3. ECS控制台中搜索该实例ID,找到后释放该临时实例。

      4. 释放成功后,重复上述步骤:将以d-bp为前缀的系统盘ID复制并填写到目标光盘搜索栏中,继续执行挂载操作。

实现逻辑

修复/etc/fstab

  • 检查/etc/fstab。如果/etc/fstab已经存在,则备份原文件。

  • 修复/etc/fstab。当/etc/fstab不存在或者解析失败时,创建默认/etc/fstab。

  • 当发现nofail没有设置时,设置nofail,防止启动失败。

  • 当发现fsck选项打开时,将fsck选项关闭。

更新ramdisk

  • 检查/boot里面的ramdisk,如果存在,则备份原文件。

  • 重新构建ramdisk文件。