Ok I have now successfully migrated to zfs since I am not confident of using ufs for reliability, there is some gotchas that occured which I will mention here.
Please read everything before you consider doing this as is some gotchas.
So the process I did was as follows.
1 - Run the backup wizard under diagnostics menu to make a backup, make sure everything is included in the backup, a box is ticked by default which doesnt backup traffic usage data, I unticked it.
2 - If you have any custom files anywhere on the filesystem then back them up as they will be lost. Also if you want to preserve any logs back them up also.
3 - Download the pfsense 2.4 installer, which is on the development download section, pfsense 2.4 is required if you want native support for 4k alignment, trim and zfs.
4 - Put the installer files on your install media, in my case is a usb stick and I used rufus usb tool.
5 - Reboot the pfsense unit and boot of the install media.
6 - Choose zfs (guided) install
7 - select striped and pick your storage device
8 - enable forced 4k alignment option.
9 - GPT enable if you have UEFI bios or disable if you dont.
10 - proceed with install and let it finish and reboot
11 - after reboot access the web UI with default admin/pfsense login details.
12 - when the wizard appears ignore it and instead access the diagnostics menu and choose backup and restore.
13 - restore your backup and making sure the option to also restore packages is enabled (was enabled by default on my unit).
14 - Watch the console as it restores your packages to see if any issues.
15 - When completed the core pfsense system and all official plugins should be restored.
Gotchas
The first issue I had is after restoring my backup and it rebooted, it could not get internet access to redownload and install the packages, the reason for this is unbound was not working for 2 reasons (I initially thought was just one reason). This was because in my case dnscrypt was missing and as such I had no working dns tunnel, and also that unbound didnt start due to missing pfblockerng files causing a syntax error. I noticed on the console it was retrying every minute or so so I simply edited /etc/resolv.conf as follows to make the router use google dns temporarily.
nameserver 8.8.8.8
The restore packages process then successfully finished.
I then had to pkg install dnscrypt again, but that was all I had to do for that as the earlyshell cmd configuration was intact so on a reboot it started properly.
Unbound however was down still because it was trying to load pfblockerng dnsbl files that were missing, so again I had to temporarily enable google dns on the router manually, and then in the pfblockerng gui I manually ran the cron process, which downloaded all the lists and created its configuration files, after that unbound runs normally.
People who dont use pfblockerng dnsbl lists and dont use dnscrypt wouldnt have this problem.
I restored my custom files like custom loader.conf and services.inc (to fix unbound restarts) and all seemed well.
One final gotcha.
The traffic totals plugin is missing at this point, it was not restored when the restore wizard ran, I also forgot to backup its data when I backed up my custom files. So this plugin has to be reinstalled manually post restore.
Also I enabled a zfs feature that makes extra copies of every stored file, the command to do so is this.
zfs set copies=3 zroot
Bear in mind tho this will not make copies of existing files unless they get rewritten, only new writes have the automated copies, it is also nowhere near as good as a zfs mirror setup but is better than a plain single copy on a single drive setup. the reason to make 3 copies instead of 2 is so when zfs detects corruption in a copy it can determine the correct copy by a majority rules system where by where 2 copies match, they will be determined to be the correct copy.