一、前言
系统有时候不小心搞坏了,导致无法启动,不能SSH是常见现象之一。国内的云普遍提供VNC Console,直接连接到虚拟机的对应端口上,可以发起对虚拟机的物理控制台操作。那么,上次也提到过,AWS不提供这个功能,AWS认为你的虚拟机不应该坏掉。那么如何修复?
传统的手艺就是把磁盘卸载下来,挂到别的机器上,修复好损坏的文件,然后再拿回来装上。从DIY到VMware都适用这个方法。这个方法对AWS依然适用,且没有难度。本文编写是为了强调下2个需要注意的地方以防操作失败。
二、关闭EC2并解除挂载磁盘,并挂载到另外的EC2上。
1、首先确认EC2实例是关着的才能操作。如下截图。

2、去左侧菜单,磁盘卷里边,找到这个EC2实例对应的磁盘。注意看InstanceID可以区分。点击操作,选解除挂载。如下截图。

3、继续把这个磁盘卷挂载到其他EC2实例。如下截图。

4、挂载过程中,AWS控制台会提示,挂载点。默认的/dev/sdf就可以,不用改。如下截图,红色框中。

好了,操作完成。现在该去操作系统内干活了。
三、挂载文件系统并修改损坏的文件
完成了虚拟机级别的操作,该进入操作系统了。
1、到新挂载的虚拟机上,ssh登陆进去。先su成root身份,执行如下命令:
fdisk -l
命令执行结果是会列出当前的硬盘。可以看到/dev/xvda1就是我们要挂载的卷。如下截图。

接下来执行mount命令挂载。
本文的注意点1
这里有个问题需要注意,如果用来修复的EC2实例和损坏的要挂载盘的EC2实例是基于同一个AMI镜像生成的,例如用的AMI是Amazon Linux 2,那么其磁盘是XFS格式,系统会提示UUID冲突。如果是从不同的AMI镜像创建的,那么就不会报告这个错误了。如下截图,红色框是报错信息。

那么,为了跳过这个UUID检测,可以直接加上个参数 –nouuid即可跳过。例如如下命令:
mount -t xfs -o nouuid /dev/xvdf1 /mnt/repair
执行成功后不会有任何报错。但是可以通过mount命令看到挂载成功啦。

现在切换到挂载好的目录上,浏览原来磁盘的文件,并编辑损坏的配置文件,完成修复了。(简单步骤,截图略过)
四、挂载回去,修复完成
修复完成后,再把磁盘umount摘下来。(简单步骤,截图略过)
本文的注意点2
接下来把磁盘挂载回去到原始的虚拟机上。挂载时候,注意,挂载点默认会提示为/dev/sdf,这不是原来系统盘初始的挂载点。
往回挂载时候,要填写为/dev/xvda的,这样是原位挂载。如下截图。

好了。现在开机测试,系统会正常启动。(简单步骤,截图略过)
至此修复完成。