@@ -4,37 +4,61 @@ set -euo pipefail
4
4
5
5
VOLUME_TYPE=${1:- data}
6
6
7
+ # lsb release
8
+ UBUNTU_VERSION=$( lsb_release -rs)
9
+
7
10
if pgrep resizefs; then
8
11
echo " resize2fs is already running"
9
12
exit 1
10
13
fi
11
14
12
- # Parses the output of lsblk to get the root partition number
13
- # Example output:
14
- # NAME MOUNTPOINT
15
- # nvme0n1
16
- # ├─nvme0n1p1 /boot
17
- # └─nvme0n1p3 /
18
- # nvme1n1 /data
19
- #
20
- # Resulting in:
21
- # └─nvme0n1p3 / -> nvme0n1p3 -> 3
22
- ROOT_PARTITION_NUMBER=$( lsblk -no NAME,MOUNTPOINT | grep ' /$' | awk ' {print $1;}' | sed ' s/.*nvme[0-9]n[0-9]p//g' )
15
+ # install amazon disk utilities if not present on 24.04
16
+ if [ " ${UBUNTU_VERSION} " = " 24.04" ] && ! dpkg -l | grep -q amazon-ec2-utils; then
17
+ apt-get update
18
+ apt-get install -y amazon-ec2-utils || true
19
+ fi
20
+
21
+ # We currently mount 3 possible disks
22
+ # - /dev/xvda (root disk)
23
+ # - /dev/xvdh (data disk)
24
+ # - /dev/xvdp (upgrade data disk), not used here
25
+ # Initialize variables at 20.04 levels
26
+ XVDA_DEVICE=" /dev/nvme0n1"
27
+ XVDH_DEVICE=" /dev/nvme1n1"
28
+ # Map AWS devices to NVMe for ubuntu 24.04 and later
29
+ if [ " ${UBUNTU_VERSION} " = " 24.04" ] && dpkg -l | grep -q amazon-ec2-utils; then
30
+ for nvme_dev in $( lsblk -dprno name,type | grep disk | awk ' {print $1}' ) ; do
31
+ if [ -b " $nvme_dev " ]; then
32
+ mapping=$( ebsnvme-id -b " $nvme_dev " 2> /dev/null)
33
+ case " $mapping " in
34
+ " xvda" |" /dev/xvda" ) XVDA_DEVICE=" $nvme_dev " ;;
35
+ " xvdh" |" /dev/xvdh" ) XVDH_DEVICE=" $nvme_dev " ;;
36
+ esac
37
+ fi
38
+ done
39
+ fi
40
+
41
+ echo " Using devices - Root: $XVDA_DEVICE , Data: $XVDH_DEVICE "
42
+
43
+ # Get root partition using findmnt
44
+ ROOT_DEVICE_FULL=$( findmnt -no SOURCE /)
45
+ ROOT_DEVICE=$( lsblk -no PKNAME " $ROOT_DEVICE_FULL " )
46
+ ROOT_PARTITION_NUMBER=$( echo " $ROOT_DEVICE_FULL " | sed " s|.*${ROOT_DEVICE} p||" )
23
47
24
48
if ! [[ " $ROOT_PARTITION_NUMBER " =~ ^[0-9]+$ ]]; then
25
49
echo " Error: ROOT_PARTITION_NUMBER is not a valid number: $ROOT_PARTITION_NUMBER "
26
50
exit 1
27
51
fi
28
52
29
- if [ -b /dev/nvme1n1 ] ; then
53
+ if [ -b " ${XVDH_DEVICE} " ] ; then
30
54
if [[ " ${VOLUME_TYPE} " == " data" ]]; then
31
- resize2fs /dev/nvme1n1
55
+ resize2fs " ${XVDH_DEVICE} "
32
56
33
57
elif [[ " ${VOLUME_TYPE} " == " root" ]] ; then
34
58
PLACEHOLDER_FL=/home/ubuntu/50M_PLACEHOLDER
35
59
rm -f " ${PLACEHOLDER_FL} " || true
36
- growpart /dev/nvme0n1 " ${ROOT_PARTITION_NUMBER} "
37
- resize2fs " /dev/nvme0n1p ${ROOT_PARTITION_NUMBER} "
60
+ growpart " ${XVDA_DEVICE} " " ${ROOT_PARTITION_NUMBER} "
61
+ resize2fs " ${XVDA_DEVICE} p ${ROOT_PARTITION_NUMBER} "
38
62
if [[ ! -f " ${PLACEHOLDER_FL} " ]] ; then
39
63
fallocate -l50M " ${PLACEHOLDER_FL} "
40
64
fi
@@ -43,7 +67,7 @@ if [ -b /dev/nvme1n1 ] ; then
43
67
exit 1
44
68
fi
45
69
else
46
- growpart /dev/nvme0n1 " ${ROOT_PARTITION_NUMBER} "
47
- resize2fs " /dev/nvme0n1p ${ROOT_PARTITION_NUMBER} "
70
+ growpart " ${XVDA_DEVICE} " " ${ROOT_PARTITION_NUMBER} "
71
+ resize2fs " ${XVDA_DEVICE} p ${ROOT_PARTITION_NUMBER} "
48
72
fi
49
73
echo " Done resizing disk"
0 commit comments