为ROS创建的资源自动挂载数据盘

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 通过脚本实现自有镜像自动挂在在阿里云申请的数据盘

为ROS创建的资源自动挂载数据盘

通过ROS可以方便创建,管理资源。例如自动挂载数据盘,如果是通过阿里云的官方镜像,使用ROS创建ECS资源,UserData可以很容易的帮你完成这一步,详细内容可以参考这篇文章;但是如果你使用自己制作的镜像,而且自己制作的镜像不支持UserData功能怎么办呢,这篇文章帮你解决你的问题。

要完成自有镜像自动挂载数据盘,只需要三步:

1.制作镜像前,把下面的这个脚本拷贝到你将要制作镜像的ECS机器上,例如:/usr/local/bin/mount_disks下面。

 #!/bin/sh
set -e

logs=/root/mount_logs
mount_point_prefix="/data"

part_disk () {
    raw_disk=$1
    echo "Create partation table for $raw_disk" >> $logs
    fdisk -S 56 $raw_disk <<ESXU
n
p
1


w
ESXU
}

format_disk()
{
    local disk=$1
    mkfs.ext4 $disk
    if [ "$?" = "0" ];then
        echo "${disk} is formated!" >> $logs
    else
        echo "Fail to format ${disk}" >> $logs
    fi
}

mount_disk()
{
    local disk=$1
    local mount_point=$2

    if [ ! -d $mount_point ]; then
        mkdir $mount_point
    fi
    result=`awk -v disk=$disk 'BEGIN {count=0;} {if ($1 == disk) {count=count+1;}} END{print count;}' /etc/fstab`
    if [ $result -eq 0 ]; then
        echo "$disk         $mount_point       ext4       defaults        0 0" >> /etc/fstab
    fi
    mount $disk $mount_point
    if [ $? -ne 0 ]; then
        echo "Fail to mount $disk on $mount_point" >> $logs
    fi
    chmod -R 777 $mount_point
    echo "$disk is mounted to ${mount_point}!" >> $logs
}

handle_raw_disk()
{
    local raw_disks="`fdisk -l 2>&1 | grep "doesn't contain" | awk -F" " '{print $2}'`"
    local disk=""
    local mount_point=""

    echo "handle_raw_disk raw_disks $raw_disks" >> $logs
    for raw_disk in $raw_disks
    do
        part_disk $raw_disk

        disk=${raw_disk}1
        format_disk $disk

        mount_point="${mount_point_prefix}_`echo $raw_disk | awk -F '/' '{print $3}'`1"
        mount_disk $disk $mount_point
    done
}

handle_data_disk()
{
    local all_disks=""
    local all_mounted_disks=""
    local need_mounted_disks=""
    local disk=""
    local mount_point=""

    for disk_name in "xvd" "vd"
    do
        all_disks="`cat /proc/partitions | grep -E "${disk_name}[a-z].[0-9]*" | awk -F " " '{print $4}'` $all_disks"
        all_mounted_disks="`df -h | grep ${disk_name}* | awk -F " " '{print $1}' | awk -F '/' '{print $3}'` $all_mounted_disks"
    done

    echo "handle_data_disk all_disks $all_disks" >> $logs
    echo "handle_data_disk all_mounted_disks $all_mounted_disks" >> $logs
    for raw_disk in $all_disks
    do
        local found='false'
        for disk in $all_mounted_disks
        do
             if [ "$disk" = "$raw_disk" ]; then
                 found='true'
                 break
             fi
        done

        if [ "$found" = "false" ]; then
            full_name="`fdisk -l | grep $raw_disk | awk -F ' ' '{print $1}'`"
            need_mounted_disks="$need_mounted_disks $full_name"
        fi
    done

    echo "handle_data_disk need_mounted_disks $need_mounted_disks" >> $logs
    for disk in $need_mounted_disks
    do
        mount_point="${mount_point_prefix}_`echo $disk | awk -F '/' '{print $3}'`"
        mount_disk $disk $mount_point
    done
}

if [ ! -f $logs ]; then
    touch $logs
fi

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"


do_start() {
    echo "================SATRT=================" >> $logs
    echo "`date` try to mount data disks..." >> $logs
    handle_raw_disk
    handle_data_disk
    echo "=================END==================" >> $logs
    return 0
}


case "$1" in
    start)
        do_start
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

2.修改/etc/rc.local,加入下面这句:

   /usr/lcoal/bin/mount_disks start

这一句意思是在镜像启动的时候执行mount_disks脚本去挂载数据盘。

3.然后制作自己的镜像

4.使用ROS模版创建ECS时,引用自己制作的镜像,并给ECS创建数据盘。当ROS创建成功后,数据盘就可以被自动挂载。具体的模版可以参考这里

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
5月前
|
存储 Serverless 对象存储
通过计算巢轻松部署ROS自定义资源
阿里云资源编排服务ROS可以帮助您简化云计算资源的管理。 通过编写和使用模板,ROS可以实现自动化部署和运维。ROS不仅能够编排阿里云资源,还支持自定义资源。 使用自定义资源,您可以在模板中编写自定义配置逻辑。 计算巢“ROS自定义资源”服务可以把GitHub代码仓库(Python语言)构建和部署为ROS自定义资源,并输出ROS模块,方便后续使用。
140 1
|
6月前
|
弹性计算 运维 持续交付
基于资源编排服务(ROS)实现存量资源的IaC化
如果您需要一种简单而有效的方法来管理大量云资源并实现自动化部署,推荐使用阿里云的资源编排服务ROS(Resource Orchestration Service)。ROS能够将存量资源转化为IaC(基础设施即代码),通过资源场景创建、模版生成和资源栈导入等功能,实现资源的统一管理和自动化部署。这不仅提高了资源管理的效率,还降低了成本。如果您想了解如何更轻松地管理云资源并加速部署流程,ROS是一个值得深入了解的工具。
79 1
|
7月前
|
运维
使用资源编排为云资源批量绑定标签
本场景介绍利用资源编排服务ROS(Resource Orchestration Service)在资源栈中创建资源,并同时为资源绑定标签,提升运维效率。
100 0
|
弹性计算 开发者
ROS-更新资源栈|学习笔记
快速学习 ROS-更新资源栈
81 0
ROS-更新资源栈|学习笔记
|
弹性计算 关系型数据库 数据库
使用ROS部署ECS+SqlServer资源并通过PowerShell操作数据库
本文介绍如何通过ROS部署ECS+RDS+SqlServer资源,以及如何通过PowerShell操作SqlServer数据库。 注意:附录模板和截图中的commandtext部分仅为演示作用,请根据需求修改后使用。
114 0
使用ROS部署ECS+SqlServer资源并通过PowerShell操作数据库
|
存储 弹性计算 运维
资源编排ROS之资源场景
# 背景 [资源编排服务](https://help.aliyun.com/document_detail/28852.html)(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎
208 0
资源编排ROS之资源场景
|
弹性计算 JSON JavaScript
ROS CDK | 云上资源自动化部署新模式
使用 ROS CDK 自动化部署云资源
1098 0
|
弹性计算 运维 关系型数据库
资源编排之资源栈偏差检测和纠正
资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。 用户可以使用ROS管理资源,但即使通过ROS管理资源
542 0
|
弹性计算 运维 关系型数据库
资源编排ROS之资源栈组StackGroup
## 背景 [资源编排服务](https://help.aliyun.com/document_detail/28852.html)(Resource Orchestration Service, 简称 ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循 ROS 定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如 ECS 实例、RDS 数据库实例)、资源间的依赖关系
891 0
|
JSON 弹性计算 运维
资源编排ROS之资源栈策略
背景 资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。 在创建资源栈时,允许对所有资源执行所有更新操
1099 0

推荐镜像

更多