Skip to content

Instantly share code, notes, and snippets.

@oazabir
Last active February 17, 2025 21:45
Show Gist options
  • Save oazabir/20d75df0a13b03859054a5b667a5edbe to your computer and use it in GitHub Desktop.
Save oazabir/20d75df0a13b03859054a5b667a5edbe to your computer and use it in GitHub Desktop.
Azure: Mount data disks attached to a VM on boot
#!/bin/bash
set -e
set -x
DISK=$1
VG=$2
VOL=$3
MOUNTPOINT=$4
SIZE=${5:-"100%FREE"}
# Wait for x disks to be available
while [ `ls -l $DISK | grep lun | wc -l` -lt 1 ]; do
echo "Waiting on disks...";
sleep 5
done
DISK_PARTITION="${DISK}-part1"
# Check if the disk already has a partition
if ! ls "${DISK_PARTITION}"; then
# Partition disk if no partition exists
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk $DISK
n
p
1
w
EOF
DISK_PARTITION=$(ls ${DISK}* | tail -n 1)
# Create physical volume
pvcreate $DISK_PARTITION || true
fi
# Create or extend volume group
if ! vgs | grep -q $VG; then
vgcreate $VG $DISK_PARTITION
else
echo "Volume exists already"
vgs
#vgextend $VG $DISK_PARTITION
fi
# Create logical volume
if [[ -z $SIZE ]]; then
SIZE="100%FREE"
fi
if ! lvdisplay | grep -q "/dev/$VG/$VOL"; then
lvcreate -l $SIZE -n $VOL $VG
# Create filesystem
mkfs.xfs /dev/$VG/$VOL
fi
# Check if the entry already exists in fstab
if ! grep -q "/dev/$VG/$VOL" /etc/fstab; then
echo "/dev/$VG/$VOL $MOUNTPOINT xfs defaults 0 2" >> /etc/fstab
fi
# Create mount point
mkdir -p $MOUNTPOINT
# Mount
if ! lsblk | grep -q $MOUNTPOINT | grep -q $VG/$VOL; then
mount /dev/$VG/$VOL $MOUNTPOINT || true
else
lsblk | grep -q $MOUNTPOINT
fi
chmod ugo+rwx $MOUNTPOINT
touch $MOUNTPOINT/mounted.txt
echo "Mount done"
lsblk | grep $MOUNTPOINT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment