* 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.
This commit is contained in:
parent
00aec03281
commit
052cab8914
@ -2,26 +2,42 @@
|
|||||||
|
|
||||||
[ -x /usr/sbin/nvme ] || exit
|
[ -x /usr/sbin/nvme ] || exit
|
||||||
|
|
||||||
|
PROC="$(basename $0)[$$]"
|
||||||
|
|
||||||
|
log() {
|
||||||
|
FACILITY="kern.$1"
|
||||||
|
shift
|
||||||
|
logger -s -p "$FACILITY" -t "$PROC" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
raw_ebs_alias() {
|
||||||
|
/usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
case $ACTION in
|
case $ACTION in
|
||||||
add|"")
|
add|"")
|
||||||
BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/')
|
BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/')
|
||||||
PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g')
|
PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g')
|
||||||
|
MAXTRY=50
|
||||||
|
TRY=0
|
||||||
until [ -n "$EBS" ]; do
|
until [ -n "$EBS" ]; do
|
||||||
EBS=$(
|
EBS=$(raw_ebs_alias | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' | tr -d ' ')
|
||||||
/usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null |
|
[ -n "$EBS" ] && break
|
||||||
dd bs=32 skip=96 count=1 2>/dev/null |
|
TRY=$((TRY + 1))
|
||||||
sed -nre '/^(s|xv)d[a-z]{1,2} +$/p' |
|
if [ $TRY -eq $MAXTRY ]; then
|
||||||
tr -d ' '
|
log err "Failed to get EBS volume alias for $MDEV after $MAXTRY attempts ($(raw_ebs_alias))"
|
||||||
)
|
exit 1
|
||||||
|
fi
|
||||||
|
sleep 0.1
|
||||||
done
|
done
|
||||||
EBS=${EBS#/dev/}$PART
|
EBS=${EBS#/dev/}$PART
|
||||||
ln -sf "$MDEV" "${EBS/xvd/sd}"
|
ln -sf "$MDEV" "${EBS/xvd/sd}" && log notice "Added ${EBS/xvd/sd} symlink for $MDEV"
|
||||||
ln -sf "$MDEV" "${EBS/sd/xvd}"
|
ln -sf "$MDEV" "${EBS/sd/xvd}" && log notice "Added ${EBS/sd/xvd} symlink for $MDEV"
|
||||||
;;
|
;;
|
||||||
remove)
|
remove)
|
||||||
for TARGET in sd* xvd*
|
for TARGET in sd* xvd*
|
||||||
do
|
do
|
||||||
[ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET"
|
[ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV"
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
Loading…
Reference in New Issue
Block a user