Skip to content

Instantly share code, notes, and snippets.

@alisade
Created July 19, 2025 19:04
Show Gist options
  • Select an option

  • Save alisade/ea0ae81074d7913122b3b51b4e736c8d to your computer and use it in GitHub Desktop.

Select an option

Save alisade/ea0ae81074d7913122b3b51b4e736c8d to your computer and use it in GitHub Desktop.

Revisions

  1. alisade created this gist Jul 19, 2025.
    65 changes: 65 additions & 0 deletions resize-ebs.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,65 @@

    #!/bin/bash

    # Specify the desired volume size in GiB as a command line argument. If not specified, default to 20 GiB.
    SIZE=${1:-20}

    # Get the ID of the environment host Amazon EC2 instance.
    TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 60")
    INSTANCEID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/instance-id 2> /dev/null)
    REGION=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/placement/region 2> /dev/null)

    # Get the ID of the Amazon EBS volume associated with the instance.
    VOLUMEID=$(aws ec2 describe-instances \
    --instance-id $INSTANCEID \
    --query "Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId" \
    --output text \
    --region $REGION)

    # Resize the EBS volume.
    aws ec2 modify-volume --volume-id $VOLUMEID --size $SIZE

    # Wait for the resize to finish.
    while [ \
    "$(aws ec2 describe-volumes-modifications \
    --volume-id $VOLUMEID \
    --filters Name=modification-state,Values="optimizing","completed" \
    --query "length(VolumesModifications)"\
    --output text)" != "1" ]; do
    sleep 1
    done

    # Check if we're on an NVMe filesystem
    if [[ -e "/dev/xvda" && $(readlink -f /dev/xvda) = "/dev/xvda" ]]
    then
    # Rewrite the partition table so that the partition takes up all the space that it can.
    sudo growpart /dev/xvda 1
    # Expand the size of the file system.
    # Check if we're on AL2 or AL2023
    STR=$(cat /etc/os-release)
    SUBAL2="VERSION_ID=\"2\""
    SUBAL2023="VERSION_ID=\"2023\""
    if [[ "$STR" == *"$SUBAL2"* || "$STR" == *"$SUBAL2023"* ]]
    then
    sudo xfs_growfs -d /
    else
    sudo resize2fs /dev/xvda1
    fi

    else
    # Rewrite the partition table so that the partition takes up all the space that it can.
    sudo growpart /dev/nvme0n1 1

    # Expand the size of the file system.
    # Check if we're on AL2 or AL2023
    STR=$(cat /etc/os-release)
    SUBAL2="VERSION_ID=\"2\""
    SUBAL2023="VERSION_ID=\"2023\""
    if [[ "$STR" == *"$SUBAL2"* || "$STR" == *"$SUBAL2023"* ]]
    then
    sudo xfs_growfs -d /
    else
    sudo resize2fs /dev/nvme0n1p1
    fi
    fi