The following Bash script finds the AWS ephemeral drives and creates a spanned volume, mounted as /scratch
. I used this in a bootstrap script to dynamically allocate processing space.
https://gist.github.com/nsabine/6196550
- #!/bin/bash
- declare -a DISKS=($(fdisk -l | grep 'dev' | awk '{if ($3 > 1000) print $2}' | sed s/.$//))
- declare -a INUSE=($(mount | awk '{if ($1 ~ '/dev/') print $1}'))
- declare -a UNUSED=(`comm -23 <(echo ${DISKS[@]} | sed 's/ /\n/g' | sort -u) <(echo ${INUSE[@]} | sed 's/ /\n/g'| sort -u)`)
- echo "All Disks larger than 1000 GB:"
- for i in ${!DISKS[@]}
- do
- echo "$i=${DISKS[$i]}"
- done
- echo
- echo "In use Disks:"
- for i in ${!INUSE[@]}
- do
- echo "$i=${INUSE[$i]}"
- done
- echo
- echo "Available Disks larger than 1000 GB:"
- for i in ${!UNUSED[@]}
- do
- echo "$i=${UNUSED[$i]}"
- done
- # Create Physical Volumes
- for i in ${!UNUSED[@]}
- do
- pvcreate ${UNUSED[$i]}
- done
- # Create Volume Group from Physical Volumes
- vgcreate datavg ${UNUSED[@]}
- # Number of stripes to create in Logical Volume
- # -- set to number of disks in group
- NUMSTRIPES=${#UNUSED[@]}
- # Get Volume Group Size
- SIZE=$(expr $(vgdisplay datavg | grep "Total PE" | awk '{print $3}') - 100)
- echo "SIZE: $SIZE"
- # Create Logical Volume
- lvcreate -l $SIZE -i${NUMSTRIPES} -n DataVolume datavg
- mkfs.ext4 /dev/mapper/datavg-DataVolume -L DataFS
- echo "LABEL=DataFS /scratch ext4 defaults 0 0" >> /etc/fstab
- mount -a