天天看点

运维编排场景系列---Linux数据盘扩展分区和文件系统

场景介绍

本文讲述如何利用OOS实现扩容linux数据盘后扩展其分区和文件系统。目前支持仅有一块数据盘,扩展已有MBR分区或扩容裸设备文件系统,具体流程请参考帮助文档

扩展分区和文件系统_Linux数据盘

本文具体场景:为一块已分区的数据盘通过OOS进行扩容,以及扩展对应的分区和文件系统。

前提条件:对应ECS实例只挂载了一块只有主分区的数据盘。

运维编排场景系列---Linux数据盘扩展分区和文件系统

执行OOS模板扩容后:

运维编排场景系列---Linux数据盘扩展分区和文件系统

操作流程

请先登陆

运维编排控制台

,如果未开通此服务请放心开通,运维编排是免费的。

创建模板

a.点击我的模板,创建模板

运维编排场景系列---Linux数据盘扩展分区和文件系统

b.选择空白模板,点击选取

运维编排场景系列---Linux数据盘扩展分区和文件系统

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.输入模板名称,点击创建模板 

运维编排场景系列---Linux数据盘扩展分区和文件系统

执行模板

a.创建执行

运维编排场景系列---Linux数据盘扩展分区和文件系统

b.设置参数

运维编排场景系列---Linux数据盘扩展分区和文件系统

c.确认风险并执行

运维编排场景系列---Linux数据盘扩展分区和文件系统

查看结果

运维编排场景系列---Linux数据盘扩展分区和文件系统

系列文章

主题文章

阿里云重磅发布云上自动化利器——运维编排OOS

最佳实践

玩转运维编排服务的权限:Assume Role+Pass Role 阿里云运维编排新功能:一键批量克隆ECS 批量在多台ECS内执行命令

场景系列

运维编排场景系列----更新ECS镜像 运维编排场景系列----给ECS实例自动打TAG 运维编排场景系列----从实例中拷贝文件到OSS 运维编排场景系列----给实例加到SLS机器组 运维编排场景系列----检测MFA功能状态 运维编排场景系列----每日统计多Region实例的运行状态 运维编排场景系列----如何使用jq 运维编排场景系列----分批到机器上运行命令 运维编排场景系列----更新镜像后自动更新伸缩配置镜像 运维编排场景系列----向Linux实例上传文件 运维编排场景系列----运行远端shell脚本 运维编排场景系列----在ECS实例上运行Ansible-playbook 运维编排场景系列----下载JVM堆栈到OSS 运维编排系列场景----将实例的固定公网IP转换为其它新EIP 运维编排场景系列----自动定时升级临时带宽 运维编排场景系列----批量更新云助手客户端 运维编排系列场景----批量释放实例 运维编排场景系列----ECS实例系统快照下载到本地 运维编排场景系列----批量更换系统盘 运维编排场景系列----基于镜像的日常发布 运维编排场景系列----自动创建多个区域同类型存储空间 运维编排场景系列----Autoscaling 通过LifecycleHook在实例启动时安装软件