Enterprise SSD or NVMe

Proxmox shows high SSD wearout: is the drive dying, and what is writing to it?

Sources checked · page updated · the question as people ask it: “The Wearout figure in Proxmox's Disks panel (or SMART Percentage Used / Media_Wearout_Indicator) on the SSD holding my Proxmox OS, ZFS rpool or VM storage keeps climbing fast - is the drive dying, what is writing to it, and do I need a different SSD?”

Quick answer

On NVMe, the Wearout column is the drive's own SMART Percentage Used, a vendor estimate of life used that does not by itself mean the drive is failing, even at 100; on SATA it is 100 minus a vendor-normalised wear attribute. The fields that signal real trouble are Critical Warning and Available Spare against its threshold. Before buying anything, measure host writes per day over a few days and project them against the drive's rated TBW or DWPD: only a projection past the rating makes a different SSD the fix.

What are you seeing?

Pick the closest symptom to open the matching diagnostic path. This is a guide to what to check and in what order; it does not read your system and does not diagnose it.

Read what the Wearout figure actually is (NVMe)
  1. 1.Print the drive's SMART/Health Information log. On NVMe the Wearout column equals Percentage Used: Proxmox stores 100 minus that value and the Disks panel displays 100 minus the stored value.
    nvme smart-log /dev/nvme0
    Readingpercentage_used is the vendor's estimate of life used, based on actual usage and the maker's prediction of NAND life, and the drive updates it once per power-on hour. It can pass 100 (values over 254 read 255). 100 means the estimated endurance is consumed, not that the drive has failed.
  2. 2.In the same output, check the fields that do signal a drive in trouble.
    ReadingA non-zero critical_warning, or available_spare below available_spare_threshold, matters more than percentage_used. The Critical Warning bits cover spare below threshold, degraded reliability and read-only media. available_spare is a normalised 0-100 percentage of remaining spare capacity.
  3. 3.Cross-check with smartctl, which is the tool Proxmox itself calls to fill the column.
    smartctl -A /dev/nvme0
    ReadingThe same SMART/Health Information log. Proxmox parses its 'Percentage Used' line for the Wearout column.
Measure NVMe host writes per day
  1. 1.Record Data Units Written now and again after N days of normal load. One unit is 512,000 bytes of host data: the field counts thousands of 512-byte units, rounded up, and excludes metadata. The pattern below matches the label whether your nvme-cli prints it with spaces (2.x) or with underscores (older builds).
    nvme smart-log /dev/nvme0 | grep -iE 'data.units.written'
    ReadingHost bytes per day = (second reading - first reading) x 512,000 / N. Example: a delta of 4,000,000 units over 7 days is 4,000,000 x 512,000 = 2.048 TB, about 0.29 TB a day. This counts what the host sent; writes the SSD makes internally are not in it.
  2. 2.Cross-check from the host side. Field 7 of the block device's stat file counts sectors written since boot and resets at boot, reattachment or overflow, so take both samples within one boot.
    cat /sys/block/nvme0n1/stat
    ReadingThe difference between two samples of field 7 is a write rate from the host's side. The kernel page we read does not state the sector size, so compare its trend with the drive's own Data Units Written delta rather than converting it to bytes.
Read and measure a SATA SSD
  1. 1.Find which wear attribute the drive exposes. Proxmox walks an ordered list that begins Media_Wearout_Indicator, SSD_Life_Left, Wear_Leveling_Count (it also checks names such as Perc_Rated_Life_Used, Percent_Lifetime_Used and Lifetime_Left) and shows 100 minus the normalised VALUE of the first match.
    smartctl -A /dev/sdX
    ReadingVALUE is normalised by each vendor's own algorithm, so the same Wearout column can mean different things on two SATA models. Note which attribute matched before comparing two drives' figures.
  2. 2.For a write rate, read the RAW value of Total_LBAs_Written in the same output today and again after N days. Do not convert it to bytes until you have the vendor's unit: one forum poster computed a Crucial MX500's lifetime writes as anything from 1.29TB to 250TB depending on the unit assumed.
    ReadingAttribute meanings and raw units are vendor-specific. The delta between readings still shows whether writes are steady or bursty, even before the unit is known.
  3. 3.If the drive supports it, also print the ATA Device Statistics log.
    smartctl -l devstat /dev/sdX
    Readingsmartctl prints the values and descriptions of the log's pages. Only some recent devices support this log.
Find what is writing
  1. 1.Watch the pool per vdev at a fixed interval, first with guests idle, then across the window where the Wearout jump happened. Ignore the first block of output, which is the average since boot.
    zpool iostat -v rpool 60
    ReadingLater blocks show write bandwidth per vdev for each 60-second interval: the steady background rate the pool sends to the SSDs. In one forum thread an overnight jump traced to a nightly script calling the Proxmox REST API thousands of times; in another, a pfSense guest's logging was the writer.
  2. 2.Check the ZFS settings that add writes.
    zfs get atime,relatime rpool; zpool get autotrim,ashift rpool
    Readingatime=on without relatime=on turns reads into access-time writes; OpenZFS recommends relatime=on or atime=off. autotrim=off is the default. An ashift smaller than the drive's sector size forces a read before every partial-sector write. Changing any of these is a configuration decision, not a diagnostic.
  3. 3.Account for Proxmox's own background writers. pmxcfs keeps the cluster configuration in an SQLite database on disk at /var/lib/pve-cluster/config.db. rrdcached, which forum threads report Proxmox uses for its graphs, batches RRD updates and writes them to disk on a timer, every 300 seconds unless -w sets another interval. Forum threads name these two as the main PVE writers; we have not found a Proxmox document that states how much they write.
Project the measured rate against the drive's rating
  1. 1.Convert the drive's rating to total writes. TBW is the JEDEC JESD218 endurance rating: the terabytes a host can write to the SSD. DWPD is full-capacity writes per day for the vendor's stated lifetime, so rated total writes = capacity x DWPD x 365 x rated years.
    ReadingExample: 7.68TB at 1 DWPD over a stated 5 years is 7.68 x 1 x 365 x 5 = 14,016 TB; the same 1 DWPD on a 3-year basis is 8,409.6 TB. TBW figures stated on different lifetime bases are not comparable, so compare DWPD, or state the basis next to each TBW figure.
  2. 2.Multiply the host writes per day from the previous paths by the days of service you still want from the drive, add what Data Units Written already shows, and compare the total with the rated figure.
    ReadingUnder the rating: the write rate does not call for a different drive; reducing the writers found in the previous path buys margin. Over the rating: a drive with a higher stated rating is the fix.

Causes, how to confirm each, and whether hardware fixes it

CauseHow to confirmFixHardware?
The figure is read as a failure signal when it is a vendor estimate of life usednvme smart-log shows critical_warning 0 and available_spare above available_spare_threshold while percentage_used is highNone needed for the reading itself. Keep watching Critical Warning and Available Spare, and measure writes to see how fast the estimate will move.No
On SATA, the column comes from a vendor-normalised attribute, so it does not mean the same thing on every modelsmartctl -A /dev/sdX: note which of Media_Wearout_Indicator, SSD_Life_Left, Wear_Leveling_Count or the later names in Proxmox's list the drive exposesCompare drives by measured writes and stated rating, not by the Wearout column.No
A guest, script or service writes far more than expectedzpool iostat -v rpool 60 shows sustained write bandwidth with the workload you suspect running, and it drops when that workload stopsStop or reduce that writer. Forum cases include a nightly script calling the Proxmox REST API and a firewall guest's logging.No
Access-time updates on ZFS datasetszfs get atime,relatime rpool shows atime=on with relatime=offSet relatime=on or atime=off, as OpenZFS recommends.No
IO amplification from a zvol volblocksize (or dataset recordsize) larger than the guests' typical random writesCompare the guests' typical write size with the zvol's volblocksize or the dataset's recordsize. A secondary effect of the gap: a write smaller than the record needs a read before the writeOpenZFS says a smaller volblocksize can help with random workloads and minimise IO amplification. Proxmox's guide notes that with zvol block sizes the write amplification can be moved from the ZFS layer up to the guest rather than disappear.No
Pool ashift smaller than the drive's sector sizezpool get ashift rpool: 2 to the power of ashift is smaller than the drive's sector sizeThe ashift should match or exceed the sector size. The sources behind this page do not cover changing it on an existing pool, so read the OpenZFS documentation before touching a pool that holds data.No
Freed space is never passed to the SSD as TRIM (suggested in forum threads)zpool get autotrim rpool shows off, which is the defaultRun a periodic zpool trim, which OpenZFS says achieves most of the benefit on lower-end devices. OpenZFS also warns that automatic trimming can put significant stress on the underlying storage devices, so weigh that before turning autotrim on.No
Proxmox's own background writers: pmxcfs's on-disk SQLite database and rrdcached's timed flushes (forum-reported as the main PVE writers)zpool iostat -v rpool 60 or two samples of /sys/block/<device>/stat still show steady writes with every guest stoppedNo sourced reduction: the Proxmox documentation we read describes pmxcfs but not its write volume. If this idle rate alone projects past the drive's rating, the fix is a drive rated for it.No
The measured, necessary write rate exceeds the installed drive's rated enduranceData Units Written delta per day x remaining service days, plus writes already recorded, is larger than the stated TBW or capacity x DWPD x 365 x rated yearsReplace the drive with one whose stated rating covers the projection, at the same or larger capacity.Yes
If the measured writes outrun the drive's rating

The live list holds only SSDs whose endurance is stated as TBW or DWPD, because the projection in the last diagnostic path needs a rating to compare against. It shows new offers only, because a rating is a new-drive figure: a used drive's remaining endurance is its rating minus its own recorded writes, which a listing does not show. Each row prints its stated figure; convert DWPD with capacity x DWPD x 365 x rated years, and check the lifetime basis before comparing two TBW figures.

When not to buy: Do not buy before measuring, or when the projection stays under the installed drive's rating: in two of the forum threads behind this page the writes came from a script or a guest's logging, not the drive. The list includes only drives with a stated TBW or DWPD; check that the drive's interface and form factor fit the slot you have before buying. We do not record power-loss protection, so no listed drive is claimed to have it; confirm it on the maker's own sheet.

Every row below meets: Rated endurance stated as TBW · Rated endurance stated as DWPD. A listing whose field is not stated is excluded from a required criterion and marked “not stated” on an optional one; nothing is assumed. What the catalogue cannot evaluate: power-loss protection; minimum DWPD/TBW threshold. Check these on the maker's data sheet.
Product · part numberCapacityInterface · formConditionPrice$/TBCriteria
Dell 3.84TB SAS SSD Read Intensive 12G
MZILT3T8HBLS · details
3.84TBSAS-12G · 2.5" · 0.8 DWPDNEW Amazon: New / Unknown · sold by AMTECH$1,250.00$325.52Rated endurance stated as DWPDBuy on Amazon
Seagate FireCuda 530 1TB Heatsink
ZP1000GM3A023 · details
1TBNVMe-PCIe4 · M.2NEW Amazon: New / Unknown · sold by Middle Valley Distribution$430.01$430.01Rated endurance stated as TBWBuy on Amazon
Samsung MZ-QL27T600 7.68TB U.2 NVMe
MZ-QL27T600 · details
7.68TBNVMe-PCIe4 · U.2 · 1 DWPDNEW Amazon: New / Unknown · sold by SiliconValleySeller (SN# Recorded)$3,998.00$520.57Rated endurance stated as TBWRated endurance stated as DWPDBuy on Amazon
Samsung PM9A3 7.68TB U.2 NVMe
MZQL27T6HBLA · details
7.68TBNVMe-PCIe4 · U.2 · 1 DWPDNEW Amazon: New / Unknown · sold by SiliconValleySeller (SN# Recorded)$4,099.00$533.72Rated endurance stated as TBWRated endurance stated as DWPDBuy on Amazon
Micron 7600 PRO 3.84TB U.2 PCIe5
MTFDLAL3T8THG · details
3.84TBNVMe-PCIe5 · U.2 · 1 DWPDNEW Amazon: New / Unknown · sold by Hard2FindParts$2,599.00$676.82Rated endurance stated as TBWRated endurance stated as DWPDBuy on Amazon
Samsung PM9A3 960GB U.2 NVMe
MZQL2960HCJR · details
0.96TBNVMe-PCIe4 · U.2 · 1 DWPDNEW Amazon: New / Unknown · sold by DiscTech (USA)$798.00$831.25Rated endurance stated as TBWRated endurance stated as DWPDBuy on Amazon
WD Ultrastar DC SN655 7.68TB U.3
WUS5EA176ESP7E1 · details
7.68TBNVMe-PCIe4 · U.3NEW Amazon: New / Unknown · sold by vCloud Choice$8,334.11$1,085.17Rated endurance stated as TBWBuy on Amazon
Samsung PM1643A 1.92TB SAS SSD
MZILT1T9HBJR · details
1.92TBSAS-12G · 2.5" · 1 DWPDNEW Amazon: New / Unknown · sold by SiliconValleySeller (SN# Recorded)$2,095.00$1,091.15Rated endurance stated as TBWRated endurance stated as DWPDBuy on Amazon
Samsung PM1643a 1.92TB SAS SSD
MZILT1T9HBJR-00007 · details
1.92TBSAS-12G · 2.5" · 1 DWPDNEW Amazon: New / Unknown · sold by SiliconValleySeller (SN# Recorded)$2,145.00$1,117.19Rated endurance stated as TBWRated endurance stated as DWPDBuy on Amazon
Tracked, currently unavailable

Prices are Amazon US, re-checked about once a day; newest price in this table . A click here is a click, not a purchase; we earn a commission on qualifying purchases. The table shows what the catalogue holds against the criteria, not an endorsement of any model for your server.

Read next on this site

Frequently asked questions

Can Percentage Used go above 100%?

Yes. The field can exceed 100, and values over 254 are reported as 255. A reading of 100 means the vendor's estimated endurance is used up; it does not by itself indicate a failure, so check Critical Warning and Available Spare.

Why did Wearout jump several percent overnight when nothing changed?

Percentage Used is not live: the drive updates its estimate once per power-on hour. Take Data Units Written readings either side of the next jump and run zpool iostat across the same window to see whether a burst of writes explains it.

Does Data Units Written include write amplification inside the SSD?

No. It counts data the host sent, in thousands of 512-byte units, excluding metadata. Writes the SSD makes internally are not in it, so it cannot show amplification inside the drive.

Does Proxmox say consumer SSDs must not be used?

In one document, yes. Proxmox's ZFS Benchmark paper (November 2020) answers "Can I use consumer or pro-sumer SSDs?" with "No. Never.", citing performance, reliability and endurance, and calls reliable enterprise-class SSDs with high endurance and power-loss protection essential for ZFS. The current admin guide is softer: its system requirements say "Using consumer SSDs is discouraged" and recommend SSDs with power-loss protection for good performance, and it recommends an enterprise-class SSD for ZFS cache and log devices, SSDs with power-loss protection for a ZIL log, and enterprise-class NVMe SSDs for storage replication. Corrected 2026-10-14: this answer used to say we had found no Proxmox document that ruled consumer SSDs out, because the 2020 paper had not been opened.

Sources

Every technical statement above rests on one of these documents, each read on the date shown. Where a document did not state something, the page says so rather than filling the gap.

  1. pve-storage src/PVE/Diskmanage.pm (HEAD) · checked
  2. proxmox-widget-toolkit src/panel/DiskList.js (HEAD) - Wearout column · checked
  3. NVME_HEALTH_INFO_LOG structure (nvme.h), Microsoft · checked
  4. nvme_smart_log(2) - libnvme-devel, openSUSE Leap 16.0 · checked
  5. nvme-smart-log(1) - Debian bookworm · checked
  6. smartctl(8) - Debian bookworm · checked
  7. zpool-iostat(8), OpenZFS · checked
  8. OpenZFS Performance and Tuning: Workload Tuning · checked
  9. zpoolprops(7) - autotrim, OpenZFS · checked
  10. Proxmox VE Administration Guide, System Administration chapter (ZFS on Linux) · checked
  11. Proxmox Cluster File System (pmxcfs), Proxmox wiki · checked
  12. rrdcached, RRDtool documentation · checked
  13. I/O statistics fields (admin-guide/iostats), Linux kernel documentation · checked
  14. JEDEC Announces Publication of Solid State Drive Standards (JESD218 / JESD219) · checked
  15. KIOXIA CD8P-R Series data center NVMe SSD product page · checked
  16. Proxmox VE ZFS Benchmark 2020 - download page · checked
  17. Proxmox VE ZFS Benchmark 2020 (PDF) - Hardware FAQ and SSD for ZFS · checked
  18. Proxmox VE Administration Guide - System Requirements (Installation chapter) · checked

Where people hit this

Discussions we opened and read while researching this page. They are evidence that the problem occurs and of what people tried; no specification above is sourced to a forum post.

Other enterprise ssd or nvme problems

Share:WhatsAppFacebookPost on X