How to use "Instance Store Volumes" storage in Amazon EC2?
Solution 1
The use of instance-local storage that is not persistent when an instance is stopped is pretty simple: It's a very large chunk of space useful for transient things. They're the perfect target for mounting to /tmp
, and is extremely useful if your server handles very large files transiently.
For example, if you were building a group of instances to do voice-to-text translation of uploaded video-files, instance-local storage would be just the thing you want to put the in-process files on. It may be there for a few hours while the file is processed, but once it's done it can be deleted and another one taken up. You don't need EBS for that, and it's a lot cheaper to run that kind of storage out of instance-local rather than EBS.
Instance-local storage is meant to be used as scratch-space for running processing, not long-term storage. If your workload doesn't use scratch-space for anything, or what it needs is so small as to not be significant, then it isn't a good fit for you.
Solution 2
If it's not already mounted under e.g. /mnt and if it doesn't have a filesystem created already then do:
Check the device name
sudo fdisk -l
Make directory to where you want to mount the volume
sudo mkdir /mnt
Create filesystem on your volume (make sure you choose the correct volume because this creates a new file system on the volume)
sudo mkfs.ext4 /dev/xvdj
Mount volume
sudo mount -t ext4 /dev/xvdj /mnt
If you want to preserve the mount after e.g. a restart, open /etc/fstab and add the mount to it
echo "/dev/xvdj /mnt auto noatime 0 0" | sudo tee -a /etc/fstab
Make sure nothing is wrong with fstab by mounting all
mount -a
Solution 3
I created a script for Ubuntu that can be run at boot and after a start/stop cycle since in the world of AWS those are two very different things. When you reboot you still have the same ephemeral disk and all you have to do is mount (/etc/fstab should handle this automatically) but when an instance is stopped and then restarted you get a new unformatted ephemeral disk which needs more love to get ready for use. As long as you have the /etc/fstab entry correct you can run this at any time and it will mount/format the device as needed. it will take a parameter of the mount point but if not provided it will assume /mnt You can call the script mount_ephemeral.sh and run as root in a startup service.
#!/bin/sh
set -e
mountPoint=${1:-'/mnt'}
rawDevice=$(grep "\s$mountPoint\s" /etc/fstab |cut -f1)
#echo checking $mountPoint on $rawDevice
[ "$rawDevice" = "" ] && { echo -e "$mountPoint not in /etc/fstab"; exit 1; }
mountpoint -q $mountPoint
[ "$?" = "0" ] && { echo -e "$mountPoint mounted"; exit; }
hasFS=$(blkid |grep $rawDevice)
[ ! "$hasFS" = "" ] && { echo -e "$mountPoint has FS:$hasFS"; mount $mountPoint; exit; }
echo initializing $mountPoint on $rawDevice
mkdir -p $mountPoint
mkfs.ext4 $rawDevice
mount $mountPoint
chmod 777 $mountPoint
exit 0
rahulg
Updated on September 18, 2022Comments
-
rahulg over 1 year
According to AWS I got 850 GB storage with the Medium EC2 server. But when i create an Amazon Linux AMI, I am unable to use the 850 GB provided.
While creating it does show in Storage Device Configuration in Instance Store Volumes that its device will be located at /dev/sdb , but when I start the VM , I just find /dev/sda1.
Can you please help me in mounting this storage? Thank You
Also, when Amazon claims that instance storage is not safe for long term use and should prefer using EBS, then what is the point of those 850 GB?
Thanks
-
Eric Hammond over 11 yearsWhat specific instance type are you trying to run? c1.medium? m1.medium? something else?
-
Eric Hammond over 11 yearsHere are two great resources for learning about instance storage on EC2: docs.amazonwebservices.com/AWSEC2/latest/UserGuide/… and docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
-
-
Eric Hammond over 11 yearsEphemeral storage or instance-store DOES persist across reboots of an instance! It does not persist across a stop/start, nor a termination, nor some instance hardware failures. Here's an article I wrote on the difference between reboot and stop/start: alestic.com/2011/09/ec2-reboot-stop-start
-
Eric Hammond over 11 yearsDepending on the instance type, you first need to attach the instance store volumes to the instance by using the block-device-mapping options. If you don't do this, you may not even see the devices under /dev
-
Peter V. Mørch over 9 years@EricHammond's comment was really the answer to my quest - I didn't see them anywhere - even in
fdisk -l
-
volker238 over 7 yearsIf you don't see the device try using
lsblk
. -
MikeB over 5 yearsThese instructions mount the volume for me, but trying to write a new file to the volume gives "access denied". I can't sort out what's wrong with the permissions. Any ideas?
-
RichVel about 5 years
lsblk -f
is the best way to find disk volumes - any volumes that are mounted will be shown with the mount path, and it shows the labels for volumes (recommended to use UUIDs or labels when mounting filesystems on Linux). -
RichVel about 5 yearsI prefer not to use
/mnt
as a mount point for volumes, because the convention is that/mnt/foo
is used for each volume. If you have to mount another volume at some point as say/mnt/bar
, that would mean that unmounting/mnt
volume can't be done while/mnt/bar
is mounted. Thegrep
is dangerous if you are using/mnt
and there are mount points such as/mnt/foo
, since/mnt
could match several lines - so the script might in some cases mount or mkfs the wrong disk. -
DanJGer about 5 yearsIt won't find other similar mounts since it has to match exactly. The issue is that the whitespace used in your fstab needs to match the quoted value in the grep. I've updated to use
\b
but YMMV. The/mnt
is just a default you can change yourself and is only an example. Additionally, you can pass in a parameter to the script and it will use that mount point instead. I am going to add in theset -e
so that any failure terminates the whole script -
DanJGer about 5 yearscorrection: changed from
\b
to\s