Say I have some partitions; one on a SATA drive and one on an SSD. I want to create a "virtual" hybrid disk. Is this possible?
If you have a set of files for which you need low latency, you can establish a RAID-1 volume that mirrors the SSD content on a hard disk. Declare the hard disk component as “write-mostly”, so that the SSD will be favored when reading. For example, if
sda is your SSD and
sdb is your hard disk, create a partition
sda1 that covers the whole drive, create a partition
sdb1 of the same size, and create a RAID volume with
mdadm --create -l 1 -n 2 /dev/md0 /dev/sda1 --write-mostly /dev/sdb1
There is flashcache. It is used by Facebook to accelerate DB-storage systems.
I haven't tried it yet, so your mileage may vary.
Since Linux 3.9 dm-cache has been merged into the mainline tree. As per the documentation, it's specifically designed for this purpose.
It aims to improve performance of a block device (eg, a spindle) by dynamically migrating some of its data to a faster, smaller device (eg, an SSD).
It will also provide write caching to some extend:
If writeback, the default, is selected then a write to a block that is cached will go only to the cache and the block will be marked dirty in the metadata.
About the virtual hybrid disk you'd like to see:
This device-mapper solution allows us to insert this caching at different levels of the dm stack, for instance above the data device for a thin-provisioning pool.
In other words, the dm-stack lets you use any block device/partition to become a single cached virtual disk as a storage device, just like a
/dev/md0 in a software raid set.