October 7, 2025Oct 7 Unraid 7.1.4: “Stop Array” still tears down independent ZFS pools & libvirt; Parity check scans full parity disk instead of logical rangeVersion: Unraid 7.1.4Setup summary:· Native ZFS / ZFS plugin enabled· standalone ZFS pool (e.g., ssd_pool) holds all VM assets (libvirt.img, vdisks, ISOs) under /mnt/disks/ssd_pool/...· Minimal/auxiliary Unraid array present· Parity device: 16 TB; largest data disk: 8 TB (others ≤8 TB) 1. Lack of true separation: stopping the array also tears down independent ZFS pools and libvirt/VMsExpected.In a multi-pool world, a ZFS pool that is entirely independent of the Unraid array should remain imported/mounted when the array is stopped or reconfigured. VM services that live only on that pool should be able to continue running (or at least remain intact) while array maintenance happens.Actual (7.1.4)Clicking Stop on the array:· exports/unmounts all ZFS pools (including those unrelated to the array),· unmounts /etc/libvirt (because libvirt.img is on ZFS and gets unmounted),· kills libvirt and any running VMs.Typical log symptoms:rc.libvirt: Starting virtlock daemon...error : main:906 : Can't load config file: Failed to open file '/etc/libvirt/virtlockd.conf'rc.libvirt: Starting libvirt daemon...rc.libvirt: libvirt daemon... No image mounted at /etc/libvirt It forces full downtime for services that are deliberately off-array. Repro (minimal)Create/import a ZFS pool ssd_pool.Place libvirt.img, vdisks, ISOs on ssd_pool (e.g., /mnt/disks/ssd_pool/...).Mount libvirt.img to /etc/libvirt and start libvirt/VMs via virsh.In the GUI, click Stop on the array.Result: ZFS is exported, /etc/libvirt disappears, libvirt/VMs die. Manual workarounds (they exist, but…)Early import/mount of ZFS via /boot/config/go:modprobe zfszpool import -N -azfs mount -a Manually mounting libvirt.img and starting libvirt via custom scripts:mount -t btrfs -o loop .../libvirt.img /etc/libvirt/etc/rc.d/rc.libvirt startDisabling VM Manager and running everything via virsh.Hooking or bypassing plugin stop/export behavior. However: these are unsupported hacks, fragile across updates, and leave the GUI inconsistent with system state. They also miss the point: users shouldn’t have to defeat core lifecycle logic to keep an independent pool online. RequestPer-pool lifecycle controls in the GUI (import/export/mount per pool, independent of array start/stop).ZFS option: “Do not export this pool when array is stopped” (mark a pool as independent/protected).VM Manager option: allow libvirt/VMs to run when array is stopped if all assets are off-array.Stop/Start dialog that enumerates subsystems (Array, each Pool, Docker, libvirt) with checkboxes so users can exclude independent pools/services from a global stop.2. Parity check scans the full parity device instead of the effective logical rangeContextParity disk: 16 TBLargest data disk: 8 TBLBAs beyond 8 TB on the parity disk cannot be influenced by any data disk; parity there is effectively parity of zeroes.ExpectedA logical parity check should, by default, scan only up to the highest LBA used by any data disk (here: 8 TB). That verifies actual array parity without wasting time on the unused tail of the parity device.Actual (7.1.4)Parity check reads the entire 16 TB parity drive, including the unused 8–16 TB tail. This adds hours of read I/O, wear, heat, and power draw, without improving parity correctness for the array’s effective range. RequestProvide two explicit modes in the parity check UI:Logical parity check (recommended): scan only up to largest data disk size.Full device surface read: optional, for users who want a long hardware read test of the parity drive.Make the logical mode the default when data disks are smaller than parity. THX FC
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.