Nowadays LVM has a cache feature, where we can bolt an SSD as a cache-device to a logical volume.
Let’s imagine we have the following setup:
- 4x 2TB SATA disks in RAID10 configuration, /dev/md0
- 2x 120GB SSD disks in RAID1 configuration, /dev/md1
First we’ll create the logical volume which we’ll be working with:
# pvcreate /dev/md0
# vgcreate storage /dev/md0
# lvcreate -n volume -L 4TB storage /dev/md0
Next we’ll bolt the cache-device (which should be RAID1-mirrored in case of disk failure) to the volume, first we’ll extend the volume group to contain the SSD-device:
# vgextend storage /dev/md1
Then we’ll create a cache volume and a metadata volume (there’s 1GB free on purpose):
# lvcreate -n metadata -L 1GB storage /dev/md1
# lvcreate -n cache -L 118GB storage /dev/md1
Now we’ll convert these into a cache pool (this will fail if there isn’t at least the same amount free what’s used for metadata, 1GB, because it’s used for failure recovery):
# lvconvert --type cache-pool --poolmetadata storage/metadata storage/cache
Then all what’s left is attaching the cache to a logical volume:
# lvconvert --type cache --cachepool storage/cache storage/volume
It should say “storage/volume is now cached” and lvs output should look something like this:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
cache storage Cwi---C--- 118.00g
volume storage Cwi-a-C--- 4.0t cache [storage_corig]
Oh, and if you want the cache to survive a reboot, youll need a package which provides /usr/sbin/cache_check -binary. In Debian that’s “thin-provisioning-tools”, and in RHEL/CentOS/derivatives the package is device-mapper-persistent-data.
Tests were performed on Debian testing Jessie and CentOS 7.0.1406 Core in 10/2014. Official documentation can be found here.