场景介绍
本文讲述如何利用OOS实现扩容linux数据盘后扩展其分区和文件系统。目前支持仅有一块数据盘,扩展已有MBR分区或扩容裸设备文件系统,具体流程请参考帮助文档
扩展分区和文件系统_Linux数据盘。
本文具体场景:为一块已分区的数据盘通过OOS进行扩容,以及扩展对应的分区和文件系统。
前提条件:对应ECS实例只挂载了一块只有主分区的数据盘。
执行OOS模板扩容后:
操作流程
请先登陆
运维编排控制台,如果未开通此服务请放心开通,运维编排是免费的。
创建模板
a.点击我的模板,创建模板
b.选择空白模板,点击选取
c.选取YAML栏,复制粘贴以下模板
FormatVersion: OOS-2019-06-01
Description:
en: Resize disk and expand file system.
zh-cn: 扩容数据盘(Linux)。
Parameters:
instanceId:
Description:
en: The id of instance.
zh-cn: 实例ID。
Type: String
diskId:
Description:
en: The id of disk.
zh-cn: 磁盘ID。
Type: String
newSize:
Description:
en: The size of disk.
zh-cn: 磁盘大小。
Type: Number
MinValue: 20
MaxValue: 1999
action:
Description: ''
Type: String
AllowedValues:
- 扩展已有MBR分区
- 扩容裸设备文件系统
OOSAssumeRole:
Description: The RAM role to be assumed by OOS.
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: startInstance
Action: ACS::ECS::StartInstance
Description:
en: Starts the ECS instances.
zh-cn: 启动实例。
Properties:
instanceId: '{{ instanceId }}'
- Name: checkInstanceOSType
Action: ACS::CheckFor
Description:
en: Get ECS instance zone id.
zh-cn: 获取实例的ZoneId。
Properties:
Service: ECS
API: DescribeInstances
Parameters:
InstanceIds:
- '{{ instanceId }}'
DesiredValues:
- linux
PropertySelector: Instances.Instance[].OSType
- Name: createSnapshot
Action: 'ACS::ECS::CreateSnapshot'
Description:
en: Create a snapshot for a cloud disk.
zh-cn: 为一块云盘创建一份快照。
Properties:
diskId: '{{ diskId }}'
Outputs:
snapshotId:
Type: String
ValueSelector: snapshotId
- Name: resizeDisk
Action: ACS::ECS::ResizeDisk
OnError: deleteSnapshot
Description: Resize disk.
Properties:
instanceId: '{{ instanceId }}'
diskId: '{{ diskId }}'
newSize: '{{ newSize }}'
- Name: choseResizeType
Action: ACS::Choice
Description: Choose next task by CloudAssistant status.
Properties:
DefaultTask: ExpandExistedPartition
Choices:
- When:
'Fn::Equals':
- '扩容裸设备文件系统'
- '{{ action }}'
NextTask: ExpandNewPartition
- Name: ExpandExistedPartition
Action: 'ACS::ECS::RunCommand'
Description:
en: Run cloud assistant command.
zh-cn: 执行云助手命令。
OnSuccess: deleteSnapshot
OnError: resetDisk
Properties:
commandContent: |-
echo '#!/bin/bash' >> resizedisk.sh;
echo 'umount /dev/vdb1' >> resizedisk.sh;
echo 'echo "d' >> resizedisk.sh;
echo 'w' >> resizedisk.sh;
echo '" | fdisk -u /dev/vdb' >> resizedisk.sh;
echo 'echo "n' >> resizedisk.sh;
echo 'p' >> resizedisk.sh;
echo 1 >> resizedisk.sh;
echo -e '\n' >> resizedisk.sh;
echo -e '\n' >> resizedisk.sh;
echo 'w' >> resizedisk.sh;
echo '" | fdisk -u /dev/vdb' >> resizedisk.sh;
echo 'partx -u /dev/vdb' >> resizedisk.sh;
echo 'sleep 10s' >> resizedisk.sh
echo 'resize2fs /dev/vdb1' >> resizedisk.sh;
echo 'mount /dev/vdb1 /mnt' >> resizedisk.sh;
echo 'df -h' >> resizedisk.sh;
/bin/bash resizedisk.sh
instanceId: '{{ instanceId }}'
commandType: RunShellScript
Outputs:
commandOutput:
Type: String
ValueSelector: invocationOutput
- Name: ExpandNewPartition
Action: 'ACS::ECS::RunCommand'
Description:
en: Run cloud assistant command.
zh-cn: 执行云助手命令。
OnSuccess: deleteSnapshot
OnError: resetDisk
Properties:
commandContent: |-
resize2fs /dev/vdb
df -h
instanceId: '{{ instanceId }}'
commandType: RunShellScript
Outputs:
commandOutput:
Type: String
ValueSelector: invocationOutput
- Name: resetDisk
Action: ACS::ECS::ResetDisk
Description:
en: Resets disk by snapshot.
zh-cn: 回滚磁盘。
Properties:
instanceId: '{{ instanceId }}'
diskId: '{{ diskId }}'
snapshotId: '{{ createSnapshot.snapshotId }}'
- Name: deleteSnapshot
Action: 'ACS::ExecuteAPI'
Description:
en: Delete the specified snapshot.
zh-cn: 删除指定的快照。
Properties:
Service: ECS
API: DeleteSnapshot
Parameters:
SnapshotId: '{{ createSnapshot.snapshotId }}'
Outputs:
commandOutput:
Type: List
Value:
'Fn::If':
- 'Fn::Equals':
- '扩容裸设备文件系统'
- '{{ action }}'
- '{{ ExpandNewPartition.commandOutput }}'
- '{{ ExpandExistedPartition.commandOutput }}'
d.输入模板名称,点击创建模板
执行模板
a.创建执行
b.设置参数
c.确认风险并执行