{"id":1440,"date":"2026-10-19T22:38:48","date_gmt":"2026-10-19T22:38:48","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=1440"},"modified":"2026-10-19T22:38:48","modified_gmt":"2026-10-19T22:38:48","slug":"nvme-wearout-smart-telemetry-monitoring","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/","title":{"rendered":"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure"},"content":{"rendered":"<div style=\"padding:20px\">\n<p>An NVMe drive fails in a predictable sequence: endurance is consumed, spare blocks are reallocated, the media error rate climbs, and only then does write latency spike and the device drop off the bus. Every stage of that sequence is reported by the drive as a counter, and the counters are readable from inside a KVM guest as long as the controller is passed through or the host exposes the namespace. This guide covers which attributes actually predict failure, what the numeric thresholds mean for a typical VPS workload, and how to wire them into a monitor that alerts before the filesystem goes read-only.<\/p>\n<p>Confirm the device is an NVMe controller with <code>nvme list<\/code>: a virtio <code>\/dev\/vda<\/code> exposes only a synthetic health value, while a namespace under <code>\/dev\/nvme0<\/code> exposes the full log pages. The <a href=\"https:\/\/virtualserversvps.com\/\">VPS storage tuning guides at virtualserversvps.com<\/a> cover the I\/O and filesystem side once the controller is confirmed.<\/p>\n<\/p>\n<h2>The Attributes That Matter and the Ones That Do Not<\/h2>\n<p>NVMe SMART exposes 14 counters and five carry real predictive weight: <code>Percentage Used<\/code>, <code>Available Spare<\/code>, <code>Media and Data Integrity Errors<\/code>, <code>Unsafe Shutdowns<\/code> and the <code>Critical Warning<\/code> bitmask. Temperature and power-on count are context, not predictors.<\/p>\n<p>Read them with <code>nvme smart-log \/dev\/nvme0 -o json<\/code> for machine parsing or <code>smartctl -a \/dev\/nvme0<\/code> for humans. Some virtualised controllers return the log page with <code>Data Units Written<\/code> zeroed, which makes host-assisted monitoring the only option.<\/p>\n<h2>Interpreting Percentage Used Against Real Workloads<\/h2>\n<p><code>Percentage Used<\/code> is not a linear countdown to failure; it is the drive&#8217;s internal estimate of consumed program\/erase cycles relative to its rated endurance, and it can jump quickly under sustained heavy writes or creep slowly for years. A consumer 1 TB TLC drive rated at 600 TBW shows 1 percent used per 6 TB written; an enterprise 3.84 TB drive rated at 1 drive write per day for five years shows 1 percent per 7 TB written. At 10 GB per day of write amplification, the consumer drive reaches 100 percent in about 1.6 years.<\/p>\n<table>\n<thead>\n<tr>\n<th>Percentage Used<\/th>\n<th>Available Spare<\/th>\n<th>Action<\/th>\n<th>Expected remaining life<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>0-20%<\/td>\n<td>100%<\/td>\n<td>none, log monthly<\/td>\n<td>years<\/td>\n<\/tr>\n<tr>\n<td>20-50%<\/td>\n<td>100%<\/td>\n<td>reduce write amplification, log weekly<\/td>\n<td>12-36 months<\/td>\n<\/tr>\n<tr>\n<td>50-80%<\/td>\n<td>99-100%<\/td>\n<td>plan replacement, verify backups<\/td>\n<td>6-18 months<\/td>\n<\/tr>\n<tr>\n<td>80-95%<\/td>\n<td>&lt; 99%<\/td>\n<td>migrate now, expect latency degradation<\/td>\n<td>weeks to months<\/td>\n<\/tr>\n<tr>\n<td>&gt; 95% or spare &lt; 10%<\/td>\n<td>&lt; 10%<\/td>\n<td>evacuate, drive enters read-only at 0 spare<\/td>\n<td>days<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The second column matters more than the first once the drive is past 80 percent. A drive at 90 percent used with 100 percent spare is consuming its endurance gradually; a drive at 45 percent used with 96 percent spare has already lost 4 percent of its reserve pool, which means blocks are failing and being retired faster than the endurance model predicted. The combination of high percentage used and falling spare is the strongest single failure signal in NVMe telemetry.<\/p>\n<h2>Media Errors, Unsafe Shutdowns and the Write Latency Curve<\/h2>\n<p><code>Media and Data Integrity Errors<\/code> should read zero on a healthy drive. A single increment is an uncorrectable error that was recovered by RAID or the filesystem; three increments in a month on a non-RAID VPS is a reason to migrate, because the drive is now returning bad data rather than merely wearing out. Some consumer controllers report a baseline of one or two for firmware-handled events, so compare against the drive&#8217;s own history rather than an absolute zero.<\/p>\n<p><code>Unsafe Shutdowns<\/code> counts resets without a clean shutdown; values above 50 usually mean host resets risk an incomplete FTL mapping update. Watch <code>Warning Temperature Time<\/code> too: excursions above 70 C throttle writes into a visible latency step change.<\/p>\n<h2>Capturing a Baseline with smartctl and nvme-cli<\/h2>\n<p>Before you can alert on a change you need a baseline. Capture the full log once at provisioning and store it with the hostname and date. The commands below write both the human-readable report and the raw log pages into a directory that can be archived.<\/p>\n<pre><code>d=\/var\/lib\/nvme-baseline\/$(hostname)-$(date +%F); mkdir -p $d\nsmartctl -a \/dev\/nvme0 &gt; $d\/smart.txt\nnvme smart-log \/dev\/nvme0 -o json &gt; $d\/smart.json\nnvme id-ctrl \/dev\/nvme0 -o json &gt; $d\/idctrl.json\nnvme error-log \/dev\/nvme0 &gt; $d\/errors.txt<\/code><\/pre>\n<p><code>id-ctrl<\/code> records model, firmware revision and rated endurance; <code>error-log<\/code> lists the last 64 status codes and should be empty on a healthy drive. Re-diff these files after a firmware update, because counters can be reset or reinterpreted.<\/p>\n<h2>Automating Collection into node_exporter or a Cron Probe<\/h2>\n<p>The <code>node_exporter<\/code> textfile collector is the shortest path to Prometheus: a cron script writes a metrics file every five minutes, and node_exporter reads it via <code>--collector.textfile.directory=\/var\/lib\/node_exporter\/textfile<\/code>.<\/p>\n<pre><code>#!\/bin\/bash\nout=\/var\/lib\/node_exporter\/textfile\/nvme.prom\ntmp=$out.$$\n{\n  j=$(nvme smart-log \/dev\/nvme0 -o json)\n  echo \"nvme_percentage_used $(echo \"$j\" | jq '.percentage_used')\"\n  echo \"nvme_available_spare $(echo \"$j\" | jq '.avail_spare')\"\n  echo \"nvme_media_errors $(echo \"$j\" | jq '.media_errors')\"\n  echo \"nvme_unsafe_shutdowns $(echo \"$j\" | jq '.unsafe_shutdowns')\"\n  echo \"nvme_data_units_written $(echo \"$j\" | jq '.data_units_written')\"\n  echo \"nvme_critical_warning $(echo \"$j\" | jq '.critical_warning')\"\n} &gt; $tmp &amp;&amp; mv $tmp $out<\/code><\/pre>\n<p>Set alert rules on the derivative, not just the level. A rate of <code>nvme_percentage_used<\/code> above 1.5 per week means the drive will hit 100 percent within a year and the workload needs write reduction. Any change in <code>nvme_critical_warning<\/code> from zero triggers a page, and <code>nvme_available_spare &lt; 10<\/code> triggers an immediate migrate. Keep a recording rule for the 30-day delta so a sudden acceleration is visible even when the absolute value is low.<\/p>\n<h2>Reducing Write Amplification Before It Kills the Drive<\/h2>\n<p>Wear equals host writes times amplification, and on a small VPS the amplification is usually self-inflicted. Check <code>findmnt -no OPTIONS \/<\/code> for <code>noatime<\/code>, confirm <code>\/sys\/block\/nvme0n1\/queue\/scheduler<\/code> reads <code>none<\/code>, and verify discard reaches the device with <code>lsblk --discard<\/code> plus a weekly <code>fstrim.timer<\/code>.<\/p>\n<p>Journald is the other consumer: <code>journalctl --disk-usage<\/code> shows consumption, and <code>SystemMaxUse=200M<\/code> with <code>Compress=yes<\/code> caps it. For databases, <code>innodb_flush_log_at_trx_commit=2<\/code> cuts small writes about 40 percent for up to one second of durability.<\/p>\n<h2>Reading the Telemetry When smartctl Returns Nothing<\/h2>\n<p>Many KVM providers expose the disk as virtio and the guest sees no SMART data at all. Before assuming the drive is opaque, try <code>smartctl -d scsi -a \/dev\/vda<\/code> and <code>nvme list-subsys<\/code>; some controllers pass through a reduced log set with only the critical warning bit. If both return nothing, the guest cannot monitor the device and the check has to happen host-side.<\/p>\n<p>In that case, build an application-level proxy metric: track the 99th percentile fsync latency from the database, since a worn drive shows it first. In PostgreSQL, <code>pg_stat_io<\/code> on version 16 and later reports <code>write_time<\/code> and <code>fsync_time<\/code> per backend type, and a rising fsync time with flat query volume is the same signal as a falling available spare. Retain those samples for comparison across drive generations.<\/p>\n<h2>When to Migrate and How to Verify the New Drive<\/h2>\n<p>Migrate when two of these hold: used above 80 percent, spare below 99, rising media errors, or QD1 write latency above 400 microseconds where provisioning measured 120. Snapshot with <code>fsfreeze --freeze \/data<\/code> around the copy and unfreeze after, or the journal will be inconsistent.<\/p>\n<p>On the new host, capture the same baseline files and compare model, firmware and rated endurance. Run <code>fio --name=w --rw=write --bs=128k --size=8G --direct=1<\/code> to confirm throughput, and log the starting percentage used so the wear rate is computable without waiting a month.<\/p>\n<p>Two weeks after cutover, compare the new drive&#8217;s percentage used against the old one at the same data unit count; a materially higher figure means the new volume has worse write amplification and the workload needs tuning. Archive the baseline directory with the host decommission record so a repeated failure has a reference point. Hosts where the provider exposes the controller are the only ones where this telemetry exists, and the <a href=\"https:\/\/virtualserversvps.com\/#providers\">NVMe-backed VPS plans compared at virtualserversvps.com<\/a> list the drive class per tier.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>An NVMe drive fails in a predictable sequence: endurance is consumed, spare blocks are reallocated, the media error rate climbs, and only then does write latency spike and the device&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":2,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1440","post","type-post","status-publish","format-standard","hentry","category-performance-optimization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure - Virtual Servers VPS Blog<\/title>\n<meta name=\"description\" content=\"An NVMe drive fails in a predictable sequence: endurance is consumed, spare blocks are reallocated, the media error rate climbs, and only then does write\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure\" \/>\n<meta property=\"og:description\" content=\"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-19T22:38:48+00:00\" \/>\n<meta name=\"author\" content=\"Virtual-Servers-Vps-Editor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Virtual-Servers-Vps-Editor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/\",\"name\":\"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"datePublished\":\"2026-10-19T22:38:48+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"description\":\"An NVMe drive fails in a predictable sequence: endurance is consumed, spare blocks are reallocated, the media error rate climbs, and only then does write\",\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/\",\"name\":\"Virtual Servers VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\",\"name\":\"Virtual-Servers-Vps-Editor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"caption\":\"Virtual-Servers-Vps-Editor\"},\"sameAs\":[\"https:\/\/virtualserversvps.com\/blog\"],\"url\":\"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure - Virtual Servers VPS Blog","description":"An NVMe drive fails in a predictable sequence: endurance is consumed, spare blocks are reallocated, the media error rate climbs, and only then does write","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/","og_locale":"en_US","og_type":"article","og_title":"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure","og_description":"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure","og_url":"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2026-10-19T22:38:48+00:00","author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/","url":"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/","name":"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"datePublished":"2026-10-19T22:38:48+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"description":"An NVMe drive fails in a predictable sequence: endurance is consumed, spare blocks are reallocated, the media error rate climbs, and only then does write","breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/nvme-wearout-smart-telemetry-monitoring\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"NVMe Wearout Telemetry on a VPS: Reading SMART Attributes to Predict SSD Failure"}]},{"@type":"WebSite","@id":"https:\/\/virtualserversvps.com\/blog\/#website","url":"https:\/\/virtualserversvps.com\/blog\/","name":"Virtual Servers VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0","name":"Virtual-Servers-Vps-Editor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","caption":"Virtual-Servers-Vps-Editor"},"sameAs":["https:\/\/virtualserversvps.com\/blog"],"url":"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/"}]}},"_links":{"self":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/1440","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/comments?post=1440"}],"version-history":[{"count":2,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/1440\/revisions"}],"predecessor-version":[{"id":1444,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/1440\/revisions\/1444"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=1440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=1440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=1440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}