So like what SmallBarky showed in screenshots? I’m confused
Yes, just like what he showed.
Even if the original pool is a stripe?
I’m really not sure where the remaining confusion is. Three of us have now told you that you can convert a single-disk stripe into a mirror. Barky has provided screen shots showing how. What is still confusing?
Well Samuel before told you can’t edit VDEV topology, so I don’t really see why this wouldn’t apply to VDEV types
That was true back for TrueNAS Core and the version of ZFS. He also posted a correction.
As long as your second drive is the same size or larger, the GUI should let you do the EXTEND procedure to add the drive and make it a two wide Mirror VDEV. I have done it in a VM.
It should start a resilver as it copies data from one drive to the second one for two copies aka mirror
Oh alright, confusion cleared up now. Thanks everybody for helping, i’'ll do it tomorrow since I should go to sleep now.
“Stripe” is really not a vdev type as such. A single drive vdev is a special case of a mirror. Attach a second drive to it, and you have the full mirror. “Striping” is something ZFS does automatically among all vdevs of a pool.
If you have two single drives in a pool in a “stripe”, that would be two single drive vdevs, both of which can become mirrors.
It wasn’t even true then; this feature landed in the GUI in TrueNAS CORE 12 in 2020. It was present at the CLI much earlier (somewhere in the 9.x era, IIRC), but every community version of TrueNAS has had this in the GUI.
A little problem here:
FAILED
[EZFS_BADDEV] cannot attach /dev/disk/by-partuuid/d245bbb8-0d9b-44cf-9e0d-3027c6ff6c6a to /dev/disk/by-partuuid/a536d7f0-85ec-43ff-bc86-2c6a443832a1: /dev/disk/by-partuuid/d245bbb8-0d9b-44cf-9e0d-3027c6ff6c6a is busy
More info…
Error: concurrent.futures.process._RemoteTraceback: “”" Traceback (most recent call last): File “/usr/lib/python3/dist-packages/middlewared/plugins/zfs_/pool.py”, line 119, in extend with libzfs.ZFS() as zfs: File “libzfs.pyx”, line 534, in libzfs.ZFS._exit_ File “/usr/lib/python3/dist-packages/middlewared/plugins/zfs_/pool.py”, line 136, in extend i[‘target’].attach(newvdev) File “libzfs.pyx”, line 2318, in libzfs.ZFSVdev.attach libzfs.ZFSException: cannot attach /dev/disk/by-partuuid/d245bbb8-0d9b-44cf-9e0d-3027c6ff6c6a to /dev/disk/by-partuuid/a536d7f0-85ec-43ff-bc86-2c6a443832a1: /dev/disk/by-partuuid/d245bbb8-0d9b-44cf-9e0d-3027c6ff6c6a is busy During handling of the above exception, another exception occurred: Traceback (most recent call last): File “/usr/lib/python3.11/concurrent/futures/process.py”, line 261, in _process_worker r = call_item.fn(*call_item.args, **call_item.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/worker.py”, line 116, in main_worker res = MIDDLEWARE._run(*call_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/worker.py”, line 47, in _run return self._call(name, serviceobj, methodobj, args, job=job) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/worker.py”, line 41, in _call return methodobj(*params) ^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/schema/processor.py”, line 178, in nf return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/plugins/zfs_/pool.py”, line 139, in extend raise CallError(str(e), e.code) middlewared.service_exception.CallError: [EZFS_BADDEV] cannot attach /dev/disk/by-partuuid/d245bbb8-0d9b-44cf-9e0d-3027c6ff6c6a to /dev/disk/by-partuuid/a536d7f0-85ec-43ff-bc86-2c6a443832a1: /dev/disk/by-partuuid/d245bbb8-0d9b-44cf-9e0d-3027c6ff6c6a is busy “”" The above exception was the direct cause of the following exception: Traceback (most recent call last): File “/usr/lib/python3/dist-packages/middlewared/job.py”, line 515, in run await self.future File “/usr/lib/python3/dist-packages/middlewared/job.py”, line 560, in __run_body rv = await self.method(*args) ^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/schema/processor.py”, line 174, in nf return await func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/schema/processor.py”, line 48, in nf res = await f(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/plugins/pool_/attach_disk.py”, line 84, in attach await extend_job.wait(raise_error=True) File “/usr/lib/python3/dist-packages/middlewared/job.py”, line 463, in wait raise self.exc_info[1] File “/usr/lib/python3/dist-packages/middlewared/job.py”, line 515, in run await self.future File “/usr/lib/python3/dist-packages/middlewared/job.py”, line 549, in __run_body rv = await self.middleware._call_worker(self.method_name, *self.args, job={‘id’: self.id}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 734, in _call_worker return await self.run_in_proc(main_worker, name, args, job) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 640, in run_in_proc return await self.run_in_executor(self.__procpool, method, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 624, in run_in_executor return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ middlewared.service_exception.CallError: [EZFS_BADDEV] cannot attach /dev/disk/by-partuuid/d245bbb8-0d9b-44cf-9e0d-3027c6ff6c6a to /dev/disk/by-partuuid/a536d7f0-85ec-43ff-bc86-2c6a443832a1: /dev/disk/by-partuuid/d245bbb8-0d9b-44cf-9e0d-3027c6ff6c6a is busy
Did you wipe the new drive before attempting the VDEV extend?
No, how do i do this?
So i found a way to wipe it within TrueNAS, still the same error.
I think some info is missing from what is going on. Start by posting a Detailed hardware listing and how the disks are attached.
Start from the beginning on how you were set up, what steps you took, be as detailed as possible.
What hard drives are involved? Track by serial number, if necessary.
The error message doesn’t make sense.
Let’s see the current state of installed drives and the pool?
Paste results back using (</>) Preformatted text mode. One Preformatted text box per command.
lsblk -bo NAME,LABEL,MAJ:MIN,TRAN,ROTA,ZONED,VENDOR,MODEL,SERIAL,PARTUUID,START,SIZE,PARTTYPENAME
sudo zpool status -v
LSBLK returns this:
NAME LABEL MAJ:MIN TRAN ROTA ZONED VENDOR MODEL SERIAL PARTUUID START SIZE PARTTYPENAME
sda 8:0 sata 1 none ATA ST500 W760WN 500107862016
└─sda1
main 8:1 1 none a536d7f0-85ec-43ff-bc86-2c6a443832a1 2048 497960353792 Solaris /usr & Apple ZFS
sdb 8:16 sata 1 none ATA ST500 W765H6 500107862016
└─sdb1
main 8:17 1 none 917f0a21-0a2c-4133-a7fb-dfe4ecb47139 2048 497960353792 Solaris /usr & Apple ZFS
nvme0n1
259:0 nvme 0 none KBG30 49FPD1 128035676160
├─nvme0n1p1
│ 259:1 nvme 0 none a43a08ec-60db-48cf-9781-df41085f4f21 4096 1048576 BIOS boot
├─nvme0n1p2
│ EFI 259:2 nvme 0 none b0b54875-a1df-4179-aa68-83d40492b128 6144 536870912 EFI System
└─nvme0n1p3
boot-pool
259:3 nvme 0 none 3a0dcef7-a6c7-4172-a7da-052b20869a93 1054720 127495642624 Solaris /usr & Apple ZFS
ZPOOL returns
pool: boot-pool
state: ONLINE
scan: scrub repaired 0B in 00:00:19 with 0 errors on Mon Jun 22 03:45:20 2026
config:
NAME STATE READ WRITE CKSUM
boot-pool ONLINE 0 0 0
nvme0n1p3 ONLINE 0 0 0
errors: No known data errors
pool: main
state: DEGRADED
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see:
scan: scrub repaired 0B in 00:43:01 with 1 errors on Sun May 17 00:43:03 2026
remove: Removal of vdev 1 copied 376K in 0h0m, completed on Tue Jun 16 18:06:17 2026
2.20K memory used for removed device mappings
config:
NAME STATE READ WRITE CKSUM
main DEGRADED 0 0 0
a536d7f0-85ec-43ff-bc86-2c6a443832a1 DEGRADED 0 0 1 too many errors
errors: Permanent errors have been detected in the following files:
/mnt/main/Films/Disney/L'Age de Glace/L'age de glace.mp4
They’re Seagate SSHDs, one known good (the one i’m trying to use), one known bad (the one i’m trying to mirror), both plugged into my Dell OptiPlex 3060 directly from mobo SATA. Here’s a screen capture of my doings: swisstransfer[dot]com/d/a833c4c6-839e-4539-93ca-b75321c400e9
I tried to reformat the drive data by posting using Preformatted text mode.
NAME LABEL MAJ:MIN TRAN ROTA ZONED VENDOR MODEL SERIAL PARTUUID START SIZE PARTTYPENAME
sda 8:0 sata 1 none ATA ST500 W760WN 500107862016
└─sda1
main 8:1 1 none a536d7f0-85ec-43ff-bc86-2c6a443832a1 2048 497960353792 Solaris /usr & Apple ZFS
sdb 8:16 sata 1 none ATA ST500 W765H6 500107862016
└─sdb1
main 8:17 1 none 917f0a21-0a2c-4133-a7fb-dfe4ecb47139 2048 497960353792 Solaris /usr & Apple ZFS
nvme0n1
259:0 nvme 0 none KBG30 49FPD1 128035676160
├─nvme0n1p1
│ 259:1 nvme 0 none a43a08ec-60db-48cf-9781-df41085f4f21 4096 1048576 BIOS boot
├─nvme0n1p2
│ EFI 259:2 nvme 0 none b0b54875-a1df-4179-aa68-83d40492b128 6144 536870912 EFI System
└─nvme0n1p3
boot-pool
259:3 nvme 0 none 3a0dcef7-a6c7-4172-a7da-052b20869a93 1054720 127495642624 Solaris /usr & Apple ZFS
Yeah, it messed up the formatting
I am guessing you started with your MAIN pool as
VDEV1 (500Gb disk) + VDEV2 (500Gb disk) this is two stripe VDEVs for a single pool. You had a failing or failed disk. Did you do the REMOVE function on that bad disk and convert the pool to a single stripe VDEV? You would only be able to do this if you pool was under, about, 45% capacity as it would have tried to move all the data to a single 500Gb disk.
What version of TrueNAS? I can try to duplicate on a VM
Nah, so i have my MAIN pool (Stripe) being VDEV1 (the OG disk) and that disk is failing, which is why i’m trying to add the 2nd disk to the pool so that it perfectly mirrors the OG one.