阿里云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(https://www.aliyun.com/product/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 9.6 64位,9.8 64位,9.9 64位,9.11 64位,8.9 64位,8.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 16.04 64位,18.04 64位,
特别提示
• Linux系统启动失败的原因众多,此自救方案不能保证修复所有的系统启动失败的实例。
• 修复过程中,会创建临时实例并因此产生一定费用(一般小于1元RMB)。
• 此自救方案会修改系统的fstab和initrd文件,在修改之前,会自动对待修复实例打镜像备份,以方便您利用备份镜像恢复数据。保有镜像是收费的(参见快照的收费标准),在您确认实例修复成功之后,您可考虑删除镜像。
准备账号和权限
如果您使用主账号,可以跳过此节,直接查看使用步骤。
如果您使用RAM子账号或者角色,请确认该子账号或者角色拥有OOS、ROS、ECS、VPC的适当权限。有如下两种方式:
1,您可以给子账号或者角色授予系统权限: AliyunOOSFullAccess ,AliyunROSFullAccess , AliyunECSFullAccess , AliyunVPCFullAccess 的权限。详情参见RAM帮助文档https://help.aliyun.com/document_detail/93732.html。
2,您也可以新建自定义策略,然后授权给子账户。参考的策略内容为
https://oos-debug.oss-cn-hangzhou.aliyuncs.com/rt_policy.json
操作步骤参见阿里云RAM的帮助文档
https://help.aliyun.com/document_detail/93733.html。
使用步骤
首先登录到运维编排控制台 。选择问题实例所在的region地域。
单击我的模版>创建模版,并选取空白模版。
单击YAML,将ACS-ECS-RescueUnreachableInstance-Linux中模版内容粘贴到空白编辑栏,输入模版名称,单击创建模版。
在我的模版中,找到刚创建成功的模版,单击创建执行。
单击 下一步,设置参数 。
输入以下的参数。
• unreachableInstanceId: 必填,待修复系统盘的实例ID。
• credentialType: 必填,修复完系统盘后,将系统盘挂回原实例时将设置的认证凭证,可选择KeyPairName(密钥对)或Password(自定义密码)方式。
• credentialValue: 必填,认证凭证值,如选择了密钥对方式则输入密钥对名称;如选择了自定义密码方式,则输入密码。
• imagePrefix: 选填,在修复前对待修复实例打镜像,打镜像时设置的镜像名称前缀,默认为OOSRescueBackup-。
• helperInstanceType: 选填,将创建临时实例的规格,默认为ecs.t5-lc1m2.large。
• 执行使用到的权限的来源:选择当前账号的已有权限。
单击 下一步,确认 ,单击 创建执行 。
您可在执行详情中查看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 文件。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
云存储网关使用Windows权限控制管理数据访问权限
前言 在文章云存储网关结合Active Directory服务搭建Windows文件共享服务器中,笔者已经对如何利用云存储网关结合AD服务搭建文件共享服务器做了一个初步的介绍,包括云存储网关的一些基本操作,AD服务相关的配置,以及Windows客户端对权限的验证等。文章也提到了前文中的方法对某个用户的权限配置是在共享级别的粒度控制,也就是说单个用户对共享里面所有的文件和文件夹都具有同样的权限。如果想要让同一个用户对不同的文件夹拥有不同的权限,就需要用到云存储网关Windows权限控制相关的功能。笔者将在本篇文章中对云存储网关的这一功能做一下详细的介绍,并展示说明一下相关的配置实践及注意事项。 Windows权限控制功能是云存储网关在1.1.0版本推出的新特性,旨在给用户提供更加灵活的用户权限配置,满足不同用户的需求,具体来说它能够允许用户进行精细到每个文件或者文件夹粒度的权限控制,能够有效的保证数据安全性。对云存储网关的SMB共享而言,现在能够提供多种权限配置的方法供用户根据自身情况做选择,这里我们也做一个简单的总结,具体如下: 文件共享目录所有的人可见,这种情况创建完共享目录之后不需...
- 下一篇
从探索到落地,手淘引入 Swift “历险记”
作者|姜沂(倾寒) 出品|阿里巴巴新零售淘系技术部 背景 手淘 iOS APP 在 2019 年经过了约一年的时间,完成了 Swift 语言从调研到基础设施建设再到顺利落地业务。 手淘作为一个航母级别的 APP, 组织结构,工程结构,都是普通 APP 难以企及的,在手淘中实践犹如在沼泽地艰难探索,期间和集团内众多 Swift 爱好者,中间件负责人,一起努力探索出一条较为明朗的 Swift 落地指南。 时间轴 Swift 预研 Swift 语言在 2018 年就已经宣布 ABI 稳定是最重要的目标,虽然早在 Swift 4.x 时代, 语法就已基本不变,但受限于手淘是一个航母级 APP, 工程交付以二进制组件化为主,ABI 未稳定的 Swift 只能固定 Swift Toolchain 的版本,加之会有将近 3MB 的包大小压力,彼时都不适合引
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Hadoop3单机部署,实现最简伪集群
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- Linux系统CentOS6、CentOS7手动修改IP地址