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
- Detects what the instance type is. Perhaps by using
curl -s http://169.254.169.254/latest/meta-data/instance-type
- Formats and mounts all devices which are available for that instance type but have not yet been formatted/mounted.
Possible? Done it? Have it?
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
#!/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
来源:https://stackoverflow.com/questions/10612440/script-to-format-and-mount-all-available-instance-store-devices