自助救治损伤的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),是阿里云官方提供的免费的自动化运维平台,通过简单的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位。
Aliyun Linux 2.1903 64位。
Ubuntu 18.04 64位。
特别提示
Linux系统启动失败的原因众多,此自救方案不能保证修复所有的系统启动失败的实例。
修复过程中,会创建临时实例并因此产生一定费用(一般小于1元RMB)。
此自救方案会修改系统的fstab和initrd文件,在修改之前,会自动对待修复实例打镜像备份,以方便您利用备份镜像恢复数据。保有镜像是收费的(参见)快照计费,在您确认实例修复成功之后,您可考虑删除镜像。
准备账号和权限
如果您使用主账号,可以跳过此节,直接查看使用步骤。
如果您使用RAM子账号或者角色,请确认该子账号或者角色拥有OOS、ROS、ECS、VPC的适当权限。有如下两种方式:
使用步骤
首先登录到运维编排控制台。选择问题实例所在的region地域。
单击公共模版,选择ACS-ECS-RescueUnreachableInstance-Linux。
单击创建执行。
单击下一步,设置参数。
输入以下的参数。
unreachableInstanceId: 必填,待修复系统盘的实例ID。
credentialType: 必填,修复完系统盘后,将系统盘挂回原实例时将设置的认证凭证,可选择KeyPairName(密钥对)或Password(自定义密码)方式。
credentialValue: 必填,认证凭证值,如选择了密钥对方式则输入密钥对名称;如选择了自定义密码方式,则输入密码。
imagePrefix: 选填,在修复前对待修复实例打镜像,打镜像时设置的镜像名称前缀,默认为OOSRescueBackup-。
helperInstanceTypes: 选填,将创建临时实例的规格,默认会从已输入的实例规格列表中选择一个单价最低的。
执行使用到的权限的来源:选择当前账号的已有权限。
单击下一步,确认 ,单击创建执行 。
您可在执行详情中查看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 文件。