Elk hostingbedrijf heeft ze: dozen en lades vol losse SSD's en harde schijven. Overgebleven na een upgrade, vervangen tijdens onderhoud, of meegekomen met een tweedehands server. Op de sticker staan het model en de capaciteit, maar niet het enige wat er echt toe doet: hoeveel leven zit er nog in?
Bij ons liep die stapel aardig op. Daarom bouwden we een tool die dat in één handeling oplost: schijf in het dock, en er rolt een label uit de printer met de gezondheid van die schijf erop. Het resultaat was eerlijk gezegd best confronterend, want er kon een hele boel de prullenbak in.
De tool staat open source op GitHub, dus je kunt hem zelf gebruiken. In dit artikel leggen we uit waarom we hem bouwden, wat SMART-data je precies vertelt en hoe het onder de motorkap werkt.
Het probleem: een la vol schijven zonder verhaal
Van een losse SSD weet je zonder test eigenlijk niets. Model en capaciteit zeggen niets over slijtage: een 1 TB SSD kan net uit de doos komen of jarenlang in een drukke server hebben gedraaid. En juist dat verschil bepaalt of je er nog iets mee kunt.
Handmatig uitzoeken kan natuurlijk: aansluiten, smartctl draaien, door de output scrollen, ergens noteren. Reken op een paar minuten per schijf. Bij twintig schijven ben je een ochtend verder, en halverwege ben je de draad kwijt welke schijf ook alweer welke was.
Dat laatste is het echte probleem. Een regel in een spreadsheet zit niet op de schijf geplakt. Een label wel.
Wat SMART-data je vertelt
SMART staat voor Self-Monitoring, Analysis and Reporting Technology. Elke moderne SSD en harde schijf houdt zelf statistieken bij over gebruik en slijtage. Een paar waardes die er echt toe doen:
- Endurance of percentage used: hoeveel van de geschatte schrijflevensduur al verbruikt is. Voor SSD's is dit veruit het belangrijkste getal.
- Reallocated en pending sectors: sectoren die zijn omgeleid of verdacht zijn. Bij harde schijven een klassiek waarschuwingssignaal.
- Power-on hours en power cycles: hoe lang en hoe vaak de schijf gedraaid heeft.
- Total bytes written: hoeveel data er in totaal naar de schijf geschreven is.
- Temperatuur en overall health: de temperatuur tijdens de test en het oordeel dat de fabrikant zelf afgeeft.
Het lastige is dat je die waardes terugkrijgt als een muur van tekst met tientallen ruwe attributen, die per fabrikant net anders heten en in net andere eenheden staan. Prima om één schijf te beoordelen. Onwerkbaar als je een hele voorraad wilt doorlopen.
Onze oplossing: SMART-data direct op een label
Daarom bouwden we smart-labels. De werking is bewust simpel:
- Aansluiten: schijf in een USB-dock, meer hoef je niet te doen.
- Detecteren: de tool herkent de schijf via zowel WMI als de Windows Storage-laag, zodat docks die zichzelf als SCSI melden ook gewoon meedoen.
- Uitlezen: de SMART-data wordt opgehaald met smartctl, waarbij automatisch SAT en de USB-naar-NVMe-bridgeprotocollen van ASMedia, JMicron en Realtek geprobeerd worden.
- Beoordelen: alle losse waardes worden vertaald naar één oordeel: GOOD, CHECK of BAD.
- Printen: er rolt een label uit met dat oordeel, plus model, serienummer, een scanbare Code 39-barcode, capaciteit, type, resterende endurance, temperatuur, draaiuren en de testdatum.
Onder de motorkap is het één PowerShell-script zonder verdere afhankelijkheden. Geen runtime installeren, geen SDK's: het draait op een standaard Windows 10- of 11-machine en print via de gewone Windows-printerdriver. smartmontools wordt bij de eerste start automatisch gedownload. Het labelontwerp schaalt zichzelf naar het formaat van je labels (standaard 89 x 28 mm) en laat de barcode automatisch weg als er te weinig ruimte is om hem leesbaar te printen.
GOOD, CHECK of BAD: hoe het oordeel tot stand komt
Dat oordeel op het label is geen slag in de lucht. We hanteren deze grenzen:
- BAD: SMART overall status FAILED, niet-corrigeerbare sectoren, een NVMe critical warning, media errors of spare onder de drempel, tien of meer reallocated sectors, of minder dan 10% endurance over.
- CHECK: een paar reallocated of pending sectors, of minder dan 30% endurance over.
- GOOD: geen van bovenstaande.
Eén nuance die vaak misgaat: UDMA CRC-fouten worden wel op het label gemeld, maar tellen niet mee in het oordeel. Die wijzen namelijk bijna altijd op een kabel of een dock, niet op een probleem met de schijf zelf. Zou je ze wel meetellen, dan keur je prima schijven onterecht af.
Ook het percentage resterende endurance wordt zorgvuldig bepaald. Eerst kijken we naar de waarde die smartctl zelf berekent, dan naar het NVMe-veld percentage_used, en pas daarna naar een levensduurattribuut op naam. En alleen als de uitkomst een plausibel percentage tussen 0 en 100 is. Zo voorkom je dat een verkeerd geïnterpreteerd vendor-attribuut een gezonde schijf als versleten bestempelt.
Lopende band-modus en een spoor dat je terugvindt
Bij één schijf is zo'n tool overbodig, bij vijftig maakt hij het verschil. Daarom heeft smart-labels een lopende band-modus: je laat het venster openstaan, prikt de ene na de andere schijf in het dock en de labels rollen er vanzelf uit. Een schijf die helemaal niet meer gedetecteerd wordt, krijgt met één toetsaanslag alsnog een BAD-label. Want ook een dode schijf wil je herkenbaar in de bak hebben liggen.
Elke test wordt weggeschreven naar een CSV-log met datum, model, serienummer, gezondheid en oordeel, en van elk label wordt een PNG bewaard. Zo heb je naast de fysieke labels ook een digitaal overzicht van je hele voorraad, dat gewoon in Excel opent.
Wat het ons oplevert
- Voorraad in kaart: we weten per schijf wat we hebben, zonder hem opnieuw aan te sluiten.
- Sneller werken: een schijf beoordelen kost seconden in plaats van minuten.
- Scanbaar: het serienummer staat als barcode op het label, dus inboeken gaat met een scanner.
- Minder verrassingen: versleten schijven vallen meteen door de mand, in plaats van pas op het verkeerde moment.
- Minder verspilling: wat nog prima is blijft in gebruik, en wat echt op is gaat gecontroleerd naar de recycling.
Dat laatste punt is voor ons belangrijker dan het klinkt. We draaien onze VPS- en dedicated-infrastructuur op eigen hardware in twee ISO 27001-gecertificeerde datacenters in Amsterdam. Eigen hardware betekent ook zelf verantwoordelijk zijn voor wat erin zit, en dan wil je niet gokken op basis van een sticker.
Zelf gebruiken? Het staat op GitHub
We hebben smart-labels open source gezet op GitHub. Veel meer dan dit heb je niet nodig:
- Windows 10 of 11 met beheerdersrechten. Het script vraagt zelf om verhoging via UAC, omdat het low-level toegang tot de schijf nodig heeft.
- Een USB-dock of adapter die SMART doorgeeft. Vrijwel elk modern dock doet dat.
- Een labelprinter die als normale Windows-printer geïnstalleerd is: DYMO, Brother, Zebra of een NIIMBOT-achtige printer, het maakt niet uit.
Daarna is het een kwestie van een testlabel printen om de uitlijning te controleren, de printernaam in config.json zetten en beginnen. Labelformaat, aantal kopieën, de footertekst en of je een barcode wilt: het staat allemaal in datzelfde configuratiebestand.
Klein script, groot verschil
Dit is geen spannende technologie. SMART bestaat al decennia en smartctl doet het echte werk. Het enige wat wij hebben toegevoegd is de laatste stap: de data van het scherm naar het label brengen, waar hij ook daadwerkelijk gebruikt wordt.
Precies daar zit bij dit soort klusjes vaak de winst. Niet in een groot systeem, maar in het wegnemen van die ene handmatige stap die niemand consequent volhoudt.
Draai je zelf een server of een homelab en wil je weten hoe je schijven ervoor staan? Pak de tool gerust van GitHub. Vragen of ideeën? Stel ze via onze Discord of maak een ticket aan, we denken graag met je mee!