dRaid1 Pool, Hot-Spare in use, replacement always fails *help needed*

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

Solved. In case someone has the same question:

I had previously focused on the missing Disk-ID, but in this case draid1-0-0 is currently acting as the missing disk. So a simple zpool replace NAS draid1-0-0 /dev/disk/by-id/<...> was sufficient to add the new disk into the array, which started the replacement and eventually will release the hot spare disk.

VDEV Name          Status     Capacity    ZFS Errors    

Data VDEVs
  DRAID            ONLINE                 No errors
    sdb            ONLINE     10.91 TiB   No errors
    sdc            ONLINE     10.91 TiB   No errors
    sdd            ONLINE     10.92 TiB   No errors

  REPLACING        ONLINE                 No errors
    DSPARE         ONLINE                 No errors
    sda            ONLINE     10.91 TiB   No errors

Cache
  nvme0n1          ONLINE      1.82 TiB   No errors

Spare
  DSPARE           UNAVAIL                No errors