aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomalok <tomalok@gmail.com>2019-03-03 21:57:28 -0800
committerGitHub <noreply@github.com>2019-03-03 21:57:28 -0800
commit052cab891417feb432151f5733c507578c72929f (patch)
treeb2a702ba516f27ce1a0a3f36047523e7ca134d69
parent00aec03281c9e3f4c4980a2e03455590e2d1a12b (diff)
downloadalpine-ec2-ami-052cab891417feb432151f5733c507578c72929f.tar.bz2
alpine-ec2-ami-052cab891417feb432151f5733c507578c72929f.tar.xz
alpine-ec2-ami-052cab891417feb432151f5733c507578c72929f.zip
Fix nvme-ebs-links (issue #44) (#45)
* EBS may prepend '/dev/' in front of the EBS alias, adjust the sanity sed to account for this. * Attempt to get a sane EBS alias up to 50x, sleep 1/10s in between (max duration ~5 secs). * Log when we add/fail-to-add/remove EBS alias symlinks.
-rwxr-xr-xnvme/nvme-ebs-links34
1 files changed, 25 insertions, 9 deletions
diff --git a/nvme/nvme-ebs-links b/nvme/nvme-ebs-links
index f3e0a0a..f2c470b 100755
--- a/nvme/nvme-ebs-links
+++ b/nvme/nvme-ebs-links
@@ -2,26 +2,42 @@
2 2
3[ -x /usr/sbin/nvme ] || exit 3[ -x /usr/sbin/nvme ] || exit
4 4
5PROC="$(basename $0)[$$]"
6
7log() {
8 FACILITY="kern.$1"
9 shift
10 logger -s -p "$FACILITY" -t "$PROC" "$@"
11}
12
13raw_ebs_alias() {
14 /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null
15}
16
5case $ACTION in 17case $ACTION in
6 add|"") 18 add|"")
7 BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') 19 BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/')
8 PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') 20 PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g')
21 MAXTRY=50
22 TRY=0
9 until [ -n "$EBS" ]; do 23 until [ -n "$EBS" ]; do
10 EBS=$( 24 EBS=$(raw_ebs_alias | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' | tr -d ' ')
11 /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | 25 [ -n "$EBS" ] && break
12 dd bs=32 skip=96 count=1 2>/dev/null | 26 TRY=$((TRY + 1))
13 sed -nre '/^(s|xv)d[a-z]{1,2} +$/p' | 27 if [ $TRY -eq $MAXTRY ]; then
14 tr -d ' ' 28 log err "Failed to get EBS volume alias for $MDEV after $MAXTRY attempts ($(raw_ebs_alias))"
15 ) 29 exit 1
30 fi
31 sleep 0.1
16 done 32 done
17 EBS=${EBS#/dev/}$PART 33 EBS=${EBS#/dev/}$PART
18 ln -sf "$MDEV" "${EBS/xvd/sd}" 34 ln -sf "$MDEV" "${EBS/xvd/sd}" && log notice "Added ${EBS/xvd/sd} symlink for $MDEV"
19 ln -sf "$MDEV" "${EBS/sd/xvd}" 35 ln -sf "$MDEV" "${EBS/sd/xvd}" && log notice "Added ${EBS/sd/xvd} symlink for $MDEV"
20 ;; 36 ;;
21 remove) 37 remove)
22 for TARGET in sd* xvd* 38 for TARGET in sd* xvd*
23 do 39 do
24 [ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" 40 [ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV"
25 done 41 done
26 ;; 42 ;;
27esac 43esac