Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Script to Format and Mount all available instance store devices

Amazon provides instance store for EC2 instances. If you use your own AMI, these are not formatted or mounted automatically for you. You need to manually format and mount them.

The available devices are listed here and vary based on type of instance. For example an m1.small will have different available instance store devices than c1.xlarge.

I'm looking for a script which

  1. Detects what the instance type is. Perhaps by using curl -s http://169.254.169.254/latest/meta-data/instance-type
  2. Formats and mounts all devices which are available for that instance type but have not yet been formatted/mounted.

Possible? Done it? Have it?

like image 830
Ayush Gupta Avatar asked May 16 '12 05:05

Ayush Gupta


2 Answers

So, here is what I built for this.

#!/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
like image 68
Ayush Gupta Avatar answered Nov 15 '22 07:11

Ayush Gupta


#!/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
like image 20
ARAVINDAN ARUN Avatar answered Nov 15 '22 07:11

ARAVINDAN ARUN