Upgrade HHD to SSD with different size

Hello everyone, I’m on TrueNas scale and have 8TBX2 HDDs as my data pool. Now I want to upgrade those with a dingle 4T SSD. I only have 1.5T of data in the pool so the SSD’s size is sufficient.

My understanding is as the sizes are quite different, I can’t just plug in my SSD and let the system to mirror it, so I have to create a new pool with the SSD and use zfs send to migrate the data. Here’s my questions:

  1. Is that (zfs send) the best way to do the migration? Are there any other options?
  2. My ultimate goal is to exactly mirror my pool (i.e. Keep all datasets, permissions unchanged), or in other words, do I need to re-config my SMB settings? How about Apps installed?

Best way is to replicate your datasets to the other pool, you can use the ui, then export your old pool, then rename the new one.

See below. I really haven’t internally integrated the new fancy vdev removal functionality yet :wink:


Well, in theory, you could add the new SSD(s) as a new vDev to the same pool, and then use ZFS Remove to remove the HDD(s) vDev. It will take time to copy over the 1.5TB of used data from the HDD vDev to the new SSD vDev. But, that should work fine.

Note that this is all on-line. No reboot or pool offline needed. (Except if you need to cold / power-off add the SSD(s).)

Further, their are limitations of ZFS Remove. If you truly have 2 x 8TB HDD in a Mirror but only 1 SSD at present, ZFS Remove probably won’t work. It needs the pool to be regular, as in 2 HDD & 2 new SSDs, both vDevs in a Mirror. Or 1 HDD & 1 new SSD.

That would be simpler than a ZFS Send & Receive.


Thank you Arwen. Yes I do have 2 x 8TB HDDs and only 1 SSD. So I guess it’s not a good idea to use ZFS remove?

Then for ZFS Send & Receive, as I asked, will the SSD that received the snapshot just work as the HDDs? For example, my SMB share path is /mnt/hdd/drive, then do I have to still need to mount the ssd under /mnt/hdd?

Well, I guess I can just try it and see :slight_smile: