Hardware RAID Configuration: Mixing Drive Speeds and Sizes in Mirrored Arrays Without Performance Impact


2 views

In a hardware RAID 1 (mirrored) configuration, each drive pair operates independently. Your proposed setup with three distinct mirrored pairs (2x500GB@7200rpm, 2x500GB@7200rpm, 2x1TB@5400rpm) is architecturally sound. The array controller treats each mirror set as a separate logical unit.


# Pseudocode for RAID controller behavior
for mirror_set in [set_a, set_b, set_c]:
    if mirror_set.drives[0].size != mirror_set.drives[1].size:
        use_capacity = min(mirror_set.drives[0].size, mirror_set.drives[1].size)
    else:
        use_capacity = mirror_set.drives[0].size

Each logical drive maintains its own performance profile:

  • Drive A/B (500GB@7200rpm): ~150MB/s sequential read, ~4ms access time
  • Drive C (1TB@5400rpm): ~100MB/s sequential read, ~8ms access time

Modern RAID controllers (LSI MegaRAID, Adaptec) implement independent channel management. Verify your controller supports:


# Check controller capabilities (Linux example)
$ sudo storcli /c0 show all | grep "Mix Drive Support"
Mix Drive Support in VD : Yes

When configuring through CLI (using MegaCLI as example):


# Create first mirror pair (500GB)
$ sudo megacli -CfgLdAdd -r1 [252:0,252:1] -a0

# Create second mirror pair (500GB)  
$ sudo megacli -CfgLdAdd -r1 [252:2,252:3] -a0

# Create third mirror pair (1TB)
$ sudo megacli -CfgLdAdd -r1 [252:4,252:5] -a0

# Verify configuration
$ sudo megacli -LDInfo -Lall -a0

Test each logical volume independently:


# Benchmark Drive A/B (7200rpm)
$ sudo hdparm -tT /dev/sda
Timing cached reads:   18000 MB in  2.00 seconds
Timing buffered disk reads: 156 MB in  3.00 seconds

# Benchmark Drive C (5400rpm)  
$ sudo hdparm -tT /dev/sdc
Timing cached reads:   18000 MB in  2.00 seconds  
Timing buffered disk reads: 102 MB in  3.00 seconds

For optimal results, implement usage-based partitioning:


# /etc/fstab example for tiered storage
UUID=xxxx-xxxx  /fast_storage  ext4  noatime,discard  0  2  # 7200rpm drives
UUID=yyyy-yyyy  /bulk_storage  ext4  noatime,lazytime 0  2  # 5400rpm drives

In hardware RAID configurations, each mirror pair operates independently when properly implemented. Your proposed setup with:

Logical Drive 1: 2x 500GB 7200rpm (Mirror)
Logical Drive 2: 2x 500GB 7200rpm (Mirror) 
Logical Drive 3: 2x 1TB 5400rpm (Mirror)

is technically valid. The performance myth you encountered stems from confusing RAID 0 striping behavior with RAID 1 mirroring.

Most enterprise RAID controllers handle mixed-speed drives through per-array settings. Here's how to verify using MegaCLI (LSI example):

# Check existing array properties
megacli -LDInfo -Lall -aAll

# Expected output for proper configuration:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 465.25 GB
State               : Optimal
Strip Size          : 64 KB
Number Of Drives    : 2
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU

The slower 5400rpm array won't impact your 7200rpm arrays because:

  • Each logical drive maintains separate queue depth
  • Modern controllers process I/O per-array
  • No striping exists between different logical drives

Use fio to test real-world impact:

# Test 7200rpm array (sequential writes)
fio --name=write_test --rw=write --size=1G --directory=/mnt/fast_array \
    --bs=128k --ioengine=libaio --iodepth=32 --direct=1

# Test 5400rpm array (sequential writes)  
fio --name=write_test --rw=write --size=1G --directory=/mnt/slow_array \
    --bs=128k --ioengine=libaio --iodepth=32 --direct=1

Your 1TB drives will be fully available (minus RAID overhead) because:

# Calculate usable space
Drive capacity: 1000GB
RAID 1 effective: 1000GB (mirrored)
Format overhead: ~930GB usable (varies by FS)

For Dell PERC controllers, verify using:

omreport storage vdisk
# Output should show independent parameters per array:
ID                              : 0
Status                          : Ok
Name                            : FastArray
State                           : Ready
Layout                          : RAID-1
Size                            : 465.25 GB (499,555,098,624 bytes)

When expanding later, maintain speed groups:

  • Replace both 500GB drives in a mirror simultaneously with larger 7200rpm
  • Never mix 5400rpm and 7200rpm in same mirror pair
  • Rebuild times will differ based on drive speeds