To be honest, 4 TB of storage isn't really necessary for home usage. However, I like to collect movies in full DVD or HD quality and so I need some storage.
I decided to build myself a NAS box based on Debian Etch. Samba is used to allow clients to access the data. The machine itself was initially based on 4 x 0.5 TB disks using the four SATA ports on the mainboard. With Linux build-in support for software RAID, I created a RAID 5 array, giving me 1.5 TB of storage space. Since a single movie is around 4 GB, the 1.5 TB turned out to become rather tight.
So I bought 4 x 1 TB disks and a Highpoint RocketRaid 2320 controller (SATA 4x). I put all 8 disks on this controller.
I wanted to create a single RAID 6 array using both the 1 TB disks and the 0.5 TB disks. I didn't want to create two separate array's because although it would have provided additional space, it wouldn't have given me the same safety level as RAID 6 does.
I mainly chose for RAID 6 since I cannot afford a backup solution for this amount of data. I'm aware that RAID is no substitute for a proper backup, but it's an accepted risk for me.
Using both 1 TB disks and 0.5 TB disks, how to create a RAID 6 array using different drive sizes? The solution is fairly simple. Just put two 0.5 TB disks together in one RAID 0 volume and you'll have a 'virtual' 1 TB disk. Since I had four 0.5 TB disks, I could create 2 'virtual' 1 TB disks.
The only downside is that I had to skim a little bit of storage capacity of the native 1 TB drives, because 2 x 0.5 TB provides slightly less storage space than a single 1 TB disk. We're talking about something like 50 MB here, so It's not a big deal in my opinion.
The funny thing is that this array actually performs rather well. The disks are connected using a HighPoint RocketRaid 2320 controller. This controller is used just for it's SATA-ports, the on-board RAID functionality is not used. For RAID, I use Linux software RAID, using mdadm. This is how the RAID 6 array looks like:
server:~# mdadm --detail /dev/md5 /dev/md5: Version : 00.90.03 Creation Time : Thu Jul 24 22:40:26 2008 Raid Level : raid6 Array Size : 3906359808 (3725.40 GiB 4000.11 GB) Device Size : 976589952 (931.35 GiB 1000.03 GB) Raid Devices : 6 Total Devices : 6 Preferred Minor : 5 Persistence : Superblock is persistent Update Time : Sun Aug 10 15:36:18 2008 State : clean Active Devices : 6 Working Devices : 6 Failed Devices : 0 Spare Devices : 0 Chunk Size : 128K UUID : 0442e8fa:acd9278e:01f9e43d:ac30fbff (local to host server) Events : 0.14170 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 1 active sync /dev/sdb1 2 8 33 2 active sync /dev/sdc1 3 8 49 3 active sync /dev/sdd1 4 9 0 4 active sync /dev/md0 5 9 1 5 active sync /dev/md1
And this is how this array performs:
server:~# dd if=/storage/test.bin of=/dev/null bs=1M 10000+0 records in 10000+0 records out 10485760000 bytes (10 GB) copied, 45.7107 seconds, 229 MB/s server:~# dd if=/dev/zero of=/storage/test.bin bs=1M count=10000 10000+0 records in 10000+0 records out 10485760000 bytes (10 GB) copied, 81.0798 seconds, 129 MB/s
With 229 MB/s read performance and 129 MB/s write performance using RAID 6, I think I should be content.