Sharing EBS Volumes Among Instances
In this post I share an experiment to create an EBS volume, to attach it to an EC2 instance, to mount it in the instance, to put a file on it, to unmount it, and to detach it. Afterwards the volume will be mounted in another instance (while the first instance has been terminated, because attaching volumes to different instances at the same time is impossible).
I followed the instructions given in the Elastic Block Storage Feature Guide.
Starting an Instance
Let’s see which AMIs are available:
$ ec2-describe-images -o selfIMAGE ami-c6c622af dehonk-gettingstarted/image.manifest.xml 190912652296 available private i386 machine
I launch ami-c6c622af
with Elasticfox. Let’s check the status of the instance with the
command line tools:
$ ec2-describe-instancesRESERVATION r-9f3deef6 190912652296 defaultINSTANCE i-520faf3b ami-c6c622af pending gettingstarted-keypair 0 m1.small 2008-09-25T09:50:01+0000 us-east-1c
Important to note for later is the availability zone in which the instance is running, because volumes can only be attached to instances when they live in the same availability zone.
Create the Volume
Create a volume of 1 GB in the same availability zone in which the instance resides:
$ ec2-create-volume --size 1 -z us-east-1cVOLUME vol-4001e429 1 us-east-1c creating 2008-09-25T09:51:48+0000
Check the status of the volume:
$ ec2-describe-volumes vol-4001e429VOLUME vol-4001e429 1 us-east-1c available 2008-09-25T09:51:48+0000
The volume is available now. Time to use it!
Attaching the Volume
Attach the newly created volume as device /dev/sdh
to the running instance:
$ ec2-attach-volume vol-4001e429 -i i-520faf3b -d /dev/sdhATTACHMENT vol-4001e429 i-520faf3b /dev/sdh attaching 2008-09-25T09:59:14+0000
The command returns saying that the volume is attaching. Let’s check the status:
$ ec2-describe-volumesVOLUME vol-4001e429 1 us-east-1c in-use 2008-09-25T09:51:48+0000 ATTACHMENT vol-4001e429 i-520faf3b /dev/sdh attached 2008-09-25T09:59:14+0000
While the volume was available
and attaching
before, now it is in-use
and attached
.
Formatting the Volume
Open another terminal. Connect to the instance via ssh:
$ ssh -i id_rsa-gettingstarted-keypair root@ec2-75-101-254-227.compute-1.amazonaws.com
Looking at the contents of /dev
reveals that the volume is available as device sdh
:
# ls /devMAKEDEV port ptyc1 ptye6 ptyqb ptyt0 ptyv5 ptyxa ptyzf ttya2 ttyc7 ttyec ttyr1 ttyt6 ttyvb ttyy0--- cut here for brevity ---loop7 ptyb3 ptyd8 ptypd ptys2 ptyu7 ptywc ptyz1 sdh ttyb9 ttyde ttyq3 ttys8 ttyud ttyx2 ttyz7--- cut here for brevity ---
Since a new volume is not formatted, we do that first:
# yes | mkfs -t ext3 /dev/sdhmke2fs 1.38 (30-Jun-2005)/dev/sdh is entire device, not just one partition!Proceed anyway? (y,n) Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)131072 inodes, 262144 blocks13107 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=2684354568 block groups32768 blocks per group, 32768 fragments per group16384 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376
Writing inode tables: doneCreating journal (8192 blocks): doneWriting superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.
Mounting the Volume
Finally, the volume is ready to be mounted in the instance:
$ mkdir /mnt/data-store$ mount /dev/sdh /mnt/data-store
Let’s check whether everything is as expected:
$ ls /mntdata-store lost+found$ ls /mnt/data-store/lost+found
That looks okay.
Put a file on the volume
Using vi
, I created a file named readme
with this contents:
This is an example file to show that a file persists on an EBS volume after unmounting and detaching.
Unmounting the Volume Before we stop the instance, we have to unmount the volume. From the Elastic Block Storage Feature Guide:
A volume must be unmounted inside the instance before being detached. Failure to do so will result in damage to the file system or the data it contains.
$ umount /mnt/data-store
Remember to cd out of the volume, otherwise you will get an error message umount: /mnt/data-store: device is busy
Detach the Volume
From the Feature Guide:
An Amazon EBS volume can be detached from an instance by either explicitly detaching the volume or terminating the instance.
Let’s do it by explicitly detaching it:
$ ec2-detach-volume vol-4001e429 -i i-520faf3b -d /dev/sdhATTACHMENT vol-4001e429 i-520faf3b /dev/sdh detaching 2008-09-25T09:59:14+0000
Soon the status of the volume changes form detaching
to available
:
$ ec2-describe-volumesVOLUME vol-4001e429 1 us-east-1c available 2008-09-25T09:51:48+0000
Mounting the Volume in Another Instance
Now do all the steps over again to start a new image and mount the volume. Because the volume
resides in availability zone us-east-1c
and instances and volumes have to live in the same
availability zone, we have to launch the instance in us-east-1c
.
$ ec2-run-instances ami-c6c622af -k gettingstarted-keypair -z us-east-1cRESERVATION r-eb22f182 190912652296 defaultINSTANCE i-5a12b233 ami-c6c622af pending gettingstarted-keypair 0 m1.small 2008-09-25T11:23:01+0000 us-east-1c$ ec2-describe-instancesRESERVATION r-eb22f182 190912652296 defaultINSTANCE i-5a12b233 ami-c6c622af ec2-72-44-53-70.compute-1.amazonaws.com domU-12-31-39-01-5C-76.compute-1.internal running gettingstarted-keypair 0 m1.small 2008-09-25T11:23:01+0000 us-east-1c$ ec2-describe-volumesVOLUME vol-4001e429 1 us-east-1c available 2008-09-25T09:51:48+0000$ ec2-attach-volume vol-4001e429 -i i-5a12b233 -d /dev/sdhATTACHMENT vol-4001e429 i-5a12b233 /dev/sdh attaching 2008-09-25T11:25:46+0000$ ec2-describe-volumesVOLUME vol-4001e429 1 us-east-1c in-use 2008-09-25T09:51:48+0000ATTACHMENT vol-4001e429 i-5a12b233 /dev/sdh attached 2008-09-25T11:25:46+0000
Now start another terminal to connect to the instance:
$ ssh -i id_rsa-gettingstarted-keypair root@ec2-72-44-53-70.compute-1.amazonaws.comLast login: Tue Sep 9 14:48:20 2008 from 213.49.236.209
__| __|_ ) Rev: 2 _| ( / ___|\___|___|
Welcome to an EC2 Public Image
Getting Started
__ c __ /etc/ec2/release-notes.txt
[root@domU-12-31-39-01-5C-76 ~]# mkdir /mnt/data-store[root@domU-12-31-39-01-5C-76 ~]# mount /dev/sdh /mnt/data-store[root@domU-12-31-39-01-5C-76 ~]# cd /mnt/data-store[root@domU-12-31-39-01-5C-76 data-store]# lslost+found readme[root@domU-12-31-39-01-5C-76 data-store]# cat readmeThis is an example file to show that a file persists on an EBS volume after unmounting and detaching.[root@domU-12-31-39-01-5C-76 ~]# umount /mnt/data-store[root@domU-12-31-39-01-5C-76 ~]# exit
The file we created earlier was on the volume and we could read it. This proves that we can share volumes among instances. To clean up:
$ ec2-detach-volume vol-4001e429 -i i-5a12b233ATTACHMENT vol-4001e429 i-5a12b233 /dev/sdh detaching 2008-09-25T11:25:46+0000$ ec2-describe-volumesVOLUME vol-4001e429 1 us-east-1c available 2008-09-25T09:51:48+0000$ ec2-terminate-instances i-5a12b233INSTANCE i-5a12b233 running shutting-down$ ec2-describe-instancesRESERVATION r-eb22f182 190912652296 defaultINSTANCE i-5a12b233 ami-c6c622af ec2-72-44-53-70.compute-1.amazonaws.com domU-12-31-39-01-5C-76.compute-1.internal shutting-down gettingstarted-keypair 0 m1.small 2008-09-25T11:23:01+0000 us-east-1c$ ec2-describe-instancesRESERVATION r-eb22f182 190912652296 defaultINSTANCE i-5a12b233 ami-c6c622af terminated gettingstarted-keypair 0 m1.small 2008-09-25T11:23:01+0000