如何恢复系统盘数据?

当您因为文件损坏无法通过SSH或VNC方式启动ECS实例时,您可以卸载该实例的系统盘,并作为数据盘挂载到其他ECS实例进行修复。

背景信息

本文中A实例指需要卸载系统盘的异常ECS实例,B实例指其他可以正常远程登录的ECS实例。

步骤一:创建快照

建议您为A实例的系统盘创建快照,提高容错能力。创建快照的前提条件和背景信息,请参见创建一个云盘快照

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择实例与镜像 > 实例

  3. 在顶部菜单栏左上角处,选择地域。

  4. 实例页面,找到A实例,单击A实例的实例ID。

  5. 实例详情页面,单击云盘页签。

  6. 找到待创建快照的云盘,在操作列单击创建快照

    创建云盘快照页面,根据界面参数设置快照参数。参数说明,请参见创建一个云盘快照

    创建快照
  7. 实例详情页面,单击快照页签,查看快照任务。

    当快照任务进度为100%时,表示快照创建成功。

步骤二:卸载A实例的系统盘

快照创建完成后,请停止A实例,然后卸载A实例的系统盘,操作步骤如下:

重要

卸载系统盘的前提条件和背景信息请参见卸载或挂载系统盘

  1. 登录ECS管理控制台

  2. 停止A实例。

    具体操作,请参见停止实例

  3. 在A实例的实例详情页面,单击云盘页签。

  4. 找到目标云盘,在操作列中选择更多(公共云) > 卸载

    说明

    如果您在弹窗中取消勾选云盘随实例释放,则源实例被释放后,系统盘将作为数据盘被保留下来,以按量付费方式计费。

  5. 在弹出的对话框中,单击确定卸载

  6. 查看A实例系统盘卸载结果:

    • 返回实例列表页面,ECS实例显示无系统盘,并被绑定了一个标签,标签的值为云盘ID。

      实例列表页面(无系统盘)
    • 在左侧导航栏,单击存储与快照 > 云盘,然后选择云盘ID并在右侧搜索框输入云盘ID,并单击搜索图标图标。

      此时A实例的系统盘处于待挂载状态。

      待挂载系统盘
    • A实例的系统盘被转换为数据盘,并被绑定了三个标签,计费方式保持不变。

    绑定的实例标签和云盘标签帮助您快速查找资源,其格式参见下表:

    标签键

    标签键说明

    标签值

    acs:ecs:sourceSystemDiskId

    实例的系统盘

    云盘ID

    acs:ecs:sourceInstanceId

    系统盘所属的实例

    实例ID

    acs:ecs:diskDeleteProtection

    云盘已开启释放保护,不支持手动释放

    true

    acs:ecs:diskPayType

    云盘计费方式

    和卸载前保持一致

    • Prepaid:包年包月

    • AfterPay:按量付费

步骤三:挂载A实例的系统盘到B实例作为数据盘

卸载A实例的系统盘后,需要挂载A实例的系统盘到B实例作为数据盘,操作步骤如下:

重要

挂载数据盘的前提条件和背景信息,请参见挂载数据盘

  1. 登录ECS管理控制台

  2. 在B实例的实例详情页面,单击云盘页签。

  3. 在云盘页面,单击挂载云盘Dingtalk_20210428172805.jpg

  4. 在弹出的对话框中,完成以下设置。

    1. 选择目标云盘并设置云盘相关释放行为:

      挂载云盘到B实例
    2. 单击下一步,然后单击开始执行

      等待一段时间,当该云盘状态变为使用中时,表示您已经成功挂载云盘。

    3. 如果B实例为Linux操作系统,则需要执行本操作查看新挂载数据盘的UUID。

      如果新挂载数据盘的UUID与B实例原有云盘UUID相同,则可能会因为云盘UUID冲突导致数据盘挂载失败,此时,建议更换实例重新挂载数据盘。查看云盘UUID的具体操作,请参见修改云盘的UUID中的blkid命令说明。

      说明

      因为A实例数据盘挂载到B实例是为了临时修复A实例的系统盘,修复完毕后,该云盘需要挂载回A实例,所以不能修改A实例系统盘的UUID。

  5. 通过SSH或VNC登录到B实例。

    具体操作,请参见连接方式概述

  6. 执行以下命令,将A实例的系统盘作为数据盘挂载到B实例。

    mount <数据盘分区> <挂载点>
    • <数据盘分区>:在B实例上执行lsblkblkid命令,可以发现相比挂载云盘前新增了A实例系统盘中的分区和文件系统。例如新增的/dev/vdb1是A实例系统盘中的根文件系统,则数据盘分区可设置为/dev/vdb1。

      说明

      A实例的系统盘作为数据盘被挂载到B实例后,B实例将读取该云盘已有的分区,并将该云盘排在B实例已有的云盘之后作为数据盘挂载到B实例。

    • <挂载点>:您需要准备一个目录作为A实例系统盘中的文件系统的挂载点,可以设置为系统中已有的目录(例如:/mnt),也可以设置为在/tmp或其他临时目录下新建的目录。

      重要

      该目录应当是空目录,并且没有其他的文件系统挂载到该目录上。

    以数据盘分区为/dev/vdb1,挂载点为/mnt为例,命令如下:

    mount /dev/vdb1 /mnt

步骤四:进行对应的操作

您可以在B实例中进行对应操作来修复数据盘,修复完毕,再执行exit命令退出chroot的环境,操作步骤如下:

  1. 通过SSH或VNC登录到B实例。

    具体操作,请参见连接方式概述

  2. 执行以下命令,将根目录切换到/mnt目录。

    chroot /mnt
    说明

    chroot命令执行失败,通常是系统盘的Bash环境已经被破坏。

  3. 在B实例上的chroot环境中,对数据盘中的内容进行对应的操作以修复其中存在的问题。

    具体的问题现象、问题原因和修复方法请参照对应的修复文档。

  4. 执行exit命令,退出chroot的环境。

步骤五:恢复A实例的系统盘

如果您在B实例上完成对应的操作后想要恢复A实例的系统盘,您可以先在B实例上卸载数据盘(即A实例的系统盘),然后将该云盘挂载回A实例,操作步骤如下:

  1. 从B实例上卸载数据盘(该云盘为A实例的系统盘)。

    具体操作,请参见卸载数据盘

  2. 挂载A实例的系统盘到A实例。

    具体操作,请参见作为系统盘挂载