隔离损坏的本地盘后,ECS实例不会变更所宿物理机。本文步骤仅适用于发生了本地盘实例系统事件的ECS实例,介绍了如何使用阿里云CLI调用ECS API隔离损坏的本地盘。您也可以更新SDK或者在阿里云API Explorer中调用相关API完成操作。

前提条件

请确保您已经为ECS实例安装了阿里云CLI,在不同操作系统中安装CLI的方式请参见:

背景信息

根据事件阶段的变化,隔离坏盘选项对应的实例系统事件代码会发生变化,更多详情,请参见本地盘实例系统事件概述
  • 隔离坏盘前:SystemMaintenance.IsolateErrorDisk(按实例配置不同,如需要重启,则为SystemMaintenance.RebootAndIsolateErrorDisk
  • 隔离坏盘后,重新初始化新盘前:SystemMaintenance.ReInitErrorDisk(按实例配置不同,如需要重启,则为SystemMaintenance.RebootAndReInitErrorDisk
    注意 重新初始化数据盘后,被隔离的本地盘上的数据会被清空。

操作步骤

  1. 调用DescribeInstanceHistoryEvents查询指定地域下Inquiring状态的系统事件,并记录返回的EventIdDiskIdDevice取值。
    在阿里云CLI中执行以下命令。
    aliyun ecs DescribeInstanceHistoryEvents \
    --RegionId <TheRegionId> \
    --InstanceEventCycleStatus.1 Inquiring
    以下为JSON格式的返回示例。
    {
      "InstanceSystemEventSet": {
        "InstanceSystemEventType": [
          {
            "InstanceId": "i-2ze3tphuqvc93ci****3",
            "EventId": "e-2ze9y****wtqcvai68rl",
            "EventType": {
              "Code": 3,
              "Name": "SystemMaintenance.IsolateErrorDisk"
            },
            "EventCycleStatus": {
              "Code": 28,
              "Name": "Inquiring"
            },
            "EventPublishTime": "2017-11-30T06:32:31Z",
            "ExtendedAttribute" : {
              "DiskId": "d-disk1",
              "Device": "/dev/xvda"
            }
          }
        ]
      },
      "PageSize": 10,
      "PageNumber": 1,
      "TotalCount": 1,
      "RequestId": "02EA76D3-5A2A-44EB-****-8901881D8707"
    }
  2. 登录ECS实例,做隔离前的准备。
    1. 远程连接ECS实例。连接方式请参见连接方式概述
    2. 可选:对本地盘设置应用层读写隔离。
    3. 如果是Linux系统ECS实例,在/etc/fstab配置文件中为对应本地盘加入nofail参数。
      /dev/vdd /mnt/vdd ext4 defaults,barrier=0,nofail 0 0
      参数设置 说明
      /dev/vdd 本地盘设备名,DescribeInstanceHistoryEvents返回的Device取值。
      /mnt/vdd 本地盘挂载点,可通过mount | grep "/dev/vdd"命令查询。
      ext4 文件系统类型,可通过blkid /dev/vdd1命令查询。
      barrier=0 挂载选项,在文件系统中禁用barrier。
      nofail 本地盘出现在文件系统中但实际缺失时,不会中断ECS实例的启动流程。
    4. 取消挂载本地盘。
      umount /dev/vdd
      说明 如果不进行取消挂载操作,在坏盘维修完成并恢复隔离后,该本地盘的对应设备名会发生变化,可能导致应用读写错误的磁盘。
  3. 调用AcceptInquiredSystemEvent响应系统事件。
    在阿里云CLI中执行以下命令。
    aliyun ecs AcceptInquiredSystemEvent --RegionId <TheRegionId> --EventId <TheEventId>
  4. 决定是否重启实例。
    • 事件代码为SystemMaintenance.IsolateErrorDisk时:
      • 只返回了RequestId,则无需重启实例。
      • 返回了code=SwitchToOffline.OnlineIsolateFail,则需要重启实例。
    • 事件代码为SystemMaintenance.RebootAndIsolateErrorDisk时:调用AcceptInquiredSystemEvent后,您需要重启实例。
    如果需要重启,在阿里云CLI中执行以下命令。
    aliyun ecs RebootInstance --InstanceId <TheInstanceId>
    说明 重启实例后,为方便后续操作,被隔离的受损本地盘暂时变为1 MiB的Dummy硬盘。您需要在应用层持续隔离受损本地盘的读写操作和/etc/fstab文件中的nofail设置。
  5. 等待阿里云在所宿物理机上完成更换损坏的本地盘并发布SystemMaintenance.ReInitErrorDiskSystemMaintenance.RebootAndReInitErrorDisk事件,时长为一到五天不等。
  6. 再次调用AcceptInquiredSystemEvent响应系统事件,本地盘会进入重新初始化状态。
    在阿里云CLI中执行以下命令。
    aliyun ecs AcceptInquiredSystemEvent --RegionId <TheRegionId> --EventId <TheEventId>
  7. 决定是否重启实例。
    • 事件代码为SystemMaintenance.ReinitErrorDisk时:
      • 只返回了RequestId,则无需重启实例。
      • 返回了code=SwitchToOffline.OnlineReInitFail,则需要重启实例。
    • 事件代码为SystemMaintenance.RebootAndReinitErrorDisk时:调用AcceptInquiredSystemEvent后,您需要重启实例。
    如果需要重启,在阿里云CLI中执行以下命令。
    aliyun ecs RebootInstance --InstanceId <TheInstanceId>

后续步骤

隔离坏盘后,请您检查ECS实例和本地盘状态。此时被更换的本地盘容量恢复为原始容量,您可以格式化数据盘。详细步骤请参见Windows格式化数据盘Linux格式化数据盘