{"id":331,"date":"2026-03-12T10:40:15","date_gmt":"2026-03-12T10:40:15","guid":{"rendered":"https:\/\/blog.ngocha.biz\/?p=331"},"modified":"2026-03-12T10:40:15","modified_gmt":"2026-03-12T10:40:15","slug":"clone-aws-ebs-volumes","status":"publish","type":"post","link":"https:\/\/blog.ngocha.biz\/?p=331","title":{"rendered":"How to Clone AWS EBS Volumes Instantly Without Snapshots?"},"content":{"rendered":"<p>AWS now as  <strong>EBS Volume Clone<\/strong> feature that lets you copy an EBS volume instantly with a single API call and no snapshot is required.<\/p>\n<p>By the end of this guide, you will understand,<\/p>\n<ul>\n<li>What EBS Volume Clones are and how they work<\/li>\n<li>How cloning differs from snapshots (and when to use each)<\/li>\n<li>How to clone an EBS volume using the AWS CLI<\/li>\n<li>Best practices for managing cloned volumes<\/li>\n<\/ul>\n<p>Let&#8217;s get started.<\/p>\n<h2 id=\"what-is-ebs-volume-cloning\">What is EBS Volume Cloning?<\/h2>\n<p>EBS Volume Cloning lets you create an instant, <strong>point-in-time copy of an EBS volume<\/strong> within the same Availability Zone.<\/p>\n<p>Previously, copying a volume required the follwing two steps.<\/p>\n<ol>\n<li>Create a snapshot of the volume and wait for it to upload to S3<\/li>\n<li>Create a new volume from that snapshot and wait again for all the data to fully copy over to the new volume.<\/li>\n<\/ol>\n<p>This process could take anywhere from minutes to hours depending on volume size.<\/p>\n<p>With EBS Volume Clones, <strong>both steps combine into a single API call<\/strong> or&nbsp;console click&nbsp;is enough to clone a volume.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\"><b><strong style=\"white-space: pre-wrap;\">How it works under the hood:<\/strong><\/b> AWS makes the clone available immediately and copies the data blocks from the source volume in the background. This is called background initialization.<\/div>\n<\/div>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/03\/image-64.png\" class=\"kg-image\" alt=\"\" loading=\"lazy\" width=\"2000\" height=\"1784\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/03\/image-64.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2026\/03\/image-64.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2026\/03\/image-64.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/03\/image-64.png 2076w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>The interesting thing is, the<strong> cloned volume becomes immediately available<\/strong> to mount on an EC2 instance, even if it contains TBs of data.<\/p>\n<p>Here are the important things you should know about cloning.<\/p>\n<ul>\n<li>You cannot clone a volume across AZs or Regions.<\/li>\n<li>It currently only works with&nbsp;<strong>encrypted<\/strong>&nbsp;volumes, so the original volume must be encrypted.<\/li>\n<li>You cannot start a second clone until the first one completes initialization.<\/li>\n<li>The cloned volume is ready to use immediately, while the remaining data from the source volume continues copying<strong> in the background<\/strong>.<\/li>\n<li>The clone does not have to be the same size as the original volume. For example, if your 100 GiB volume only uses 15 GiB, you can clone it as a 15 GiB volume.<\/li>\n<\/ul>\n<h2 id=\"what-is-background-initialization\">What is Background Initialization?<\/h2>\n<p>When you clone a volume, it shows a status of <strong>&#8220;initializing&#8221;<\/strong> until the background data transfer completes.<\/p>\n<p>During this period,<\/p>\n<ul>\n<li>The volume is <strong>fully usable<\/strong> and can be attached to an EC2 instance immediately.<\/li>\n<li>Performance is limited to the <strong>baseline of the source volume<\/strong> (e.g., gp3 baseline is 3,000 IOPS \/ 125 MiB\/s).<\/li>\n<li>If your application reads a block that hasn&#8217;t been copied yet, AWS fetches it from the source volume first  and it adds slight latency.<\/li>\n<\/ul>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\"><b><strong style=\"white-space: pre-wrap;\">Best practice:<\/strong><\/b> Avoid heavy read\/write workloads on the cloned volume until initialization is complete.<\/div>\n<\/div>\n<p>Now, let us do a hands-on<\/p>\n<h2 id=\"how-to-clone-an-ebs-volume-using-aws-cli\">How to Clone an EBS Volume Using AWS CLI<\/h2>\n<p>Let look at cloning an existing EBS volume and attaching it to another instance.<\/p>\n<p>This hands-on assumes you already have:<\/p>\n<ol>\n<li><a href=\"https:\/\/devopscube.com\/use-aws-cli-create-ec2-instance\/\" rel=\"noreferrer\"><strong>AWS CLI<\/strong><\/a>&nbsp;installed and configured on your local system<\/li>\n<li>The<strong> Volume ID<\/strong>&nbsp;of the existing <a href=\"https:\/\/devopscube.com\/mount-ebs-volume-ec2-instance\/\" rel=\"noreferrer\">EBS volume<\/a><\/li>\n<li>The <strong>Instance ID&nbsp;<\/strong>of the instance you want to mount the cloned volume.<\/li>\n<\/ol>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\"><b><strong style=\"white-space: pre-wrap;\">Note:<\/strong><\/b> EBS Volume Clone requires AWS CLI v2.18 or later. If the <code spellcheck=\"false\" style=\"white-space: pre-wrap;\">copy-volumes<\/code> command is not found, upgrade your CLI first.<\/div>\n<\/div>\n<p>Now follow the steps given below.<\/p>\n<h3 id=\"step-1-clone-the-volume\">Step 1: Clone the volume<\/h3>\n<p>Now, run the following command to directly clone the volume. Replace the source volume ID with your own.<\/p>\n<pre><code class=\"language-bash\">aws ec2 copy-volumes \\\n  --source-volume-id vol-08e73a245cfa471e0 \\\n  --size 15 \\\n  --volume-type gp3 \\\n  --region us-west-2<\/code><\/pre>\n<div class=\"kg-card kg-callout-card kg-callout-card-yellow\">\n<div class=\"kg-callout-emoji\">\u26a0\ufe0f<\/div>\n<div class=\"kg-callout-text\">If the above command is not working, upgrade your <a href=\"https:\/\/devopscube.com\/install-configure-aws-cli-linux\/\" rel=\"noreferrer\">AWS CLI<\/a> to the latest version first.<\/div>\n<\/div>\n<p>Once the command executes successfully, you will receive a similar output of the created volume details.<\/p>\n<pre><code class=\"language-json\">{\n    \"Volumes\": [\n        {\n            \"SourceVolumeId\": \"vol-08e73a245cfa471e0\",\n            \"Iops\": 3000,\n            \"Tags\": [],\n            \"VolumeType\": \"gp3\",\n            \"MultiAttachEnabled\": false,\n            \"Throughput\": 125,\n            \"VolumeId\": \"vol-06622189b221b795a\",\n            \"Size\": 15,\n            \"AvailabilityZone\": \"us-west-2a\",\n            \"State\": \"creating\",\n            \"CreateTime\": \"2025-10-23T04:41:30+00:00\",\n            \"Encrypted\": true,\n            \"KmsKeyId\": \"arn:aws:kms:us-west-2:123456789:key\/a79d6e35-6397-4a88-8e51-aebee33cb434\"<\/code><\/pre>\n<blockquote><p>Note down the created volume ID (<code>vol-06622189b221b795a<\/code>)&nbsp;to attach to another instance.<\/p><\/blockquote>\n<h3 id=\"step-2-attach-the-cloned-volume-to-an-ec2-instance\">Step 2: Attach the cloned volume to an Ec2 instance<\/h3>\n<p>To mount a volume to an instance, use the following command. Replace the Instance ID (<code>i-09a1664e976dce9d7<\/code>) and the cloned volume ID&nbsp;<code>vol-06622189b221b795a<\/code>) with your own value.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\">The cloned volume and the EC2 instance must be in the same availability zone for the volume to be mounted.<\/div>\n<\/div>\n<pre><code class=\"language-bash\">aws ec2 attach-volume \\\n         --volume-id 'vol-06622189b221b795a' \\\n         --instance-id 'i-09a1664e976dce9d7'   \\\n         --device '\/dev\/sdb'<\/code><\/pre>\n<blockquote><p><strong>Note: <\/strong>If you get an error that the device path is already in use, try another path such as&nbsp;<code>\/dev\/sdf<\/code><\/p><\/blockquote>\n<p>Once the execution is completed, you will see a similar output.<\/p>\n<pre><code class=\"language-json\">{\n    \"VolumeId\": \"vol-06622189b221b795a\",\n    \"InstanceId\": \"i-09a1664e976dce9d7\",\n    \"Device\": \"\/dev\/sdb\",\n    \"State\": \"attaching\",\n    \"AttachTime\": \"2025-10-23T04:55:56.197000+00:00\"\n<\/code><\/pre>\n<h3 id=\"step-3-mount-and-verify-the-volume\">Step 3: Mount and verify the volume<\/h3>\n<p>SSH into the target Ec2 instance, where you want to mount the volume.<\/p>\n<p>Then execute the following command to list the block stores.<\/p>\n<pre><code class=\"language-bash\">sudo lsblk -f<\/code><\/pre>\n<p>The output will list the attached volumes. <\/p>\n<pre><code class=\"language-bash\">NAME          FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS\nnvme0n1                                                                              \n\u251c\u2500nvme0n1p1   xfs          \/     6bf6dcc0-0673-443a-b92a-b26a3524cf3b    8.4G    16% \/\n\u251c\u2500nvme0n1p127                                                                        \n\u2514\u2500nvme0n1p128 vfat   FAT16       92F7-4B7C                               8.7M    13% \/boot\/efi\nnvme1n1                                                                              \n\u251c\u2500nvme1n1p1   xfs          \/     6bf6dcc0-0673-443a-b92a-b26a3524cf3b                \n\u251c\u2500nvme1n1p127                                                                        \n\u2514\u2500nvme1n1p128 vfat   FAT16       92F7-4B7C           <\/code><\/pre>\n<p>Here,&nbsp;<code>nvme1n1p1<\/code>&nbsp;is the cloned volume, but it is not mounted with the file system yet.<\/p>\n<p>Create a mount directory and mount the volume<\/p>\n<pre><code>sudo mkdir -p \/mnt\/data\nsudo mount -o nouuid \/dev\/nvme1n1p1 \/mnt\/data<\/code><\/pre>\n<p><strong><em>Why <code>-o nouuid<\/code>?<\/em><\/strong> The clone has the same filesystem UUID as the source. This flag prevents a mount conflict.<\/p>\n<p>Once the mounting is completed, we can check the disk filesystem.<\/p>\n<pre><code class=\"language-bash\"> df -h<\/code><\/pre>\n<p>The following output will show the file systems and their usage.<\/p>\n<pre><code class=\"language-bash\">\nFilesystem        Size  Used Avail Use% Mounted on\ndevtmpfs          4.0M     0  4.0M   0% \/dev\ntmpfs             453M     0  453M   0% \/dev\/shm\ntmpfs             181M  452K  181M   1% \/run\n\/dev\/nvme0n1p1     10G  1.6G  8.4G  16% \/\ntmpfs             453M     0  453M   0% \/tmp\n\/dev\/nvme0n1p128   10M  1.3M  8.7M  13% \/boot\/efi\ntmpfs              91M     0   91M   0% \/run\/user\/1000\n\/dev\/nvme1n1p1    8.0G  1.6G  6.4G  20% \/mnt\/tmp<\/code><\/pre>\n<p>You should see <code>\/dev\/nvme1n1p1<\/code> listed with its size and usage. This ensures that our volume is mounted and that we can even check the data inside it.<\/p>\n<pre><code class=\"language-bash\">ls \/mnt\/tmp\/\n\nbin  boot  dev  etc  home  lib  lib64  local  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var<\/code><\/pre>\n<p>These are all the system files of the original EBS volume.<\/p>\n<h2 id=\"real-world-use-cases\">Real-World Use Cases<\/h2>\n<p>This clone eature aims to eliminate waiting time and increase productivity.<\/p>\n<p>Here are are some real-world use cases.<\/p>\n<ol>\n<li><strong>Dev\/test environment setup<\/strong>: Developers and the QA team can quickly create up-to-date copies of the production application environment to test, find bugs, and try new features without affecting the live system.<\/li>\n<li><strong>Database testing and upgrades:<\/strong> Before running a risky migration or upgrade, clone the database volume. If something breaks, your source is untouched.<\/li>\n<li><strong>Machine learning experiments<\/strong>:Data scientists and analysts also often need copies of large datasets for new machine learning experiments, so this feature is useful for them as well.<\/li>\n<\/ol>\n<h2 id=\"best-practices\">Best Practices<\/h2>\n<p>Volume cloning is designed to make development and testing workflows more efficient.<\/p>\n<p>It is not a replacement for EBS snapshots, since snapshots are secure backups stored in <a href=\"https:\/\/devopscube.com\/mount-aws-s3-bucket-to-ec2-instance\/\" rel=\"noreferrer\">Amazon S3<\/a> and can be copied to other availability zones or regions for disaster recovery.<\/p>\n<p>In terms of cost, <strong>cloning has a one-time charge<\/strong> based on the amount of data in the cloned volume, followed by the regular fees for the volume type, IOPS, and throughput.<\/p>\n<p>Although the volume can be attached and used immediately, the data may not be fully consistent until the entire data transfer is completed.<\/p>\n<p>To maintain data accuracy, it is <strong>recommended to pause the application\u2019s write operations<\/strong> during this period. <\/p>\n<p>Also, <strong>tags are not inherited <\/strong>from the source. Tag every clone at creation time with environment, owner, and expiry date.<strong> Use AWS Config rules<\/strong> or <a href=\"https:\/\/devopscube.com\/aws-tag-policy-terraform\/\" rel=\"noreferrer\">tag-based automation<\/a> to identify and remove stale cloned volumes.<\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>EBS Volume Clones removed the multi-step snapshot workflow for creating volume copies. You get an instant and point-in-time copy of EBS.<\/p>\n<p>This feature is introduced to improve the efficiency of quickly cloning volumes for testing.<\/p>\n<hr>\n<p><strong>Ngu\u1ed3n:<\/strong> <a href=\"https:\/\/devopscube.com\/clone-aws-ebs-volumes\/\" target=\"_blank\" rel=\"noopener noreferrer\">How to Clone AWS EBS Volumes Instantly Without Snapshots? \u2014 DevOpsCube<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Source: https:\/\/devopscube.com\/clone-aws-ebs-volumes\/<\/p>\n","protected":false},"author":1,"featured_media":332,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-331","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=331"}],"version-history":[{"count":0,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/331\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/media\/332"}],"wp:attachment":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}