Originally Posted by axipher
These are all great points. So I think I've decided on running off a USB drive, I'll just find a mini internal USB adapter that provides a USB port directly off the header with no cable so that the USB drive is nice and secure.
How easy is ZFS to expand? Let's say I start with 4x 2 TB drives and want to add another 4, and maybe another 2 down the road?
Very easy - that's one of the reasons why I went for it myself.
In fact I've recently expanded it myself: I had 3x 1TB disks in a raidz1 which gave me about 1.8TB of storage.
Last month I added another 3x 1TB disks as another raidz1 and added it to the same ZFS pool - thus doubling the available storage space.
Ideally you want to add disks in a minimum of 3's otherwise you're just mirroring disks. The reason being a mirror of two 1TB disks will give you 1TB. But an array of three 1TB disks will give you ~1.8TB. Essentially you're nearly doubling your storage by adding a disk while still retaining a redundancy.
My array looks like this:
scrub: scrub completed after 5h14m with 0 errors on Wed Apr 11 06:15:36 2012
NAME STATE READ WRITE CKSUM
zprimus ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad10 ONLINE 0 0 0
ad14 ONLINE 0 0 0
ad12 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad2 ONLINE 0 0 0
ad4 ONLINE 0 0 0
ad6 ONLINE 0 0 0
errors: No known data errors
You can mix and match different arrays in a pool (eg you can have a 3 disk raidz1 and then add 2 more mirrored disks to have a 5 disk pool). Just make sure you add them to the same storage pool otherwise they will end up being separate entities (ie the storage will not be combined).Just another quick point:
It's not been mentioned already (that I've seen) but I would advise mix different batches of HDDs. The reason being that a dodgy batch can (and often does) fail around the same sort of time frames. So you could have multiple disks fail within the same few days / weeks. Which means you could end up loosing disks quicker than you can replace them and thus risk loosing more disks than your array has redundancy for (which, obviously, will mean data loss). If you have a mix of different batches, then you negate the risk of a dodgy batch killing your entire array.