Mirror pool degraded after upgrade to 25.10.6 - second disc not attachable

Hello,

some days ago I have upgraded from a previous version to 25.10.6. Before doing this, my system hat a mirror vdev containing two drives with different size. I do not remember, which size the vdev had, but after upgrading TrueNas the drive sda of about 5TB is not attached to the mirror and the mirror is degraded.
Trying to add the devise sdb again fails with error telling the drive is to small. So this is bad. It seem that the vdev now has 7 TB which is the size of drive sdb, is automatic resized and is degraded. So how comes and what to do for repairing? Shrinking is not possible.

But on the other hand, I see this in shell:

admin@truenas[~/Dokumentation]$ lsblk /dev/sda /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 5.5T 0 disk
sdb 8:16 0 7.3T 0 disk
└─sdb1 8:17 0 7.3T 0 part
admin@truenas[~/Dokumentation]$ zpool list Storagepool
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
Storagepool 5.45T 2.16T 3.29T - 1.81T 15% 39% 1.00x DEGRADED /mnt
admin@truenas[~/Dokumentation]$

So good news: The pool itself has size of 5.45T, so it can fit into the drive sda. But where is the partition of sda.

Provide the outputs of these. Please use preformatted text as separate boxes for each output.

zpool list -v Storagepool
zpool status -v Storagepool
zpool history Storagepool | grep 'zpool remove\|zpool detach\|zpool offline\|zpool online'
lsblk -o NAME,PARTUUID,SIZE,MODEL,PTTYPE,TYPE,PARTTYPENAME

Here it is (lsblk reduced to the two drives, history as sudo):

zpool list -v Storagepool

admin@truenas[~]$ zpool list -v Storagepool
NAME                                       SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
Storagepool                               5.45T  2.16T  3.29T        -     1.81T    15%    39%  1.00x  DEGRADED  /mnt
  mirror-0                                5.45T  2.16T  3.29T        -     1.81T    15%  39.7%      -  DEGRADED
    16671667498307053037                      -      -      -        -         -      -      -      -   UNAVAIL
    5e20d6d2-6b7b-49be-9e12-0ee358e0b0eb  7.28T      -      -        -         -      -      -      -    ONLINE
admin@truenas[~]$ 

zpool status -v Storagepool

admin@truenas[~]$ zpool list -v Storagepool
NAME                                       SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
Storagepool                               5.45T  2.16T  3.29T        -     1.81T    15%    39%  1.00x  DEGRADED  /mnt
  mirror-0                                5.45T  2.16T  3.29T        -     1.81T    15%  39.7%      -  DEGRADED
    16671667498307053037                      -      -      -        -         -      -      -      -   UNAVAIL
    5e20d6d2-6b7b-49be-9e12-0ee358e0b0eb  7.28T      -      -        -         -      -      -      -    ONLINE
admin@truenas[~]$ zpool status -v Storagepool
  pool: Storagepool
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J
  scan: scrub repaired 0B in 08:10:40 with 0 errors on Sun Aug  2 08:10:45 2026
config:

        NAME                                      STATE     READ WRITE CKSUM
        Storagepool                               DEGRADED     0     0     0
          mirror-0                                DEGRADED     0     0     0
            16671667498307053037                  UNAVAIL      0     0     0  was /dev/disk/by-partuuid/04b8a2ed-a4e6-48ea-b54d-8512d44d51c0
            5e20d6d2-6b7b-49be-9e12-0ee358e0b0eb  ONLINE       0     0     0

errors: No known data errors
admin@truenas[~]$ 

zpool history Storagepool | grep ‘zpool remove|zpool detach|zpool offline|zpool online’

admin@truenas[~]$ sudo zpool history Storagepool | grep 'zpool remove\|zpool detach\|zpool offline\|zpool online'
[sudo] password for admin: 
2025-08-18.20:16:44 py-libzfs: zpool offline  Storagepool /dev/disk/by-partuuid/90bd491a-5e31-48d0-8436-46708299111f
2025-08-18.20:17:11 py-libzfs: zpool offline  Storagepool /dev/disk/by-partuuid/90bd491a-5e31-48d0-8436-46708299111f
2025-08-19.16:02:25 py-libzfs: zpool online  Storagepool /dev/disk/by-partuuid/90bd491a-5e31-48d0-8436-46708299111f
2025-08-24.15:43:14 py-libzfs: zpool offline  Storagepool /dev/disk/by-partuuid/90bd491a-5e31-48d0-8436-46708299111f
2025-08-24.16:06:17 py-libzfs: zpool online  Storagepool /dev/disk/by-partuuid/90bd491a-5e31-48d0-8436-46708299111f
2025-08-24.16:06:47 py-libzfs: zpool detach Storagepool /dev/disk/by-partuuid/90bd491a-5e31-48d0-8436-46708299111f
admin@truenas[~]$ 

lsblk (I changed a bit so that only the two drives are listed)

admin@truenas[~]$ lsblk -o NAME,PARTUUID,SIZE,MODEL,PTTYPE,TYPE,PARTTYPENAME /dev/sda /dev/sdb
NAME   PARTUUID                              SIZE MODEL                PTTYPE TYPE PARTTYPENAME
sda                                          5.5T WDC WD60EFRX-68MYMN1        disk 
sdb                                          7.3T ST8000VN002-2ZM188   gpt    disk 
└─sdb1 5e20d6d2-6b7b-49be-9e12-0ee358e0b0eb  7.3T                      gpt    part Solaris /usr & Apple ZFS
admin@truenas[~]$ 

“Add”? Do you mean “replace”? How are you trying to do this?

Sorry for not making it clear: Under “Storagepool VDEVs” menu “Disk Info” I tried replace. In the opening modal dialog I could choose the 5.46TiB Disk, “Force” not checked and clicked “Replace Disk”

How was it in the vdev in the first place?

Add -b to the lsblk command and -p to the zpool list command.

zpool list -p -v Storagepool
lsblk -b -o NAME,PARTUUID,SIZE,MODEL,PTTYPE,TYPE,PARTTYPENAME

What do you mean with this? Don’t understand. And: wait a bit, I just startet the replace again to post the error message again. But it will not show up at the moment, the system is busy doing a backup in background :frowning:

But I will post the result of the new commands in the next post, so wait.

In your OP you said you tried using the same disk that was previously in the vdev. This means it was large enough for the mirror vdev before. If it is the same disk, it should technically be large enough, since you did not “expand” your pool. It’s possible that TrueNAS is now trying to leave a 2-GiB “buffer” on the disk, which makes it too small to add to the vdev.

How did the disk get ejected from the vdev? Errors? Failure? This is important to know.

Here it is

admin@truenas[~]$ zpool list -p -v Storagepool
NAME                                               SIZE          ALLOC           FREE  CKPOINT       EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
Storagepool                               5995774345216  2378358177792  3617416167424        -  1992864825344     15     39   1.00  DEGRADED  /mnt
  mirror-0                                5995774345216  2378358177792  3617416167424        -  1992864825344     15     39      -  DEGRADED
    16671667498307053037                      -      -      -        -         -      -      -      -   UNAVAIL
    5e20d6d2-6b7b-49be-9e12-0ee358e0b0eb  8001560772608      -      -        -         -      -      -      -    ONLINE
admin@truenas[~]$ 
admin@truenas[~]$ lsblk -b -o NAME,PARTUUID,SIZE,MODEL,PTTYPE,TYPE,PARTTYPENAME /dev/sda /dev/sdb
NAME   PARTUUID                                      SIZE MODEL                PTTYPE TYPE PARTTYPENAME
sda                                         6001175126016 WDC WD60EFRX-68MYMN1        disk 
sdb                                         8001563222016 ST8000VN002-2ZM188   gpt    disk 
└─sdb1 5e20d6d2-6b7b-49be-9e12-0ee358e0b0eb 8001560772608                      gpt    part Solaris /usr & Apple ZFS
admin@truenas[~]$ 

Yes, that is really interesting. zpool history lists an detach. But why. No one did it. I am the only one who is administering the machine and has the password. I am not sure with the date. Could have been the update.

And now here ist the error message from the replace command:

[EFAULT] Could not create a partition of 8001560772608 bytes on disk sda because the disk is too small. If you are replacing a disk in a pool, please ensure that the new disk is not smaller than the disk being replaced. Could not create partition 1 from 2048 to 15628050431 Could not change partition 1's type code to BF01! Error encountered; not saving changes.

I am sure that the mirror was not degraded when I started the TrueNAS upgrade. How to found out exactly when I had done the upgrade?

So this is interesting.

Replace does not try to create a partition of size 5995774345216 but of 8001560772608 which is the size of drive sdb. So what do you think about precreating partiton sda1 with parted?

That appears to be specific to TrueNAS. It seems that it is reading the size of the existing partition to calculate how large to create the new partition to be used as the replacement for the missing member. (I doubt they test use-cases for disks of different sizes for creating a new vdev, since that is discouraged.)

You can possibly do this manually (partitioning and zpool replace) with the command-line, but I would be more concerned that the drive might have issues, which is why it was ejected from the vdev.

It’s up to you how you want to proceed. Manually partitioning and using zpool is risky.

Is this important data?

Hallo @winnielinnie , thanks for your reply. Because data is important, i am doing a fresh backup to an external drive at the moment.

So if I remember right, i had set up this mirror by previously manually creating the partitions. But I am not sure about that. Why do you thing it is risky to do so?

Before I will look deeper into the s.m.a.r.t data of the disk and switch of the NAS and double check the cables.

So again: Why do you think it is risky to partition manually. What could happen?

Anything destructive involving the command-line that doesn’t have safeguards and checks is always a risk. Typing “b” instead “a” could wipe your data.

As long as you feel comfortable and you are sure the drive is without errors, you can manually create a GPT label on it and a single partition[1] that takes up all the available space. You would then use this partition’s PARTUUID to manually replace the missing member with zpool replace.


  1. Specifying it as a “zfs” partition in parted is optional. ↩︎

Thanks again. It will take some days to do all that is needed, because there is only a few minutes each day to play around with TrueNAS. By the way: To build an mirror was not supported by the TrueNAS GUI at the time I set it up. I had to do this at CLI also.

I will tell in a few days, how this all ends up.