Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save luckylittle/393d175a5226f6126d8af53808d39529 to your computer and use it in GitHub Desktop.
Save luckylittle/393d175a5226f6126d8af53808d39529 to your computer and use it in GitHub Desktop.
User data script to automatically mount the additional vomue as home folder on AWS EC2
IyEvYmluL2Jhc2gKCiMgTG9nIGFsbCBvdXRwdXQgZm9yIGRlYnVnZ2luZwpleGVjID4gPih0ZWUg
L3Zhci9sb2cvdXNlci1kYXRhLmxvZykgMj4mMQoKZWNobyAiU3RhcnRpbmcgdXNlciBkYXRhIHNj
cmlwdCBhdCAkKGRhdGUpIgoKIyBXYWl0IGZvciB0aGUgRUJTIHZvbHVtZSB0byBiZSBhdmFpbGFi
bGUKZWNobyAiV2FpdGluZyBmb3IgRUJTIHZvbHVtZSB0byBiZSBhdmFpbGFibGUuLi4iCndoaWxl
IFsgISAtZSAvZGV2L252bWUxbjEgXTsgZG8KICBlY2hvICJXYWl0aW5nIGZvciAvZGV2L252bWUx
bjEuLi4iCiAgc2xlZXAgNQpkb25lCgplY2hvICJFQlMgdm9sdW1lIC9kZXYvbnZtZTFuMSBpcyBh
dmFpbGFibGUiCgojIENyZWF0ZSBwYXJ0aXRpb24gb24gdGhlIEVCUyB2b2x1bWUKZWNobyAiQ3Jl
YXRpbmcgcGFydGl0aW9uIG9uIC9kZXYvbnZtZTFuMS4uLiIKKAplY2hvIG4gIyBBZGQgYSBuZXcg
cGFydGl0aW9uCmVjaG8gcCAjIFByaW1hcnkgcGFydGl0aW9uCmVjaG8gMSAjIFBhcnRpdGlvbiBu
dW1iZXIKZWNobyAgICMgRmlyc3Qgc2VjdG9yIChBY2NlcHQgZGVmYXVsdDogMSkKZWNobyAgICMg
TGFzdCBzZWN0b3IgKEFjY2VwdCBkZWZhdWx0OiB2YXJpZXMpCmVjaG8gdyAjIFdyaXRlIGNoYW5n
ZXMKKSB8IGZkaXNrIC9kZXYvbnZtZTFuMQoKIyBXYWl0IGEgbW9tZW50IGZvciB0aGUgcGFydGl0
aW9uIHRvIGJlIHJlY29nbml6ZWQKc2xlZXAgNQoKIyBGb3JtYXQgdGhlIHBhcnRpdGlvbiB3aXRo
IFhGUwplY2hvICJGb3JtYXR0aW5nIC9kZXYvbnZtZTFuMXAxIHdpdGggWEZTLi4uIgpta2ZzLnhm
cyAvZGV2L252bWUxbjFwMQoKIyBHZXQgdGhlIFVVSUQgb2YgdGhlIG5ldyBwYXJ0aXRpb24KZWNo
byAiR2V0dGluZyBVVUlEIG9mIHRoZSBwYXJ0aXRpb24uLi4iClVVSUQ9JChibGtpZCAtcyBVVUlE
IC1vIHZhbHVlIC9kZXYvbnZtZTFuMXAxKQplY2hvICJVVUlEOiAkVVVJRCIKCiMgQWRkIGVudHJ5
IHRvIC9ldGMvZnN0YWIKZWNobyAiQWRkaW5nIGVudHJ5IHRvIC9ldGMvZnN0YWIuLi4iCmVjaG8g
IlVVSUQ9JFVVSUQgL2hvbWUgeGZzIGRlZmF1bHRzIDAgMCIgPj4gL2V0Yy9mc3RhYgoKIyBDcmVh
dGUgYSB0ZW1wb3JhcnkgbW91bnQgcG9pbnQgdG8gcHJlc2VydmUgZXhpc3RpbmcgaG9tZSBkYXRh
CmVjaG8gIkNyZWF0aW5nIHRlbXBvcmFyeSBtb3VudCBwb2ludC4uLiIKbWtkaXIgLXAgL21udC90
ZW1wX2hvbWUKCiMgTW91bnQgdGhlIG5ldyB2b2x1bWUgdGVtcG9yYXJpbHkKbW91bnQgL2Rldi9u
dm1lMW4xcDEgL21udC90ZW1wX2hvbWUKCiMgQ29weSBleGlzdGluZyAvaG9tZSBjb250ZW50cyB0
byB0aGUgbmV3IHZvbHVtZSAoaWYgYW55KQppZiBbICIkKGxzIC1BIC9ob21lIDI+L2Rldi9udWxs
KSIgXTsgdGhlbgogIGVjaG8gIkNvcHlpbmcgZXhpc3RpbmcgL2hvbWUgY29udGVudHMgdG8gbmV3
IHZvbHVtZS4uLiIKICBjcCAtYXJ2IC9ob21lLyogL21udC90ZW1wX2hvbWUvCmZpCgojIFVubW91
bnQgdGhlIHRlbXBvcmFyeSBtb3VudAp1bW91bnQgL21udC90ZW1wX2hvbWUKcm1kaXIgL21udC90
ZW1wX2hvbWUKCiMgTW91bnQgdGhlIG5ldyB2b2x1bWUgdG8gL2hvbWUKZWNobyAiTW91bnRpbmcg
bmV3IHZvbHVtZSB0byAvaG9tZS4uLiIKbW91bnQgLWF2CgojIFJlbG9hZCBzeXN0ZW1kIGRhZW1v
bgpzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAoKIyBWZXJpZnkgdGhlIG1vdW50CmVjaG8gIlZlcmlm
eWluZyBtb3VudC4uLiIKZGYgLWggL2hvbWUKbW91bnQgfCBncmVwIC9ob21lCgplY2hvICJVc2Vy
IGRhdGEgc2NyaXB0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYXQgJChkYXRlKSIKCiMgT3B0aW9u
YWw6IENyZWF0ZSBhIG1hcmtlciBmaWxlIHRvIGluZGljYXRlIGNvbXBsZXRpb24KdG91Y2ggL3Zh
ci9sb2cvdXNlci1kYXRhLWNvbXBsZXRlCg==
#!/bin/bash
# Log all output for debugging
exec > >(tee /var/log/user-data.log) 2>&1
echo "Starting user data script at $(date)"
# Wait for the EBS volume to be available
echo "Waiting for EBS volume to be available..."
while [ ! -e /dev/nvme1n1 ]; do
echo "Waiting for /dev/nvme1n1..."
sleep 5
done
echo "EBS volume /dev/nvme1n1 is available"
# Create partition on the EBS volume
echo "Creating partition on /dev/nvme1n1..."
(
echo n # Add a new partition
echo p # Primary partition
echo 1 # Partition number
echo # First sector (Accept default: 1)
echo # Last sector (Accept default: varies)
echo w # Write changes
) | fdisk /dev/nvme1n1
# Wait a moment for the partition to be recognized
sleep 5
# Format the partition with XFS
echo "Formatting /dev/nvme1n1p1 with XFS..."
mkfs.xfs /dev/nvme1n1p1
# Get the UUID of the new partition
echo "Getting UUID of the partition..."
UUID=$(blkid -s UUID -o value /dev/nvme1n1p1)
echo "UUID: $UUID"
# Add entry to /etc/fstab
echo "Adding entry to /etc/fstab..."
echo "UUID=$UUID /home xfs defaults 0 0" >> /etc/fstab
# Create a temporary mount point to preserve existing home data
echo "Creating temporary mount point..."
mkdir -p /mnt/temp_home
# Mount the new volume temporarily
mount /dev/nvme1n1p1 /mnt/temp_home
# Copy existing /home contents to the new volume (if any)
if [ "$(ls -A /home 2>/dev/null)" ]; then
echo "Copying existing /home contents to new volume..."
cp -arv /home/* /mnt/temp_home/
fi
# Unmount the temporary mount
umount /mnt/temp_home
rmdir /mnt/temp_home
# Mount the new volume to /home
echo "Mounting new volume to /home..."
mount -av
# Reload systemd daemon
systemctl daemon-reload
# Verify the mount
echo "Verifying mount..."
df -h /home
mount | grep /home
echo "User data script completed successfully at $(date)"
# Optional: Create a marker file to indicate completion
touch /var/log/user-data-complete
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment