The first modular storage array I ever serviced taught me something important: nearly every component is designed to be removed, replaced, or expanded without taking the whole system down. That’s the entire point of “modular” — controllers, power supplies, drives, and network modules are all field-replaceable units (FRUs) engineered for hot-swap operation. In this article I’ll cover the components that make up a modern modular storage array, how to install them, and how to maintain them properly over their lifecycle.
What Makes a Storage Array “Modular”
A modular storage array is built from independently replaceable components rather than a fixed, monolithic chassis. This design philosophy exists specifically to support:
- Non-disruptive maintenance — replacing a failed component without an outage.
- Scalability — adding capacity or performance incrementally rather than forklift-upgrading the whole system.
- Redundancy — every critical component exists in at least a pair, so a single failure doesn’t cause data loss or downtime.
Core Components of a Modular Storage Array
Controllers (Storage Processors)
The controller is the “brain” of the array — it runs the storage operating system, handles I/O processing, RAID/erasure coding calculations, deduplication, replication, and presents storage to hosts. Enterprise arrays almost universally ship with dual, active-active or active-passive controllers for redundancy.
Controller Responsibilities:
- Host-facing protocol termination (FC, iSCSI, NFS, SMB)
- RAID/erasure coding parity calculation
- Cache management (read/write cache, often with battery/supercap-backed NVRAM)
- Data services: dedup, compression, snapshots, replication
- Management interface (CLI, REST API, GUI)
Installation notes: Controllers typically slide into the rear of the chassis and connect via a midplane — I always verify firmware compatibility between controllers before installing a replacement or second unit, since mismatched firmware versions are a common cause of a controller failing to properly join the active-active pair.
Drive Shelves (Disk Shelves / DAEs)
Disk Array Enclosures (DAEs) or drive shelves house the physical media (HDD/SSD/NVMe) and connect back to the controllers via SAS, FC, or increasingly NVMe-oF expansion links.
# Example: NetApp ONTAP - viewing shelf inventory and status
storage shelf show
storage shelf show -shelf 1 -fields state,disk-count
# Example: Dell EMC PowerStore - checking enclosure status via CLI
pstcli enclosure show
Installation notes: When adding a new shelf, I always follow the vendor’s specified cabling order (SAS expansion typically requires connecting to the last shelf in the existing chain, in a specific port order) and confirm the shelf is running compatible firmware before it’s brought online.
Drives (HDD/SSD/NVMe)
Covered in more depth in my disk types article, but from an array-component perspective: drives are the most frequently replaced FRU in any storage array, simply due to volume — an array can have dozens to hundreds of drives, each with its own failure probability.
# Example: checking drive health/status
storage disk show -state broken
storage disk show -field "serial-number,model,failed"
Power Supply Units (PSUs)
Modular arrays use redundant, hot-swappable PSUs — typically N+1 or 2N configurations, fed from separate PDUs for A/B power redundancy.
PSU Installation Checklist:
[ ] Confirm PSU model/wattage matches chassis specification
[ ] Insert at an angle if required by chassis design, then push firmly until latch engages
[ ] Confirm status LED transitions to steady green (or vendor-specific "healthy" indicator)
[ ] Verify redundant PSU pair reports balanced load in management software
Fan Modules
Cooling fan modules are typically hot-swappable and, like PSUs, deployed with N+1 redundancy. I always replace a failed fan module promptly — a single fan failure increases load (and thus wear and noise) on the remaining fans, and prolonged operation in a degraded cooling state accelerates component aging across the whole shelf.
I/O Modules / Host Adapters
Modular arrays typically support swappable I/O modules to change or add front-end connectivity — for example, swapping a 16G FC module for a 32G FC module, or adding an additional 25GbE iSCSI module for expanded host connectivity.
Common I/O Module Types:
- FC target modules (8G/16G/32G)
- iSCSI/Ethernet modules (10G/25G/100G)
- SAS expansion modules (for shelf connectivity)
- NVMe-oF/RoCE modules (for high-performance front-end connectivity)
Installation notes: Most arrays require the corresponding controller (or the entire controller pair, one at a time for non-disruptive upgrades) to be aware of the new module via a firmware/config refresh — I always check the vendor’s compatibility matrix before installing a new I/O module type, since not every controller model supports every module.
Cache and NVRAM Modules
Many arrays use battery-backed or supercapacitor-backed NVRAM/cache modules to protect in-flight write data against power loss. These are critical enough that I treat any cache module fault as a high-priority event — a cache module failure can force the array into “write-through” mode (writes go directly to disk rather than being acknowledged from cache), which significantly impacts write performance until resolved.
Installation Workflow for a New Modular Array
A general workflow I follow, based on common enterprise array deployments:
- Pre-installation planning — rack space, power circuits (A/B redundancy), cabling paths, and environmental checks (see my earlier articles on safety and environmental concerns).
- Physical rack mounting — controllers and base shelf first, following vendor rail kit instructions and torque specifications.
- Cabling — power (both A and B feeds), management network, front-end host connectivity (FC/iSCSI/Ethernet), and back-end shelf expansion cabling.
- Initial power-on and controller initialization — typically via a serial/management port or a guided wizard (e.g., NetApp System Setup, Dell EMC Unisphere Initial Configuration Wizard).
- Firmware baseline verification — confirming all components (controllers, shelves, drives, I/O modules) are on the vendor-recommended firmware baseline before going into production.
- Storage pool/aggregate creation — configuring RAID groups, aggregates, or storage pools according to the planned protection level.
- Host connectivity configuration — zoning (FC), iSCSI target/initiator setup, or NFS/SMB export configuration.
- Validation testing — path failover testing, controller failover testing, and baseline performance testing before cutting production traffic over.
Non-Disruptive Maintenance Procedures
The entire value proposition of modular design is realized in how maintenance is performed:
# Example: NetApp ONTAP - non-disruptive controller firmware upgrade check
system node upgrade-revert show
# Verify HA (High Availability) pair status before any maintenance
storage failover show
# Example: Dell EMC PowerStore - checking appliance health before component replacement
pstcli appliance show
Best practices I follow for any hot-swap maintenance:
- Always verify redundancy status first — never replace a component if its redundant partner is also currently degraded or offline; that turns a routine maintenance task into a potential outage.
- Follow the exact removal/insertion sequence the vendor specifies — some arrays require waiting a minimum interval between removing and reinserting a component to avoid confusing the controller’s device enumeration.
- Monitor post-replacement resync/rebuild — after replacing a drive or shelf component, confirm RAID rebuild or resync completes successfully before considering the maintenance complete.
- Update firmware in a rolling fashion — one controller at a time in an HA pair, confirming failover and stable operation before proceeding to the second controller.
Capacity Expansion (Scale-Up vs. Scale-Out)
Modular arrays generally support two expansion models:
| Model | Description | Typical Use Case |
|---|---|---|
| Scale-up | Adding drive shelves to existing controllers | Capacity growth within existing performance headroom |
| Scale-out | Adding additional controller/node pairs to a cluster | Both capacity AND performance growth (common in NetApp ONTAP clusters, Dell PowerScale, etc.) |
I always check controller-level resource headroom (CPU, cache, front-end port availability) before assuming a simple shelf addition (scale-up) is sufficient — sometimes the array needs a scale-out node addition instead, especially if the existing controllers are already CPU or cache-bound.
Monitoring Component Health
# Example: general health/alert check across multiple platforms
# NetApp
system health alert show
system health status show
# Dell EMC
pstcli alert show
# HPE 3PAR/Primera
showalert
I integrate array-level health alerts into centralized monitoring (SNMP traps, syslog, or vendor-specific APIs feeding into tools like SolarWinds, Zabbix, or vendor DCIM/AIOps platforms) rather than relying on manually checking each array’s local management console.
Common Mistakes I See
- Replacing a failed component without first confirming its redundant partner’s health, risking a compounding failure.
- Installing an I/O module without checking the controller compatibility matrix, leading to it not being recognized.
- Skipping firmware baseline verification on new shelf/drive additions, introducing a mismatched firmware environment.
- Not monitoring post-replacement rebuild/resync completion, and considering the job “done” prematurely.
- Ignoring cache/NVRAM module alerts because the array “still seems to be working,” missing the significant performance degradation happening in write-through mode.
Frequently Asked Questions
Can I replace a controller without downtime? In a properly configured HA pair, yes — the partner controller takes over I/O processing during the replacement, though I always schedule this during a maintenance window regardless, since failover itself carries some risk.
How do I know if my array needs scale-up or scale-out expansion? Check current controller CPU, cache utilization, and front-end port saturation. If those are healthy and you just need more capacity, scale-up (adding shelves) is usually sufficient; if controllers are resource-constrained, scale-out is the better path.
What’s the risk of mixing drive firmware versions within an array? Some platforms tolerate it during a rolling upgrade window, but I always aim to bring all drives of the same model to a consistent firmware baseline as soon as practical, since mismatched firmware has been a documented root cause of subtle performance and compatibility issues in several vendor advisories.
Is it safe to add a drive shelf while the array is under production load? Generally yes, that’s exactly the “modular” design intent, but I still schedule it during lower-load windows when possible, since the shelf discovery and any subsequent rebalancing can add incremental I/O load.
Summary
Modular storage array components — controllers, drive shelves, drives, PSUs, fans, I/O modules, and cache/NVRAM modules — are designed for redundant, hot-swappable operation, which is what enables true non-disruptive maintenance and incremental scaling. Getting installation and maintenance right comes down to disciplined pre-checks (redundancy status, firmware compatibility), following exact vendor procedures for hot-swap operations, and verifying post-maintenance states (rebuilds, resyncs, failback) before considering any task complete.
References
- NetApp ONTAP Hardware Universe and installation documentation (netapp.com)
- Dell EMC PowerStore/Unity Installation and Service Guides (dell.com)
- HPE Primera and 3PAR Service Guides (hpe.com)
- IBM Storage FlashSystem hardware documentation (ibm.com)
- SNIA modular storage architecture resources (snia.org)