Created
June 30, 2025 01:21
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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== |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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