用于格式化和装载所有可用实例存储设备的脚本

时间:2012-05-16 05:18:55

标签: amazon-ec2 amazon-web-services amazon-ebs

适用于EC2实例的Amazon provides instance store。如果您使用自己的AMI,则不会自动为您格式化或安装这些AMI。您需要手动格式化并装入它们。

可用设备为listed here,并根据实例类型而有所不同。例如,m1.small将具有与c1.xlarge不同的可用实例存储设备。

我正在寻找一个

的剧本
  1. 检测实例类型。也许通过使用 curl -s http://169.254.169.254/latest/meta-data/instance-type
  2. 格式化并安装可用于该实例类型但尚未格式化/安装的所有设备。
  3. 可能?完成了?有吗?

2 个答案:

答案 0 :(得分:7)

所以,这就是我为此所建立的。

#!/bin/bash

# This script formats and mounts all available Instance Store devices

##### Variables
devices=( )

##### Functions

function add_device
{
    devices=( "${devices[@]}" $1 )
}

function check_device
{
    if [ -e /dev/$1 ]; then
        add_device $1
    fi
}

function check_devices
{
    check_device sda2
    check_device sda3
    check_device sdb
    check_device sdc
    check_device sdd
    check_device sde
}

function print_devices
{
    for device in "${devices[@]}"
    do
        echo Found device $device
    done
}

function do_mount
{
    echo Mounting device $1 on $2
fdisk $1 << EOF
n
p
1



w
EOF
# format!
mkfs -t xfs -f $1

mkdir $2
mount $1 $2

echo "$1   $2      xfs     defaults          0 0" >> /etc/fstab

}

function mount_devices
{
    for (( i = 0 ; i < ${#devices[@]} ; i++ ))
    do
        mountTarget=/mnt
        if [ $i -gt 0 ]; then
            mountTarget=/mnt$(($i+1))
        fi
        do_mount /dev/${devices[$i]} $mountTarget
    done
}


##### Main

check_devices
print_devices
mount_devices

答案 1 :(得分:1)

#!/bin/bash
#SETUP RAID0
checkAllDevices()
{
    devicemount=/ephemeral
    logicalname=/dev/md0
    deviceslist=( '/dev/xvdb' '/dev/xvdc' '/dev/xvdd' '/dev/xvde' )
    for device in ${deviceslist[@]}; do
        if ([ -b $device ]) then
            aDevices=( "${aDevices[@]}" $device )
        fi
    done
    if [ "${#aDevices[@]}" -gt '1' ];then
        yes | mdadm --create $logicalname --level=0 -c256 --raid-devices=${#aDevices[@]} ${aDevices[@]}
        echo \'DEVICE ${aDevices[@]}\' > /etc/mdadm.conf
        mdadm --detail --scan >> /etc/mdadm.conf
        blockdev --setra 65536 $logicalname
        mkfs.xfs -f $logicalname > /dev/null
        mkdir -p $devicemount
        mount -t xfs -o noatime $logicalname $devicemount
        if [ ! -f /etc/fstab.backup ]; then
            cp -rP /etc/fstab /etc/fstab.backup
            echo "$logicalname $devicemount    xfs  defaults  0 0" >> /etc/fstab
        fi        
    else
        echo "Required more than one devices"
    fi
}

#MAIN FUNCTION 
aDevices=()
checkAllDevices