openzfs / zfs

OpenZFS on Linux and FreeBSD
https://openzfs.github.io/openzfs-docs
Other
10.43k stars 1.73k forks source link

`zpool add -n POOL draid...` doesn't show future spares in config #16444

Open griznog opened 1 month ago

griznog commented 1 month ago

System information

Type Version/Name
Distribution Name Rocky Linux
Distribution Version 8 and 9
Kernel Version 4.18.0-513.18.1.el8_9.x86_64 and 5.14.0-427.28.1.el9_4.x86_64
Architecture x86_64
OpenZFS Version zfs-2.1.15-3 zfs-kmod-2.1.15-3

Describe the problem you're observing

When testing adding a new draid vdev, the configuration shown does not include the future spares.

Describe how to reproduce the problem

Create some volumes for test devices:

[root@micropterus ~]# for dev in disk{1..24}; do zfs create -V 4gb datapool/$dev; done

Create pool with subset of test devices:

[root@micropterus datapool]# zpool create -o ashift=12 testpool draid2:4d:12c:4s /dev/zvol/datapool/disk{1..12}
[root@micropterus datapool]# zpool list
NAME       SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
datapool  1.73T   690G  1.06T        -         -    26%    38%  1.00x    ONLINE  -
testpool  31.5G  7.03M  31.5G        -         -     0%     0%  1.00x    ONLINE  -
[root@micropterus datapool]# zpool status testpool
  pool: testpool
 state: ONLINE
config:

NAME                  STATE     READ WRITE CKSUM
testpool              ONLINE       0     0     0
 draid2:4d:12c:4s-0  ONLINE       0     0     0
   disk1             ONLINE       0     0     0
   disk2             ONLINE       0     0     0
   disk3             ONLINE       0     0     0
   disk4             ONLINE       0     0     0
   disk5             ONLINE       0     0     0
   disk6             ONLINE       0     0     0
   disk7             ONLINE       0     0     0
   disk8             ONLINE       0     0     0
   disk9             ONLINE       0     0     0
   disk10            ONLINE       0     0     0
   disk11            ONLINE       0     0     0
   disk12            ONLINE       0     0     0
spares
 draid2-0-0          AVAIL  
 draid2-0-1          AVAIL  
 draid2-0-2          AVAIL  
 draid2-0-3          AVAIL  

errors: No known data errors

Test adding second vdev with zpool add -n ...

[root@micropterus datapool]# zpool add -n -o ashift=12 testpool draid2:4d:12c:4s /dev/zvol/datapool/disk{13..24}
would update 'testpool' to the following configuration:

testpool
 draid2:4d:12c:4s-0
   disk1
   disk2
   disk3
   disk4
   disk5
   disk6
   disk7
   disk8
   disk9
   disk10
   disk11
   disk12
 draid2:4d:12c:4s
   disk13
   disk14
   disk15
   disk16
   disk17
   disk18
   disk19
   disk20
   disk21
   disk22
   disk23
   disk24
spares
 draid2-0-0
 draid2-0-1
 draid2-0-2
 draid2-0-3

Note new spares are not shown. Now add the vdev:

[root@micropterus datapool]# zpool add -o ashift=12 testpool draid2:4d:12c:4s $PWD/disk{13..24}
[root@micropterus datapool]# zpool status testpool
  pool: testpool
 state: ONLINE
config:

NAME                  STATE     READ WRITE CKSUM
testpool              ONLINE       0     0     0
 draid2:4d:12c:4s-0  ONLINE       0     0     0
   disk1             ONLINE       0     0     0
   disk2             ONLINE       0     0     0
   disk3             ONLINE       0     0     0
   disk4             ONLINE       0     0     0
   disk5             ONLINE       0     0     0
   disk6             ONLINE       0     0     0
   disk7             ONLINE       0     0     0
   disk8             ONLINE       0     0     0
   disk9             ONLINE       0     0     0
   disk10            ONLINE       0     0     0
   disk11            ONLINE       0     0     0
   disk12            ONLINE       0     0     0
 draid2:4d:12c:4s-1  ONLINE       0     0     0
   disk13            ONLINE       0     0     0
   disk14            ONLINE       0     0     0
   disk15            ONLINE       0     0     0
   disk16            ONLINE       0     0     0
   disk17            ONLINE       0     0     0
   disk18            ONLINE       0     0     0
   disk19            ONLINE       0     0     0
   disk20            ONLINE       0     0     0
   disk21            ONLINE       0     0     0
   disk22            ONLINE       0     0     0
   disk23            ONLINE       0     0     0
   disk24            ONLINE       0     0     0
spares
 draid2-0-0          AVAIL  
 draid2-0-1          AVAIL  
 draid2-0-2          AVAIL  
 draid2-0-3          AVAIL  
 draid2-1-0          AVAIL  
 draid2-1-1          AVAIL  
 draid2-1-2          AVAIL  
 draid2-1-3          AVAIL  

errors: No known data errors

Spares are added as expected.

Include any warning/errors/backtraces from the system logs

No errors I can find, just incorrect output from the dry-run of adding a vdev.

AttilaFueloep commented 3 weeks ago

Root caused the bug, working on a fix.