文档

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

更新时间:

适用的症状和原因

在某些情况下,Linux操作系统会出现启动异常,此时,在阿里云ECS控制台显示的实例状态可能是运行中,但实例内的应用不可访问,实例内的网络不可达,既无法ping通,也无法通过workbench或者ssh建立连接。如果您在阿里云ECS控制台通过vnc连接上去,可能会看到如下的错误提示:

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文件被损坏。

  • 其他原因造成的文件系统损害。在上述情况下,您可自行修复损伤的Linux实例。

自救方案概览

阿里云的系统运维管理 OOS(CloudOps Orchestration Service)(OOS),是阿里云官方提供的免费的自动化运维平台,通过简单的YAML格式的模板,提供自动化任务的管理与执行。

本文的自救方案,包含了一个经过阿里云官方测试的OOS模板,从而提供了一键修复的自动化方案。具体使用办法参见后面的使用步骤。

此自救方案会先对问题实例打镜像备份,然后卸载问题实例的系统盘,挂载到一个新创建的临时实例上,执行检查和修复动作,在修复完成后,重新把系统盘挂载回原实例,并且尝试启动修复后的实例,最后,释放临时实例。

支持的操作系统

  • 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元RMB)。

  • 此自救方案会修改系统的fstab和initrd文件,在修改之前,会自动对待修复实例打镜像备份,以方便您利用备份镜像恢复数据。保有镜像是收费的(参见)快照计费,在您确认实例修复成功之后,您可考虑删除镜像。

准备账号和权限

如果您使用主账号,可以跳过此节,直接查看使用步骤。

如果您使用RAM子账号或者角色,请确认该子账号或者角色拥有OOS、ROS、ECS、VPC的适当权限。有如下两种方式:

  1. 您可以给子账号或者角色授予系统权限: AliyunOOSFullAccess ,AliyunROSFullAccess , AliyunECSFullAccess , AliyunVPCFullAccess 的权限。详情参见RAM帮助文档权限策略概览

  2. 您也可以新建自定义策略,然后授权给子账户。 参考策略内容。 。

使用步骤

  1. 首先登录到系统运维管理 OOS(CloudOps Orchestration Service)控制台。选择问题实例所在的region地域。

  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分钟,请耐心等待。如果执行成功,您的实例应该已经被修复并且处于正常运行中了。

提醒

如果模板执行过程中被取消,或者模板执行中断,可能会造成实例的系统盘被卸载后没有挂载回去,此时,该实例状态会显示无系统盘,您可按如下步骤还原挂载,首先登录到ECS控制台,找到您修复的实例, 单击该实例的ID访问实例详情,单击本实例磁盘,单击挂载云盘,此时在页面上可以查看到源系统盘对应的ID,将此以d-bp为前缀的系统盘ID复制并填写到目标光盘搜索栏中,尝试搜索该磁盘ID,根据搜索结果执行如下步骤。

  • 如果可以搜索到该ID,确认选择该磁盘ID, 登录凭证可选择密钥对或自定义密码,该凭证将在您启动实例后通过root用户登录时使用。比如此处登录凭证选择的是自定义密码,则请在登录密码和确认密码中填写您要设置的密码,单击确定,单击执行挂载,若挂载成功则可以看到实例状态转变为已停止。

  • 如果无法搜索到该ID,返回查看刚刚创建的OOS执行,在untilStackReady任务中可找到输出参数helperInstanceId,复制对应参数值以i-为前缀的实例iD,然后在ECS控制台中搜索该实例id,找到后释放该临时实例,释放成功后,回到上述步骤:将以d-bp为前缀的系统盘ID复制并填写到目标光盘搜索栏中,并按步骤继续挂载系统盘。

自救方案内部的实现逻辑

修复/etc/fstab

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

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

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

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

更新ramdisk

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

  • 重新构建 ramdisk 文件。

  • 本页导读 (0)
文档反馈