I think FreeNAS rocks and ZFS is cool too. They are working together now quite solidly using the FreeNAS nightly builds.
I think I’ve come up with a setup to use FreeNAS and ZFS so you can have a safety net of using RAID 5 or 6 under ZFS and expand ability for the future.
Currently you can’t simply add a vdev to an existing ZFS pool, you can add larger drives to a Raid 5 or 6 vdev and increase the vdev size and therefore the pool will increase as well. But to really gain space in a raid 5 or 6 system you should swap out all the drives to keep them all the same otherwise you will lose a lot of storage space. See this calculator and put in different size drives and see the bottom about how much space is wasted.
I think the way to go is to create two pools of similar size and just rsync them nightly.
Let’s say you have a bunch of old drives lying around and you want to use them for you FreeNAS and you also want to make sure you don’t lose data (very important).
For example you have 5 drives, 4 old IDE drives of different sizes (80 Gig, 120 Gig, 200 Gig and 250 Gig) and you also have 1 500 GIG SATA drive. Once you have FreeNAS booting from a USB thumb drive you will free up the four IDE ports on the motherboard. So you connect all 5 drives to your computer.
Now calculate how best to split up the drives so you have two equal (or as close as you can) half’s of storage space. In the example above we have a total of 1150 Gigs, so half is 575 Gigs. So we would make two ZFS pools – pool0 would be (120 Gig, 200 Gig and 250 Gig) drives. pool1 would be the 80 Gig and the 500 Gig drive.
So we create a vdev0 with the 120,200 & 250 Gig drives striped together. Then create vdev1 with the 80 & 500 Gig drives striped together. Next make pool0 from the vdev0 and pool1 from the vdev1 (keep it simple).
Create an rsync job to backup pool0 to pool1 every night and you now have a backed up system that is fault tolerant of one drive (even more if they are in the same pool). Make sure to rsync nightly from pool0 to pool1 and only make pool0 available to the network, pool1 will be invisible to everyone on the network.
The beauty of this setup is it will let you expand as you get larger drives and also is fault tolerant.
If one drive dies you simply delete the pool and vdev. Replace the drive and create a new vdev and pool and do a manual rsync from the good pool to the newly created pool and your done.
For example the 80 Gig drive dies in pool1 from above so we lose pool1. We still have all of our data on pool0. So we delete pool1 and vdev1. Remove the 80 Gig drive and replace it with a cheap new 300 Gig drive. Make a new vdev1 striping the 500 Gig and our new 300 Gig drive to give us an 800 Gig vdev1. Create pool1 with the vdev1. Next we do a manual rsync from pool0 to poo1 once it completes we are back up and good to go with fault tolerance again. Make sure to rsync nightly again from pool0 to pool1 and only make pool0 available to the network, pool1 will be invisible to everyone on the network.
Now we are running with pool0 at 570 Gigs and pool1 at 800 Gigs. We found a great deal on a 500 Gig SATA drives and picked one up. So no we can add it to our ZFS system.
We delete pool0 and vdev0. Add the 500 Gig drive to the computer and install it as a new ZFS drive. Now recreate vdev0 with the 120, 200, 250 and our new 500 Gig drive. Create pool0 from our new vdev0 and do a manual rsync from pool1 to pool0. Once rsync completes we’re good to go and now have over 1 Terabyte of storage to use for pool0 and 800 Gigs on pool1. So once we get close to the 800 Gig point with pool0 then we must add another drive to pool1 to keep up and so on…
These are the benefits of this system:
-No need to manually backup all your data and re-copy it back again.
-Let’s you efficiently use hard drive space at any given time.
-Is fault tolerant of one bad drive maybe more if they are on the same ZFS pool (you could go overkill and have each pool it’s own raid 5 or 6 vdev)
-Using ZFS your data is ensured to be stored without error (checksums and scrubbing)
I’m in the middle of rsyncing a setup right now just as I explained above. I’ll post if I come across anything more of interest on this subject.