2026-05-18 18:20:57 +01:00
2026-05-18 18:20:57 +01:00

Custom RAID Storage Solution

Motivation

The server that runs tobiastime.xyz and various services I utilize daily is actually a SFF PC from 2012. Due to it's tiny size I can't fit harddrives within the machine's case, they must exist outside of it.

Previously I utilized an external USB drive bay for mass storage, however I wanted to implement redundancy and fault tolerance for my disks. Due to my device's relatively weak CPU software level RAID via mdadm was out of the question, I needed a dedicated hardware controller.

From what I researched there does not exist a consumer-grade external USB drive bay that supports RAID and can house as many drives as I wish to connect (8). Consequently I began to blueprint my custom RAID storage solution. I had two demands from the solution, #1 that it functions, and #2 that it is affordable.

Overview

ATX PSU and SFF PC receive power from mains
            ↓
ATX Breakout Board activates PSU 
            ↓
6 pin power supply cables provide power to SATA drives from ATX PSU
            ↓
SATA breakout cables connect from drive data pins to external facing SAS ports on RAID card 
            ↓
USB fan plugged into PC port and bound by silicone adhesive to heatsink cools RAID card 
            ↓
RAID controller / array is managed from within the Linux OS utilizing MegaCLI

Hardware

  • 8x 4TB WD HDDs
  • 1x LSI MegaRAID SAS 9286-8e PCIe card
  • 1x Semi-Modular ATX PSU
  • 1x ATX Breakout Board
  • 2x Mini-SAS 26 pin to 4X SATA 7 pin breakout cable
  • 2x ATX PSU 6 pin to 4X SATA 15 pin power cable
  • 1x 40mm 5v USB fan
  • 1x 3.5 inch HDD enclosure holding 8 drives

Raid Array Configuration

  • Controller: LSI MegaRAID SAS 9286-8e
  • RAID Level: RAID 6 (dual parity)
  • Total storage: 32TB raw, 24TB usable

I chose RAID 6 as the drives which I am using within the array were sourced 2nd hand, I am willing to sacrifice storage for the safety and redundancy dual parity provides with these riskier drives.

Useful Aliases

Within my .bashrc file I created a few useful quick hand aliases as I find MegaCLI's syntax to be rather obtuse and non-standard.

alias raidtemp="sudo megacli -AdpAllInfo -aAll | grep -i 'roc'"

This lists the current temperature of the RAID card's controller. It's something I wanted to monitor, as initially, when I first plugged the card into my SFF PC it was reaching temperatures above 90 degrees. This is due to the fact these cards are typically created with the intention of being placed in extremelly well cooled servers not a SFF PC from 2012. After binding a 40mm USB fan with silicone adhesive directly onto the card's heatsink its operating temperatures became much more acceptable sitting around 60 degrees or so.

alias raidls="sudo megacli -PDList -aALL | grep -E 'Slot Number|Firmware state|S.M.A.R.T|Temperature'"

This condenses MegaCLI's default detailed information about drives within the array to just the relevant information I am interested in monitoring, namely the drive's number, if it's online, if it has any S.M.A.R.T warnings and it's temperature.

alias raidinfo="sudo megacli -LDInfo -Lall -aALL"

This provides information about the array itself including the array's usable size, parity size, sector size, state and encryption type.

Description
No description provided
Readme 591 KiB