This cookbook will identify the ephemeral devices available on the instance based on Ohai data. If no ephemeral devices are found, it will gracefully exit with a log message. If ephemeral devices are found, they will be setup to use LVM and a logical volume will be created, formatted, and mounted. If multiple ephemeral devices are found (e.g. m1.large on EC2 has 2 ephemeral devices with 420 GB each), they will be striped to create the LVM.
Github Repository: https://github.com/rightscale-cookbooks/ephemeral_lvm
- Chef 12 or higher
- A cloud that supports ephemeral devices. Currently supported clouds: EC2, Openstack, and Google.
- Cookbook requirements
- Platforms
- Ubuntu 12.04
- CentOS 6
Place the ephemeral_lvm::default
in the runlist and the ephemeral devices will be setup.
With the following instances, EBS volumes are exposed as NVMe block devices: c5
, c5d
, i3.metal
, m5
, and m5d
. The device names are /dev/nvme0n1
, /dev/nvme1n1
, and so on. The device names that you specify in a block device mapping are renamed using NVMe device names (/dev/nvme[0-26]n1
). https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html
This also affects ephemeral SSD devices that are always attached and for which the mapping isn't present in metadata. The current cookbook version tries to find all NVMe devices that aren't mounted.
Note 1) Instance type i3
is a special case which allows you to map the ephemeral SSDs although there's a naming mismatch /dev/sdb
vs. /dev/nvme0n1
. In this case you shouldn't "map" the ephemeral volumes when starting the instance as they are always attached and will only be detected if mapping is not present.
Note 2) To keep things simple if you map additional EBS volumes to the instance types mentioned above the cookbook won't make a distinction between ephemeral devices and EBS volumes and will include all in the logical volume.
node['ephemeral_lvm']['filesystem']
- the filesystem to be used on the ephemeral volume. Default:'ext4'
node['ephemeral_lvm']['mount_point']
- the mount point for the ephemeral volume. Default:'/mnt/ephemeral'
node['ephemeral_lvm']['mount_point_properties']
- the options used when mounting the ephemeral volume. Default:{options: ['defaults', 'noauto'], pass: 0}
node['ephemeral_lvm']['volume_group_name']
- the volume group name for the ephemeral LVM. Default:'vg-data'
node['ephemeral_lvm']['logical_volume_size']
- the size to be used for the ephemeral LVM. Default:'100%VG'
- This will use all available space in the volume group.node['ephemeral_lvm']['logical_volume_name']
- the name of the logical volume for ephemeral LVM. Default:'ephemeral0'
node['ephemeral_lvm']['stripe_size']
- the stripe size to be used for the ephemeral logical volume. Default:512
node['ephemeral_lvm']['additonal_devices']
- array of additional devices to add to stripe. Use if we are not finding them in metadata. default: []
This recipe sets up available ephemeral devices to be an LVM device, formats it, and mounts it.
Author:: RightScale, Inc. (cookbooks@rightscale.com)