隔离损坏的本地盘后,ECS实例不会变更所宿物理机。本文步骤仅适用于发生了本地盘实例系统事件的ECS实例,介绍了如何使用阿里云CLI调用ECS API隔离损坏的本地盘。您也可以更新SDK或者在阿里云API
Explorer中调用相关API完成操作。
前提条件
请确保您已经为ECS实例安装了阿里云CLI,在不同操作系统中安装CLI的方式请参见:
背景信息
根据事件阶段的变化,隔离坏盘选项对应的实例系统事件代码会发生变化,更多详情,请参见本地盘实例系统事件概述。
- 隔离坏盘前:
SystemMaintenance.IsolateErrorDisk
(按实例配置不同,如需要重启,则为SystemMaintenance.RebootAndIsolateErrorDisk
)
- 隔离坏盘后,重新初始化新盘前:
SystemMaintenance.ReInitErrorDisk
(按实例配置不同,如需要重启,则为SystemMaintenance.RebootAndReInitErrorDisk
)
注意 重新初始化数据盘后,被隔离的本地盘上的数据会被清空。
操作步骤
- 调用DescribeInstanceHistoryEvents查询指定地域下Inquiring状态的系统事件,并记录返回的EventId、DiskId和Device取值。
在阿里云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"
}
- 登录ECS实例,做隔离前的准备。
- 远程连接ECS实例。连接方式请参见连接方式概述。
- 可选:对本地盘设置应用层读写隔离。
- 如果是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实例的启动流程。 |
- 取消挂载本地盘。
umount /dev/vdd
注意 如果不进行取消挂载操作,在坏盘维修完成并恢复隔离后,该本地盘的对应设备名会发生变化,可能导致应用读写错误的磁盘。
- 调用AcceptInquiredSystemEvent响应系统事件。
在阿里云CLI中执行以下命令。
aliyun ecs AcceptInquiredSystemEvent --RegionId <TheRegionId> --EventId <TheEventId>
- 决定是否重启实例。
- 事件代码为
SystemMaintenance.IsolateErrorDisk
时:
- 只返回了RequestId,则无需重启实例。
- 返回了
code=SwitchToOffline.OnlineIsolateFail
,则需要重启实例。
- 事件代码为
SystemMaintenance.RebootAndIsolateErrorDisk
时:调用AcceptInquiredSystemEvent后,您需要重启实例。
如果需要重启,在阿里云CLI中执行以下命令。
aliyun ecs RebootInstance --InstanceId <TheInstanceId>
说明 重启实例后,为方便后续操作,被隔离的受损本地盘暂时变为1 MiB的Dummy硬盘。您需要在应用层持续隔离受损本地盘的读写操作和/etc/fstab文件中的nofail设置。
- 等待阿里云在所宿物理机上完成更换损坏的本地盘并发布
SystemMaintenance.ReInitErrorDisk
或SystemMaintenance.RebootAndReInitErrorDisk
事件,通常在五个工作日内完成。
- 再次调用AcceptInquiredSystemEvent响应系统事件,本地盘会进入重新初始化状态。
在阿里云CLI中执行以下命令。
aliyun ecs AcceptInquiredSystemEvent --RegionId <TheRegionId> --EventId <TheEventId>
- 决定是否重启实例。
- 事件代码为
SystemMaintenance.ReinitErrorDisk
时:
- 只返回了RequestId,则无需重启实例。
- 返回了
code=SwitchToOffline.OnlineReInitFail
,则需要重启实例。
- 事件代码为
SystemMaintenance.RebootAndReinitErrorDisk
时:调用AcceptInquiredSystemEvent后,您需要重启实例。
如果需要重启,在阿里云CLI中执行以下命令。
aliyun ecs RebootInstance --InstanceId <TheInstanceId>
后续步骤
隔离坏盘后,请您检查ECS实例和本地盘状态。此时被更换的本地盘容量恢复为原始容量,您可以格式化数据盘。详细步骤请参见Windows格式化数据盘或Linux格式化数据盘。