diff --git a/999-aws-ebs-nvme.rules b/999-aws-ebs-nvme.rules index a514019..20617ba 100644 --- a/999-aws-ebs-nvme.rules +++ b/999-aws-ebs-nvme.rules @@ -1 +1,2 @@ SUBSYSTEM=="block", KERNEL=="nvme[0-9]*n1", ATTRS{model}=="Amazon Elastic Block Store", PROGRAM+="/usr/local/sbin/ebs-nvme-mapping.sh /dev/%k" SYMLINK+="%c" +KERNEL=="nvme[0-9]*n[0-9]*", ENV{DEVTYPE}=="disk", ATTRS{model}=="Amazon EC2 NVMe Instance Storage", PROGRAM="/usr/local/bin/nextephemeraldevice.sh %k", SYMLINK+="%c" diff --git a/nextephemeraldevice.sh b/nextephemeraldevice.sh new file mode 100644 index 0000000..14a4237 --- /dev/null +++ b/nextephemeraldevice.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# To be used with the udev rule: /etc/udev/rules.d/999-aws-ebs-nvme.rules + +# check if lock file exists +script_name="$(basename $0)" +pid_file="/tmp/${script_name}.lock" +counter=0 +until [ $counter -eq 5 ] || [[ ! -e "${pid_file}" ]] ; do + sleep $(( counter++ )) +done + +# create lock file if it does not exist +if [[ -e "${pid_file}" ]]; then + echo "Lock file ${pid_file} still exists after counter ended" >&2 + exit 1 +else + touch "${pid_file}" +fi + +kern_name=${1} +incr=0 +while [[ -e "/dev/ephemeral${incr}" ]] && [[ $(readlink "/dev/ephemeral${incr}") != "${kern_name}" ]]; do + incr=$[$i+1] +done +# remove lock file +rm "${pid_file}" +echo "ephemeral${incr}"