Sharing EBS Volumes Among Instances
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 self
IMAGE 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-instances
RESERVATION r-9f3deef6 190912652296 default
INSTANCE 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-1c
VOLUME vol-4001e429 1 us-east-1c creating 2008-09-25T09:51:48+0000
Check the status of the volume:
$ ec2-describe-volumes vol-4001e429
VOLUME 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/sdh
ATTACHMENT 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-volumes
VOLUME 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 /dev
MAKEDEV 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/sdh
mke2fs 1.38 (30-Jun-2005)
/dev/sdh is entire device, not just one partition!
Proceed anyway? (y,n) Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or
180 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 /mnt
data-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/sdh
ATTACHMENT 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-volumes
VOLUME 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-1c
RESERVATION r-eb22f182 190912652296 default
INSTANCE i-5a12b233 ami-c6c622af pending gettingstarted-keypair 0 m1.small 2008-09-25T11:23:01+0000 us-east-1c
$ ec2-describe-instances
RESERVATION r-eb22f182 190912652296 default
INSTANCE 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-volumes
VOLUME vol-4001e429 1 us-east-1c available 2008-09-25T09:51:48+0000
$ ec2-attach-volume vol-4001e429 -i i-5a12b233 -d /dev/sdh
ATTACHMENT vol-4001e429 i-5a12b233 /dev/sdh attaching 2008-09-25T11:25:46+0000
$ ec2-describe-volumes
VOLUME vol-4001e429 1 us-east-1c in-use 2008-09-25T09:51:48+0000
ATTACHMENT 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.com
Last 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]# ls
lost+found readme
[root@domU-12-31-39-01-5C-76 data-store]# cat readme
This 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-5a12b233
ATTACHMENT vol-4001e429 i-5a12b233 /dev/sdh detaching 2008-09-25T11:25:46+0000
$ ec2-describe-volumes
VOLUME vol-4001e429 1 us-east-1c available 2008-09-25T09:51:48+0000
$ ec2-terminate-instances i-5a12b233
INSTANCE i-5a12b233 running shutting-down
$ ec2-describe-instances
RESERVATION r-eb22f182 190912652296 default
INSTANCE 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-instances
RESERVATION r-eb22f182 190912652296 default
INSTANCE i-5a12b233 ami-c6c622af terminated gettingstarted-keypair 0 m1.small 2008-09-25T11:23:01+0000