There's two types of "data" in the pool: the actual data of whatever it is you're storing, and the metadata, which is all the tables, properties, indexes and other "stuff" that defines the pool structure, the datasets, and the pointers that tell ZFS where on disk to find the actual data.

Normally this is all mixed in together on the regular pool vdevs (mirror, raidz, etc). If you add a special vdev to your pool, then ZFS will prefer to store the metadata there, and send the data proper to the regular vdevs. The main reason for doing this is if you have "slow" data vdevs; adding a special vdev of a SSD mirror can speed up access times, as ZFS can look to the SSDs to know where on the data vdevs to find its data and go directly there, rather than loading the metadata off the slow vdevs and then needing another access to get the real data.

There's another possible advantage: ZFS can store "small" files on the special vdev, leaving larger ones for the regular data vdevs.

One important thing to remember is that special vdevs are a proper part of the pool, not an add-on - just like the regular data vdevs, if the special vdev fails, the pool is lost. An SSD mirror is typical for this vdev.

This is only a rough explanation, see also:

  • zpoolconcepts(7)
  • Level1Techs writeup
🌐
GitHub
github.com › openzfs › zfs › discussions › 14542
What does the ZFS Metadata Special Device do? · openzfs/zfs · Discussion #14542

There's two types of "data" in the pool: the actual data of whatever it is you're storing, and the metadata, which is all the tables, properties, indexes and other "stuff" that defines the pool structure, the datasets, and the pointers that tell ZFS where on disk to find the actual data.

Normally this is all mixed in together on the regular pool vdevs (mirror, raidz, etc). If you add a special vdev to your pool, then ZFS will prefer to store the metadata there, and send the data proper to the regular vdevs. The main reason for doing this is if you have "slow" data vdevs; adding a special vdev of a SSD mirror can speed up access times, as ZFS can look to the SSDs to know where on the data vdevs to find its data and go directly there, rather than loading the metadata off the slow vdevs and then needing another access to get the real data.

There's another possible advantage: ZFS can store "small" files on the special vdev, leaving larger ones for the regular data vdevs.

One important thing to remember is that special vdevs are a proper part of the pool, not an add-on - just like the regular data vdevs, if the special vdev fails, the pool is lost. An SSD mirror is typical for this vdev.

This is only a rough explanation, see also:

  • zpoolconcepts(7)
  • Level1Techs writeup
Author: openzfs
🌐
Reddit
reddit.com › r/zfs › guidance on how the special vdev performs.
r/zfs on Reddit: Guidance on how the special vdev performs.
I have answered my own question eventually, partially from some old forum posts and practical testing. Once the special VDEV is full it stays full. The standard small block allocation is 75% of the drive space(default but adjustable), after that further blocks will be sent directly to the backing storage. It can be expanded after the fact, and also striped to another vdev if space becomes constrained, but there is no way to rebalance. Furthermore, the special vdev hits it's allocation limit and later expanded, the small IO will have to be re-written to move it back to it's allocation class. As long as you're using all striped mirrors in your pool with the same ashift(I am), you can "flush" the metadata and small IO back to your main pool by removing the special vdev. I.E zpool remove pool mirror- with x being the mirrored SSD's vdev name This will write all metadata and small blocks back to the main pool. But it also prevents the special vdev from being useful again if re-added without re-writing all your data as new metadata is only added on write.
🌐
Stack Exchange
unix.stackexchange.com › questions › 434413 › command-to-list-vdev-device-names-for-a-zfs-pool-for-scripting
Command to list vdev device names for a ZFS pool for scripting? - Unix & Linux Stack Exchange
zpool list -v -H -P

-v verbose
-P show full paths, not just the last component
-H script mode - no headings, fields separated by tab character

That will get you a lot closer.

Answer from frymaster on unix.stackexchange.com
🌐
Pthree
pthree.org › 2012 › 12 › 04 › zfs-administration-part-i-vdevs
Aaron Toponce : ZFS Administration, Part I- VDEVs
VDEVs can be nested. A perfect example is a standard RAID-1+0 (commonly referred to as "RAID-10"). This is a stripe of mirrors. In order to specify the nested VDEVs, I just put them on the command line in order (emphasis mine):
🌐
GitHub
openzfs.github.io › openzfs-docs › man › master › 7 › zpoolconcepts.7.html
zpoolconcepts.7 — OpenZFS documentation
But, when an active device fails, it is automatically replaced by a hot spare. To create a pool with hot spares, specify a spare vdev with any number of devices. For example, ... Spares can be shared across multiple pools, and can be added with the zpool add command and removed with the zpool ...
🌐
Klara Systems
klarasystems.com › home › openzfs – understanding zfs vdev types
OpenZFS - Understanding ZFS vdev Types - Klara Systems
June 13, 2025 - Confused about how to set up your ZFS pool? This in-depth guide breaks down the building blocks of a zpool—explaining vdev types like mirror, RAIDz, dRAID, and support classes such as LOG, CACHE, and SPECIAL. Learn how each configuration affects performance, fault tolerance, and scalability—so ...
🌐
Reddit
reddit.com › r/zfs › advice on the special vdev in my zfs setup
r/zfs on Reddit: Advice on the special VDEV in my ZFS setup
If you want to be certain that your thumbnails and whatnot render faster in Explorer windows, you'll want a special with special_small_blocks set large enough to capture the thumbnails (and you'll want to double-check to see how large those thumbnails are). L2ARC might or might not do that great a job at keeping those cached. Then again, L2ARC is safe whereas the special is an additional element of risk. I'd probably start out with L2ARC (which can be safely removed later if necessary) and see if that did what I wanted it to do well enough.
🌐
Proxmox
forum.proxmox.com › home › forums › proxmox virtual environment › proxmox ve: installation and configuration
ZFS Metadata Special Device | Proxmox Support Forum
June 16, 2023 - Thanks in advance! Click to expand... It is more or less not much more than: zpool add POOLNAME special mirror /dev/sdX /dev/sdY and for the blocksize: zfs set special_small_blocks=1M POOLNAME
🌐
Reddit
reddit.com › r/zfs › how do i make a metadata special device vdev?
r/zfs on Reddit: How do I make a metadata special device vdev?
I would highly recommend using something more robust than raidz1 on a 100TB pool. The likelihood of an error during a rebuild of a pool of that magnitude is not inconsequential. If this is just a backup pool, then so be it, but if this is to be primary storage then you're gambling with your data.
Find elsewhere
🌐
Reddit
reddit.com › r/zfs › how to determine the required drive size for special vdev (allocation classes)?
r/zfs on Reddit: How to determine the required drive size for special VDEV (allocation classes)?
Option #1: Take the estimate that the metadata SSD should be about 0.3% of the pool size for a typical workload. For atypical workloads scale appropriately. Option #2: run "zdb -Lbbbs POOLNAME" for block statistics. Level 0 ZFS Plain File and Level 0 zvol objects do NOT go to the metadata SSD, but everything else would. This may take a while, but would give the most accurate answer possible. Oh, and use the ASIZE column for your measurements. Obviously neither of these account for the "small blocks" allocation feature. You're on your own there.
🌐
Level1Techs
forum.level1techs.com › l1 articles & video-related
ZFS Metadata Special Device: Z - L1 Articles & Video-related - Level1Techs Forums
May 2, 2024 - Introduction ZFS Allocation Classes: It isn’t storage tiers or caching, but gosh darn it, you can really REALLY speed up your zfs pool. From the manual: Special Allocation Class The allocations in the special class ar…
🌐
Server Fault
serverfault.com › questions › 827930 › zfs-on-linux-how-do-i-correctly-configure-the-vdev-id-conf-file-and-trigger-vde
ZFS on Linux: How do I correctly configure the vdev_id.conf file and trigger vdev aliasing? - Server Fault

After you setup your conf file you need to do a udevadm trigger for your new devices to show up it will make a diretory under /dev/disk called by-vdev that will have the alias names for all your disk in it.

Answer from Tim Schnedler on serverfault.com
🌐
Proxmox
forum.proxmox.com › home › forums › proxmox backup server › proxmox backup: installation and configuration
PBS and ZFS Special Allocation Class VDEV ... aka Fusion Drive | Proxmox Support Forum
June 14, 2024 - ===================================================== Add a special vdev. zpool add rpool -f -o ashift=12 special mirror scsi-<>-part3 scsi-<>-part3 scsi-<>-part3 Configure it. zfs set recordsize=1M rpool zfs set special_small_blocks=512K rpool ===================================================== Test results
🌐
Proxmox
forum.proxmox.com › home › forums › proxmox virtual environment › proxmox ve: installation and configuration
ZFS Special VDEV | Proxmox Support Forum
January 1, 2025 - Hi, On the beginning of 2024, I set up a new storage server for my work using ZFS and Samba on Proxmox. I added to the ZFS pool a "special" vdev, which gives a really good performance when the 40TB (around 50 Million files) of data are backed up, as the file metadata can be analysed very quickly...
🌐
GitHub
github.com › openzfs › zfs › blob › master › module › zfs › vdev_file.c
zfs/module/zfs/vdev_file.c at master · openzfs/zfs
If the user has gotten to this point, the * administrator has already decided that the pool should be available * to local zone users, so the underlying devices should be as well. */ ASSERT3P(vd->vdev_path, !=, NULL); ASSERT3S(vd->vdev_path[0], ==, '/'); error = zfs_file_open(vd->vdev_path, vdev_file_open_mode(spa_mode(vd->vdev_spa)), 0, &fp); if (error) { vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; return (error); }
Author: openzfs
🌐
Reddit
reddit.com › r/zfs › why is nobody talking about the newly introduced allocation class vdevs? this could significantly boost small random i/o workloads for a fraction of the price of full ssd pools.
r/zfs on Reddit: Why is nobody talking about the newly introduced Allocation Class VDEVs? This could significantly boost small random I/O workloads for a fraction of the price of full SSD pools.

Don Brady presented on this work at the Second (edit: First?) annual ZFS user conference in Norwalk, CT sponsored by Datto. It was required by the DRAID work Intel is working on for Fermilab and perhaps other Nuclear tech labs across the U.S. very interesting work, I haven't had a need to implement it yet but am interested in hearing about deployments. One of the ZFS mailing lists had a complaint from a user that added a special Allocation VDEV, played around with it, and then found they couldn't delete it easily like a SLOG or l2arc device. N.B. For now, it is permanent once added , pool must be copied and destroyed and rewritten if you change your mind.

here is the link to the presentation document : https://zfs.datto.com/2017_slides/brady.pdf

🌐
GitHub
openzfs.github.io › openzfs-docs › man › 7 › zpoolconcepts.7.html
Github
You should have been redirected · If not, click here to continue
🌐
FreeBSD
forums.freebsd.org › base system › storage
ZFS - ZFS special device on shared drive | The FreeBSD Forums
September 7, 2022 - With those two slots I have to create mirror vdevs that will host the OS/swap & special device ... Click to expand... What's this "special device" you keep mentioning? Why do you need 7 TB of metadata? Metadata of what exactly? ... SirDice "ZFS special allocation class" (I think).
🌐
YouTube
youtube.com › watch
Boost ZFS Performance with a Special VDEV in TrueNAS - YouTube
13:11
Curious about how a special metadata VDEV can boost ZFS performance, especially with spinning disks? In this video, I walk through what it is, why it matters...
Published: May 10, 2025
🌐
Practical ZFS
discourse.practicalzfs.com › openzfs
Special vdev question - OpenZFS - Practical ZFS
Yes, special vdevs expand like any other mirror vdevs do. You may need to use zpool online -e on the vdev to trigger the expansion after you replace the last small drive in the vdev, but that’s easy enough. You don’t need to scrub after replacing vdev members, because the resilvering itself forces … Answer from mercenary_sysadmin on discourse.practicalzfs.com