You could migrate your running instance to an EBS backed AMI. Here's how I did it:
- Boot up a regular S3 AMI backed instance (or since you've already got an instance you're happy with, use that)
- Make an EBS volume of the same size as your root sda1 partition (currently the default is 10G for an m1.small and possibly others)
- Attach that EBS volume to a free block device on the instance using the web console or command line tools (e.g. /dev/sdd)
- Stop the services on the instance (e.g. /etc/init.d/mysql stop etc.)
- Copy the ephemeral root volume to the EBS volume:
dd bs=65536 if=/dev/sda1 of=/dev/sdd
- Check the EBS volume for consistency:
fsck /dev/sdd
- Mount the EBS volume onto the instance:
mount /dev/sdd /root/ebs-vol
- Remove the /mnt entry from the fstab on your EBS vol:
vim /root/ebs-vol/etc/fstab
umount /dev/sdd
- Create a snapshot of the EBS volume using the AWS management console (or command line API tools)
- Make note of the snapshot id
- Register the snapshot image with AWS and take note of the AMI id produced, when registering remember to specify the kernel and ramdisk image (these should be the same as those used in your current instance):
ec2-register -s snap-12345 -a i386 -d "Description of AMI" -n "name-of-image" -k aki-12345 -r ari-12345
- To create an instance with more than 10G of persistent storage you have to use the cli tools. e.g. for 20G
ec2-run-instances ami-54321 -t m1.small -n 1 -g default --availability-zone=eu-west-1a -k ec2-key1 -b /dev/sda1=snap-12345:20:false
- If you boot up an instance based on one of these AMIs with > default volume size, once it's started up you can do an online resize of the filesystem:
resize2fs /dev/sda1