I'm currently facing a challenge with disk management on our database servers. We've got several large disks that are mostly empty, mainly due to some team members not fully understanding disk usage. Since these disks are in production and we have SLAs to uphold, I need to shrink them down through file copies without causing much disruption. I've set up an Ansible playbook that uses recent snapshots to create new volumes, launches a temporary EC2 instance to copy the data to a properly sized disk, then terminates the instance and links the new volume back to the original instance.
So far, I've been testing with multi-TB disks. However, I ran into a problem: copying just 10 GB took about 20 minutes! On the other hand, a local copy on the original disk only takes around 20 seconds.
I know there are various ways to create volumes from snapshots, including using Fast Snapshot Restore (FSR) or directly cloning volumes. They all claim speed, yet I'm not seeing anything "fast" when copying significant data. It's as if the operations are slowly copying the source volume blocks, regardless of whether they're empty or not. It makes me wonder why the new volume copy feature isn't just a simple copy-on-write mechanism—why not read the same blocks from the source until a write is made, then duplicate that block elsewhere?
I'd like suggestions on how to achieve the quickest results without impacting the production instance too much. It would be ideal if I could prepare a volume early, so when the automation kicks in, the data can be copied quickly. Still, I have this vision that I should be able to transfer a terabyte in about 20 minutes and then relax with a lunch break.
After the main copy, I plan to move the volume back to the original instance and use rsync to synchronize the necessary data that may have changed during the main transfer. However, the long time it takes to read all data from a newly created volume is troubling. Any advice would really help!
1 Answer
AWS just rolled out a new EBS cloning feature which is supposed to simplify the process. You can create copies of your EBS volumes with just one API call, making these clones available almost instantly. This feature is particularly useful for setting up test environments quickly, or making temporary copies for development. Check it out! You can find more details in the AWS blog.

I’ve seen that too, but I’m not experiencing those speedy results with larger volumes. My manual volume copy is stuck at 13% initialization after two hours. It seems like the documentation oversells the performance since when I copy the same 10 GB back to itself, it finishes much faster. Maybe I'm just getting unlucky—hoping for better results after the initialization completes.