|
@@ -0,0 +1,80 @@
|
|
|
+#!/bin/bash
|
|
|
+#
|
|
|
+#
|
|
|
+exec > /dev/console
|
|
|
+exec 2>&1
|
|
|
+
|
|
|
+declare -A EBSMAP
|
|
|
+
|
|
|
+# Build a map of EBS NVMe disks from their AWS-API-name to their NVMe name
|
|
|
+# this makes an associative array (like a python hash) of the
|
|
|
+# sdX/xvdX name you'd set in AWS API to the corresponding nvmeX name
|
|
|
+# Thanks Fred for the awesome id-ctrl stuff I'd never seen before
|
|
|
+#
|
|
|
+# One interesting side effect observed: the id-ctrl output is different when
|
|
|
+# volumes are attached at boot time (no /dev/) versus attached after the OS
|
|
|
+# is started (includes /dev/)
|
|
|
+function make_nve_ebs_map {
|
|
|
+ for DEVICE in $( lsblk -d -o NAME,MODEL -n | egrep "Elastic Block Store" | awk '{ print $1 }' ); do
|
|
|
+ UNDERLYING=$( nvme id-ctrl --raw-binary /dev/${DEVICE} 2>/dev/null | cut -c 3073-3104 | tr -d ' ' | sed "s#/dev/##" )
|
|
|
+
|
|
|
+ EBSMAP[$UNDERLYING]=$DEVICE
|
|
|
+ UNDERLYING2=$( echo $UNDERLYING | sed "s/sd/xvd/" )
|
|
|
+ EBSMAP[$UNDERLYING2]=$DEVICE
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+function do_the_mount
|
|
|
+{
|
|
|
+ VOL_LABEL=$1
|
|
|
+ VOLUME=$2
|
|
|
+ MOUNTPOINT=$3
|
|
|
+
|
|
|
+
|
|
|
+ DONE=0
|
|
|
+ TRIES=0
|
|
|
+ while [[ $DONE -ne 1 ]] && [[ $TRIES -lt 20 ]]; do
|
|
|
+ echo "Looking for $VOLUME to come attached"
|
|
|
+ make_nve_ebs_map
|
|
|
+
|
|
|
+ #echo "------- current nvme/ebs map -------"
|
|
|
+ #for K in "${!EBSMAP[@]}"; do echo $K = ${EBSMAP[$K]} ; done
|
|
|
+ #echo "------- end current nvme/ebs map -------"
|
|
|
+
|
|
|
+ if [[ -b /dev/$VOLUME ]]; then
|
|
|
+ DEV="/dev/$VOLUME"
|
|
|
+ DONE=1
|
|
|
+ elif [[ -b /dev/${EBSMAP[$VOLUME]} ]]; then
|
|
|
+ DEV="/dev/${EBSMAP[$VOLUME]}"
|
|
|
+ DONE=1
|
|
|
+ else
|
|
|
+ sleep 10
|
|
|
+ TRIES=$(( $TRIES + 1 ))
|
|
|
+ fi
|
|
|
+
|
|
|
+ echo "Volume $VOLUME available at $DEV"
|
|
|
+ done
|
|
|
+
|
|
|
+ if ! [[ -d ${MOUNTPOINT} ]]; then
|
|
|
+ echo "Creating mount directory ${MOUNTPOINT}"
|
|
|
+ mkdir -p ${MOUNTPOINT}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if ! blkid -l -t LABEL=${VOL_LABEL}; then
|
|
|
+ echo "Making filesystem for LABEL=${VOL_LABEL} on ${DEV}"
|
|
|
+ mkfs.xfs -L ${VOL_LABEL} ${DEV}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if ! egrep -q "LABEL=${VOL_LABEL}" /etc/fstab; then
|
|
|
+ echo "Adding LABEL=${VOL_LABEL} to /etc/fstab"
|
|
|
+ echo "LABEL=${VOL_LABEL} ${MOUNTPOINT} xfs noatime,nofail 0 2" >> /etc/fstab
|
|
|
+ fi
|
|
|
+
|
|
|
+ if ! mountpoint ${MOUNTPOINT} >/dev/null 2>&1; then
|
|
|
+ echo "Mounting ${MOUNTPOINT}"
|
|
|
+ mount ${MOUNTPOINT}
|
|
|
+ fi
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+do_the_mount opt_vmray xvdf /opt/vmray
|