A hot-swap drive cage turns the 5.25-inch bays of an old tower into front-loading NAS bays, and a drive swap then takes seconds. When we pulled one disk from a running four-disk RAIDZ1 pool, ZFS marked it REMOVED in the same second the kernel dropped it, and the replacement resilvered 2.02 GB in 21 seconds with zero errors. The cage decides how many drives fit and how they get power. The operating system decides whether the swap is safe.
This guide ranks seven hot-swap cages and 5.25-inch bay adapters by drives per bay, from six 2.5-inch SSDs in one slot down to a single tray-less 3.5-inch bay, and then walks through the drive swap on Linux. The cages were not in our lab, so their specs come from maker pages checked against the live listings. The pull, replace and resilver were run on a lab VM (ZFS 2.4.1, measured October 2026 on Ubuntu 26.04), and every output block below comes from that run.
Hot-swap cages ranked by drives per 5.25-inch bay
Drives per 5.25-inch bay is the number that decides whether a tower can become a useful NAS. A case with three external bays holds five 3.5-inch disks with the densest HDD cage here, or eighteen 2.5-inch SSDs with three six-bay cages. Prices are what Amazon showed on our check date, so treat each one as a band and check the live price before you buy.
| Cage | Price | Drives in bays | Per bay | Interface | Power in | Max drive height |
|---|---|---|---|---|---|---|
| ICY DOCK MB326SP-1B | about $91 | 6 x 2.5″ in 1 | 6 | SATA 6Gb/s, SAS 12Gb/s | 2 x SATA | 9.5 mm |
| ICY DOCK MB996SP-6SB | about $200 | 6 x 2.5″ in 1 | 6 | SATA 6Gb/s, SAS 12Gb/s | 2 x Molex | 9.5 mm |
| ICY DOCK MB994SP-4SB-1 | about $143 | 4 x 2.5″ in 1 | 4 | SATA 6Gb/s | 1 x Molex | 15 mm |
| ICY DOCK MB720M2K-B | about $300 | 4 x M.2 in 1 | 4 | NVMe, 4 x SFF-8643 | 2 x SATA | M.2 up to 22110 |
| ICY DOCK MB155SP-B | about $188 | 5 x 3.5″ in 3 | 1.67 | SATA 6Gb/s, SAS 12Gb/s | 3 x SATA | 26.1 mm |
| ICY DOCK MB153SP-B | about $120 | 3 x 3.5″ in 2 | 1.5 | SATA 6Gb/s, SAS 12Gb/s | 2 x SATA | 26.1 mm |
| StarTech HSB1SATSASBA | about $43 | 1 x 3.5″ in 1 | 1 | SATA/SAS 6Gb/s | SATA 15-pin | 26.1 mm |
Our picks by build follow from that table, and each one gets its own section further down:
- Best for a 3.5-inch HDD pool: ICY DOCK FatCage MB155SP-B, five disks in three bays, enough for a RAIDZ2 vdev.
- Best value for SSDs: ICY DOCK MB326SP-1B, six SATA SSDs in one bay at about $15 per slot.
- Best for 15 mm 2.5-inch drives: ICY DOCK MB994SP-4SB-1, the only 2.5-inch pick with that much height per slot.
- Best for NVMe: ICY DOCK MB720M2K-B, four M.2 drives behind SFF-8643 ports.
- Best budget adapter: StarTech HSB1SATSASBA, one tray-less 3.5-inch bay with a key lock.
Six of the seven picks are ICY DOCK. Few other makers still sell current 5.25-inch backplanes on Amazon. SilverStone sells the FS303-12G and FS304-12G tray-less cages, and the FS304-12G puts four 3.5-inch disks in three bays at about $151. We could not obtain a maker render of it for this page, so it sits here as the alternative to check if the FatCage is out of stock.
How the cages and the swap were checked
Two kinds of evidence sit behind this page. They carry different weight. Cage specs are paper checks against three sources. The swap procedure is a measured run with real output:
- Cage specs: the ICY DOCK and StarTech product pages for bay count, connectors, fan, drive height and warranty, cross-checked against Amazon listing text and older reviews.
- Listings: the Amazon Creators API for price, stock state and seller on 30 October 2026. Most ICY DOCK listings are third-party sellers with only a few units left.
- Swap run: an Ubuntu 26.04 VM with four 8 GB disks on virtio-scsi in a RAIDZ1 pool holding 6,000 MB of random data. One disk was hot-unplugged at the hypervisor, the way a tray leaves a backplane, and a new disk was hot-added in its place.
- Not tested: no cage was installed, so fan noise, drive temperatures and SATA link behaviour on a physical backplane are not measured here.
The resilver and scrub timings come from virtual disks backed by a ZFS pool on the Proxmox host, so they show the procedure, not hard drive speed. A 20 TB disk resilvers in hours, not seconds, and the commands stay the same. Read the timing table at the end for what each step costs, not as a drive benchmark.
Step 1: Measure the 5.25-inch bays before you buy
A multi-bay cage needs a stack of open 5.25-inch bays with nothing between them. Many towers put metal tabs or plastic rails between bays to hold optical drives, and a three-bay cage such as the MB155SP-B will not slide past them. TweakTown hit exactly that problem in its MB155SP-B review, so check the case before the cage arrives:
- Count the external 5.25-inch bays that are stacked and empty: two for the MB153SP-B, three for the MB155SP-B, one for every 2.5-inch, NVMe or single-bay pick.
- Look for divider tabs between those bays. Bend-out tabs can be removed with pliers; riveted rails usually cannot.
- Measure the depth from the front bezel to the first obstacle behind the bays, then add room for cables. The MB155SP-B is 200.4 mm deep before the SATA plugs.
- Check that air can leave the case behind the cage. The cage fans move air across the drives, and that warm air has to go somewhere inside the case.
If the tower has no external 5.25-inch bays at all, a cage is the wrong purchase. A case built around drive bays costs less than the cage plus the work around it, and our NAS case picks start at four bays in an ITX box. This guide is for the tower you already own.
Step 2: Pick a cage for 3.5-inch hard drives
Bulk storage still means 3.5-inch CMR hard drives, and the two FatCage models are the tray-based multi-disk 3.5-inch cages we rank. Both run SATA at 6Gb/s and pass single-channel SAS at 12Gb/s when they sit behind a SAS HBA. Neither has a key lock, and neither has RAID logic, which is what you want under ZFS.
ICY DOCK FatCage MB155SP-B
Five 3.5-inch disks fit into three 5.25-inch bays on the MB155SP-B, which is the HDD density leader here and exactly one RAIDZ2 vdev of five disks. That count matters more than it looks, because four disks in RAIDZ2 leave only two disks of usable capacity, while five leave three.
ICY DOCK specifies five SATA data ports, three 15-pin SATA power inputs and one 92 mm fan with a jumper for High (100%), Low (60%) or Off. Drives sit in trays and take heights up to 26.1 mm, and each bay has a green LED for power and activity. The cage only powers a bay and the fan when a drive is present. The body is metal with some plastic, and the warranty runs 3 years.
Look elsewhere if your case has divider tabs between the bays you cannot remove, or if you want per-drive locks. ICY DOCK also states that the MB155SP-B does not support the SATA 3.3 PWDIS feature, so a shucked or enterprise drive that uses it will not spin up in this cage. On our check date it listed at about $188 from a third-party seller with one unit left, so check the live price and stock before you plan around it.
ICY DOCK FatCage MB153SP-B
Towers with only two external bays get three 3.5-inch disks from the MB153SP-B, enough for a three-disk RAIDZ1 or a mirror plus a hot spare. It uses the same tray design as its five-bay sibling with a smaller fan.
The maker lists three SATA data ports, two 15-pin SATA power inputs, one 80 mm fan, trays for drives up to 26.1 mm and a 3 year warranty. Running three drives from two power plugs means one plug feeds two motors at spin-up, which PC Perspective also noted in its review. A modern PSU handles that easily, but keep the cage off a SATA power splitter.
With three bays free, this is the weaker buy, because the MB155SP-B adds two more disks for about $68 more. It listed at about $120 from a third-party seller with three units left on our check date.
Whichever 3.5-inch cage you fit, the disks inside it matter more than the cage. Our NAS hard drive picks list the CMR models that resilver at full speed, and the RAIDZ2 width guide shows why five disks is a good vdev size.
Step 3: Pick a cage for 2.5-inch SSDs
One 5.25-inch bay holds four to six 2.5-inch drives, and the choice between them comes down to drive height and the power plug. A 7 mm SATA SSD fits every cage here. Thicker 2.5-inch hard drives at 12.5 or 15 mm fit only the four-bay model, so check the height on the drive datasheet first.
ICY DOCK ExpressCage MB326SP-1B
The MB326SP-1B fits six 2.5-inch drives in one half-height bay for about $15 per slot, which makes it the value pick for an SSD pool or a stack of boot and cache drives. It takes SATA at 6Gb/s or single-channel SAS at 12Gb/s behind a SAS host.
Six SATA data ports and two 15-pin SATA power inputs sit on the back, with two 40 mm fans and tool-less trays at the front. The maker page lists a 9.5 mm drive height limit, blue LEDs and a 3 year warranty. A three-position slider sets the fans to High, Low or Off, and the stock fans can be swapped for standard 40 mm 3-pin fans when they wear out.
Any 2.5-inch drive thicker than 9.5 mm will not fit. Six data cables from one bay also fill a four-port HBA breakout fast, so count ports before you buy. It listed at about $91 from a third-party seller with stock on our check date.
ICY DOCK ToughArmor MB994SP-4SB-1
Four 2.5-inch bays of 15 mm each make the MB994SP-4SB-1 the only pick here for thick laptop hard drives. It is full metal and carries a 5 year warranty, against 3 years on the ExpressCage line.
ICY DOCK lists this model as SATA only, with four SATA data ports and a single 4-pin Molex power input. Two 40 mm fans share an on/off switch, and the maker suggests turning them off for SSDs. The maker page contradicts itself, with SAS in the title and spec table but SATA only in the description, so we treat it as a SATA cage.
A power supply with no Molex leads left rules it out, and so does a plan for six SSDs in the bay. It listed at about $143 from a third-party seller with stock on our check date.
ICY DOCK ToughArmor MB996SP-6SB
ICY DOCK sells the MB996SP-6SB as the metal, 5 year version of the six-bay layout. It fits six 2.5-inch drives up to 9.5 mm, like the MB326SP-1B, and costs a little over twice as much.
It runs SATA at 6Gb/s or SAS at 12Gb/s through six SATA data ports, takes power from two 4-pin Molex plugs and ships with two Molex to 15-pin SATA adapters. One 40 mm fan cools the six bays. Amazon itself sold it on our check date, which matters when most ICY DOCK listings are third-party sellers.
Pay the premium only if the longer warranty or the all-metal trays are worth about $109 over the ExpressCage. It listed at about $200 with four units left on our check date.
Step 4: Put M.2 NVMe drives behind SFF-8643
NVMe drives need a PCIe x4 link each, so an NVMe cage is only half the purchase. The other half is a host card or board connector that brings those lanes out to the front of the case. That cost and the cabling are why NVMe cages remain a specialist item in a home NAS.
ICY DOCK ToughArmor MB720M2K-B
The MB720M2K-B holds four M.2 NVMe drives from 2230 to 22110 in one 5.25-inch bay, each in a locking tray. Every drive gets its own SFF-8643 port on the back, so a reader with a bifurcation card that has SFF-8643 outputs can run four Gen4 drives at full width.
ICY DOCK lists PCIe 3.0 and 4.0 support, two 15-pin SATA power inputs, two 40 mm fans, an aluminium heatsink with thermal pads, a 2-segment key lock and a 5 year warranty. The SFF-8643 ports use the legacy pinout, and the maker states the cage does not work with tri-mode HBA or RAID cards. A tri-mode HBA is therefore the wrong host for it.
A board that cannot split its x16 slot four ways needs a PCIe switch card with SFF-8643 outputs instead, because the cage cannot share a link. Our bifurcation card guide covers which platforms can, and used U.2 drives are the cheaper route to enterprise NVMe if you have SFF-8643 ports already. It listed at about $300 from a third-party seller with five units left on our check date.
Step 5: Add one tray-less bay on a budget
A single-bay adapter suits a backup disk you rotate offsite, or one extra pool member in a small build. Tray-less means the bare drive slides straight in, so the swap needs no screwdriver and no spare trays.
StarTech HSB1SATSASBA
The HSB1SATSASBA takes one 3.5-inch SATA or SAS drive in one 5.25-inch bay behind a locking front door. At about $43 it is the cheapest way to make one bay hot-swappable, and Amazon itself sold it on our check date.
StarTech lists an aluminium body, SATA or SAS up to 6Gb/s, a 7-pin SATA data and 15-pin SATA power input, one power and activity LED, two keys and a 2 year warranty. The bay has no fan, so a hard drive inside it depends on case airflow. StarTech also states that hot swapping needs AHCI mode and hot plug enabled in the BIOS, which applies to every SATA cage here.
A busy pool member that runs all day is the wrong job for it, because a fanless metal sleeve around a 7200 rpm disk gets warm. For a weekly backup disk it is the right size and price.
Step 6: Wire power, data and BIOS hot plug
A cage connects every drive through its own backplane, so the wiring problem moves from the drives to the cage. Three things decide whether it works on the first boot and keeps working through a swap:
- Data ports: each SATA cage here needs one SATA port per bay. Five bays on a board with four SATA ports means an HBA, and one forward SFF-8643 to four SATA breakout cable feeds four bays. A reverse breakout looks identical and does not work in this direction. Our HBA guide for TrueNAS lists cards flashed to IT mode, which is what ZFS wants.
- Power plugs: the FatCages, the MB326SP-1B and the MB720M2K-B take 15-pin SATA power; the MB994SP-4SB-1 and MB996SP-6SB take Molex. Run them from separate PSU leads, not a splitter chain, so a spin-up of five disks does not sag one connector. The NAS power supply guide counts connectors per model.
- BIOS: set the SATA controller to AHCI and enable hot plug on each port the cage uses. With hot plug off, the board may not report a newly inserted drive until the next reboot. The AHCI setting covers motherboard SATA ports only; drives behind an HBA follow the hot plug handling of that card.
Label each tray with the drive serial number before the first boot. None of these cages has an enclosure processor, so Linux cannot blink a fault LED on a specific bay, and the serial on the tray is how you find the dead disk. The lab run below shows what the locate command does on a bay with no enclosure support.
Step 7: Replace a failed drive in a running ZFS pool
The procedure below was run on the lab pool described above, a four-disk RAIDZ1 named tank with 8.06G allocated. The commands are plain OpenZFS and util-linux, and a full NAS build around them is in our TrueNAS ZFS storage server guide. On Ubuntu, install the ZFS tools plus the disk utilities that help during a swap:
sudo apt-get install -y zfsutils-linux smartmontools ledmon lsscsi sg3-utils
Skip the next command if you already have a pool, because zpool create wipes every disk it names. For a new pool, build it from /dev/disk/by-id paths so each vdev carries the drive serial in its name:
sudo zpool create -o ashift=12 tank raidz1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_HSBAY1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_HSBAY2 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_HSBAY3 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_HSBAY4
On real hardware, drives on motherboard SATA ports get by-id names that start with ata- plus model and serial. Drives behind a SAS HBA show scsi- or wwn- names. To see which serial sits behind each device name, list them:
lsblk -o NAME,SIZE,SERIAL,HCTL
The serial column is what you match against the label on the tray. This copy is trimmed to the four data disks; the real listing also shows the partitions ZFS created, the boot disk and the CD-ROM:
NAME SIZE SERIAL HCTL
sda 8G HSBAY1 0:0:0:1
sdb 8G HSBAY2 1:0:0:2
sdc 8G HSBAY3 2:0:0:3
sdd 8G HSBAY4 3:0:0:4
We then pulled HSBAY3 from the running VM without touching ZFS first, which is what a dead drive does on its own. A kernel log watcher was running in a second terminal during the pull:
sudo dmesg -w -T
It logged the disk leaving at 06:01:24, and ZFS logged I/O errors (error=5) against it in the same second (one of three zio lines shown):
[Fri Oct 30 06:01:24 2026] sd 2:0:0:3: [sdc] Synchronizing SCSI cache
[Fri Oct 30 06:01:24 2026] sd 2:0:0:3: [sdc] Synchronize Cache(10) failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[Fri Oct 30 06:01:24 2026] zio pool=tank vdev=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_HSBAY3-part1 error=5 type=1 offset=270336 size=8192 flags=1245889
Check the pool state next:
zpool status tank
The pool kept serving data in DEGRADED state with HSBAY3 marked REMOVED and no data errors. The action line still shows a missing quote around zpool online, which is how ZFS 2.4.1 prints it:
pool: tank
state: DEGRADED
status: One or more devices have been removed.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using zpool online' or replace the device with
'zpool replace'.
scan: resilvered 24K in 00:00:00 with 0 errors on Fri Oct 30 06:00:41 2026
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY1 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY2 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY3 REMOVED 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY4 ONLINE 0 0 0
errors: No known data errors
Slide the new drive into the empty bay next. Serial HSBAY5, the replacement disk, arrived as /dev/sdc, the same name the dead disk had used. That reuse is why a command written against sdc from memory is dangerous during a swap, and why the replace below names both disks by id. Confirm the new disk is visible first:
ls -l /dev/disk/by-id/ | grep HSBAY5
The link points at the reused device name:
lrwxrwxrwx 1 root root 9 Oct 30 06:01 scsi-0QEMU_QEMU_HARDDISK_HSBAY5 -> ../../sdc
Replace the removed vdev with the new disk, then block until the resilver finishes. The replace itself returned in 0.835 seconds on the lab VM:
sudo zpool replace tank scsi-0QEMU_QEMU_HARDDISK_HSBAY3 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_HSBAY5
sudo zpool wait -t resilver tank
zpool status tank
One detail surprised us. The status read straight after zpool wait still showed the pool DEGRADED with a replacing-2 vdev, even though the resilver had finished. The reason is that -t resilver waits for the resilver only, and the detach of the old disk is a separate step that came 84 ms later:
pool: tank
state: DEGRADED
scan: resilvered 2.02G in 00:00:21 with 0 errors on Fri Oct 30 06:02:23 2026
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY1 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY2 ONLINE 0 0 0
replacing-2 DEGRADED 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY3 REMOVED 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY5 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY4 ONLINE 0 0 0
errors: No known data errors
A few seconds later the old vdev was gone and the pool was ONLINE. A script that checks for ONLINE right after zpool wait -t resilver can therefore fail on a good swap. The zpool-wait manual lists a separate replace activity, and zpool replace -w waits for the whole replacement; we did not time either variant in this run. The second status read showed the finished pool:
pool: tank
state: ONLINE
scan: resilvered 2.02G in 00:00:21 with 0 errors on Fri Oct 30 06:02:23 2026
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY1 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY2 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY5 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_HSBAY4 ONLINE 0 0 0
errors: No known data errors
When you pull a drive on purpose, to retire it or move it to another bay, take it out of the pool and detach it from the kernel first. That way no write is in flight when the tray leaves the backplane. If a spare bay is free, a better route is to insert the new disk first and run zpool replace while the old one is still online, so a RAIDZ1 pool keeps its redundancy during the copy. Map the serial to the current device name with lsblk first, since names get reused; the first HCTL field is the SCSI host number. On the lab VM HSBAY4 was /dev/sdd at HCTL 3:0:0:4, so host 3:
sudo zpool offline tank scsi-0QEMU_QEMU_HARDDISK_HSBAY4
echo 1 | sudo tee /sys/block/sdd/device/delete
After the delete, lsblk no longer listed sdd, and the kernel logged only a clean cache flush. On real hardware the tray can come out at that point. To bring a drive back without a reboot, rescan its host and online it:
echo "- - -" | sudo tee /sys/class/scsi_host/host3/scan
sudo zpool online tank scsi-0QEMU_QEMU_HARDDISK_HSBAY4
The rescan returned the disk as sdd with serial HSBAY4, and the online took 0.105 seconds. ZFS then resilvered the few blocks written while the disk was offline. The fault LED path does not work on these cages. The ledmon package was installed, and ledctl refused the bay because nothing behind it speaks SES or SGPIO:
sudo ledctl locate=/dev/sdd
It exited with status 33:
ledctl: /dev/sdd: device not supported
ledctl: IBPI LOCATE: missing block device(s)... pattern ignored.
That is the lab result for a virtual disk, and the same refusal is what to expect from a cage without an enclosure processor. The serial label on the tray stays the reliable way to find a bay. Finish every swap with a scrub once the resilver is done, because ZFS will not start a scrub while a resilver runs. In the lab the small post-online resilver had already finished when the scrub started. The scrub read the 8.06G pool in 16.7 seconds with 0B repaired. The SHA-256 of the 6,000 MB test file matched the hash taken before the pull.
sudo zpool wait -t resilver tank
sudo zpool scrub -w tank
On a pool of large hard drives, a scrub after a swap runs for hours, so start it when the NAS is quiet. A clean scrub plus a matching checksum on a known file is the proof that the swap lost nothing.
What to watch in zpool events after a swap
The event log gives the exact timeline of a swap, which is useful when a resilver looks stuck or an alert fires late. These are the events from the lab run, read with sudo zpool events, and the timing of each step:
| Time (UTC) | Event | What it means |
|---|---|---|
| 06:01:24.100 | resource.fs.zfs.removed | Disk pulled; ZFS marked it REMOVED in the same second as the kernel |
| 06:02:02.515 | sysevent.fs.zfs.vdev_attach | zpool replace attached HSBAY5 next to the old vdev |
| 06:02:02.584 | sysevent.fs.zfs.resilver_start | Resilver began 69 ms after the attach |
| 06:02:23.784 | sysevent.fs.zfs.resilver_finish | 2.02G resilvered in 21 seconds |
| 06:02:23.868 | sysevent.fs.zfs.vdev_remove | Old vdev detached 84 ms after the finish; pool ONLINE from here |
Two patterns in that table are worth alerting on. A removed event with no vdev_attach after it means a degraded pool is waiting for a person, and on RAIDZ1 one more failure in that window loses the pool. A resilver_finish with no vdev_remove after it means the old vdev never detached, so check zpool status for a lingering replacing entry. If you are still choosing the board for the build, our NAS motherboard picks list the SATA port counts that decide how many cage bays you can wire without an HBA, and the mini PC NAS build covers the smaller route, from a mini PC with a TerraMaster DAS to dedicated NAS boards. The ZFS commands themselves are documented in the OpenZFS zpool-replace manual.






