How to use "Instance Store Volumes" storage in Amazon EC2?

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


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:

  1. Check the device name

    sudo fdisk -l

  2. Make directory to where you want to mount the volume

    sudo mkdir /mnt

  3. 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

  4. Mount volume

    sudo mount -t ext4 /dev/xvdj /mnt

  5. 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

  6. 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