Dear Community members,
I had to create another Pool with 4 disks and searched for options.
RAIDZ2 seemed the logical choice, much better than RAIDZ1 with a Spare, but with a bit more overhead from the double parity. Then I read about dRAID1 with distributed Hot-Spares, and chose the configuration draid1:2d:4c:1s (2 Data disks, 1 Parity disk, 1 Distributed Hot Spare, “spares /dev/sda AVAIL”). Fast as Z1, but with an even better resilvering time and as safe as Z2 in terms of disk losses.
Shortly after, one of the disks in the new Pool failed. So far, so good. The Spare was called into action and the resilvering started. In no time the Pool was back to normal. But it was my free day, so a colleague removed the disk, wiped it and sent for replacement. Ohw…
Now I’m stuck with draid1:2d:4c:1s-0 (where the Spare is INUSE) and no matter what I try, I cant add the missing disk to the pool. Using the GUI it tries to add the disk as a new VDEV and complains I need at least 2 disks for that.
I tried to add from the GUI, got an Error (logs) :
You need at least 2 disk(s) for this vdev type.
Error: Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 527, in run await self.future
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 572, in __run_body rv = await self.method(*args) ^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/service/crud_service.py", line 214, in nf rv = await func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/api/base/decorator.py", line 108, in wrapped result = await func(*args) ^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/pool_/pool.py", line 560, in do_update disks, vdevs = await self._process_topology('pool_update', data, pool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/pool_/pool.py", line 191, in _process_topology verrors.check()
File "/usr/lib/python3/dist-packages/middlewared/service_exception.py", line 71, in check raise self middlewared.service_exception.ValidationErrors: [EINVAL]
pool_update.topology.data.0.disks: You need at least 2 disk(s) for this vdev type.
[EINVAL] pool_update.topology.data.0.type: Request number of distributed spares 0 and parity level 1 leaves no disks available for data Request number of distributed spares 0 and parity level 1 leaves no disks available for data Error:
Traceback (most recent call last): File "/usr/lib/python3/dist-packages/middlewared/job.py", line 527, in run await self.future
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 572, in __run_body rv = await self.method(*args) ^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/service/crud_service.py", line 214, in nf rv = await func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/api/base/decorator.py", line 108, in wrapped result = await func(*args) ^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/pool_/pool.py", line 560, in do_update disks, vdevs = await self._process_topology('pool_update', data, pool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/pool_/pool.py", line 191, in _process_topology verrors.check()
File "/usr/lib/python3/dist-packages/middlewared/service_exception.py", line 71, in check raise self middlewared.service_exception.
ValidationErrors: [EINVAL] pool_update.topology.data.0.disks: You need at least 2 disk(s) for this vdev type. [EINVAL] pool_update.topology.data.0.type: Request number of distributed spares 0 and parity level 1 leaves no disks available for data
sudo zpool status NAS
pool: NAS
state: ONLINE
scan: scrub repaired 0B in 11:52:51 with 0 errors on Mon Apr 20 11:04:27 2026
scan: resilvered (draid1:2d:4c:1s-0) 5.61T in 08:38:22 with 0 errors on Sun Apr 19 23:11:36 2026
config:
NAME STATE READ WRITE CKSUM
NAS ONLINE 0 0 0
draid1:2d:4c:1s-0 ONLINE 0 0 0
draid1-0-0 ONLINE 0 0 0
14359d63-ef92-44b3-983d-95d1e6d8fac4 ONLINE 0 0 0
cdc3abc9-5a97-412f-a031-49b10e33e9a2 ONLINE 0 0 0
feb8ccbf-ef35-452a-a027-2a6643d3b978 ONLINE 0 0 0
cache
73ba5754-5cc6-48db-bebd-802c2b66cd18 ONLINE 0 0 0
spares
draid1-0-0 INUSE currently in use
sudo zpool status -DgP NAS
pool: NAS
state: ONLINE
scan: scrub repaired 0B in 11:52:51 with 0 errors on Mon Apr 20 11:04:27 2026
scan: resilvered (draid1:2d:4c:1s-0) 5.61T in 08:38:22 with 0 errors on Sun Apr 19 23:11:36 2026
config:
NAME STATE READ WRITE CKSUM
NAS ONLINE 0 0 0
12741014570428054631 ONLINE 0 0 0
11404575403681407729 ONLINE 0 0 0
13878710205518160743 ONLINE 0 0 0
9162911182779710544 ONLINE 0 0 0
6414945037771197413 ONLINE 0 0 0
cache
7595336000270161595 ONLINE 0 0 0
spares
11404575403681407729 INUSE currently in use
I cannot use zpool replace <pool> <old-disk> /dev/sda as I don’t have the ID or the removed Disk anymore.
zpool add NAS spare /dev/sda also doesn’t work.
I wan’t to export and reimport the pool, but I have to wait until the next downtime.
What are your experiences with dRaid1 and distributed Hot Spare. Do you have any ideas or suggestions on how I can add the 3rd disk to the dRAID1 and release the spare to be available again, so I could get the pool back to the intended configuration without having to reconstruct it?
Any help would be really appreciated.
Have a nice day!
Eloi Bermejo