I’d been thinking about this for some time, as moving my jails and small databases onto an SSD pool should have a decent performance improvement, whilst also reducing the fragmentation on my HD pool.

As fortune would have it, I had a couple of old enterprise 480GB SSD’s lying around (removed from the hot-swap cages), so thought I’d make use of two spare SATA ports on the motherboard (I still have 2 left!) and add them into the system. They are just velcroed onto the top optical drive bay housing, but that should be fine.

Creating an SSD pool, with both drives as a mirror, provides some redundancy, and moving the jails and databases across was pretty simple thanks to this post on the IXsystems forum (what would I do without it?)

I’ve copied and pasted the key steps here for my future reference:

  1. Stop all jails (Jails->View Jails)
  2. Run these commands via CLI:
  3. zfs snapshot -r APEpool0/iocage@relocate
  4. zfs send -R APEpool/iocage@relocate | zfs receive -v APEpool0s/iocage
  5. zfs get -rH -o name -s received mountpoint APEpool0s/iocage | xargs -I {} sh -c "zfs set mountpoint=/{} {}; zfs mount {};"
  6. Change the Jail Root to /mnt/APEpool0s/iocage (Jails->Configuration)
  7. Start all jails
  8. Check that everything works and destroy the original jails dataset (main_pool/jails)

I did the same for 3 database datasets I have – embydb, ncdb and wpdb for emby, Nextcloud and WordPress respectively and then had to check all of the mount points from the jails back to the pool(s), as I’d covered off here.

It does make a nice improvement, especially on the three above, where the jail and database are now on an SSD instead of the HDD pool.

So my pool layout now looks like this:

ssd pool

Actually, if you look closely you’ll realise this was taken before the final step 8 of destroying the datasets on the original pool. In this screenshot, they are still there, but they are not now!