You can use replication. It takes care of CRC during copy process so it is 99.99999% reliable, if you have ECC memory of course.
Many ways exist in the replication process, but everything start with a snapshot.
You can read on FreeNAS 9.3 documentation with the link on your Freenas GUI on the top right where the Question mark icon is displayed.
You can use automatic replication or you can use the command line.
Let say you have a Pool_A and Pool_B on same machine, Pool_B can of course be over the network too on a different FreeNAS system:
Pool_A/Dataset_1
Pool_A/Dataset_2
Pool_A/Dataset_3/Dataset_3_A
Pool_A/Dataset_3/Dataset_3_B
Pool_A/Dataset_3/Dataset_3_C
Pool_B/Dataset_X
If you only need to replicate Pool_A/Dataset_3 and it's children dataset, you can take a recursive manual snapshot of Pool_A/Dataset_3. Let's call it manual-2015-02-09.
To start replication, enter the following command:
Code:
zfs send -vR Pool_A/Dataset_3@manual-2015-02-09 | zfs receive -vF Pool_B
The command will replicate the dataset structure under Pool_A/Dataset_3 to Pool_B.
Any existing snapshots taken prior to this manual recursive one will also be replicated.
The advantage about the command line and the creation of manual snapshot is that even if you use automatic snapshot and replication, the existing manual snapshot are never going to expire, meaning that you can safely sync up to a device if it is not always available as in another server. This is good if you make replication to a hard drive for archiving purpose. Something the automatic replication cannot do correctly as it always looks at the latest snapshot, which could have expired depending on "Keep snapshot for" settings.
Once the replication is completed you will get an exact copy of the source.
If you want to update Pool_B on a regular basis, you then need to change the command to include the incremental portion as follow:
You need to create another manual recursive snapshot as above and give it the default date, or make it unique so that it doesn't match the original one. For instance, 2 weeks have passed and you want to replicate.
You take a new recursive sanpshot of Pool_A/Dataset_3 and save it under manual-2015-02-25.
The command becomes:
Code:
zfs send -vRI Pool_A/Dataset_3@manual-2015-02-09 Pool_A/Dataset_3@manual-2015-02-25 | zfs receive -v Pool_B
The zfs send option -R and -I are case sensitive and will not have the same effect as -r and -i.
The former allow you replicate everything and never remove stale snapshots on the destination (Pull in Freenas terminology).
If you do plan on backing up onto a backup drive, then you must set the Readonly option on the drive hosting Pool_B. This has to be done once before the initial replication otherwise you may have some errors during replication update regarding state of Pool_B.
Code:
zfs set readonly=on Pool_B
Of course if Pool_B is always connected, then best to use Freenas GUI automatic replication.
Let me know if you have more specific questions.