# S.M.A.R.T.

## Hvad det er

S.M.A.R.T. står for Self-Monitoring, Analysis and Reporting Technology;
smartmontools og projektets manualer skriver det uden punktummer, som SMART. Det
er en optegnelse, som en disk fører over sig selv i sin egen firmware, mens den
arbejder: tællinger af hændelser, målinger af dens tilstand og resultaterne af
de test, den har kørt. Styresystemet kan til enhver tid bede drevet om den
optegnelse. smartmontools, det værktøjssæt denne side bygger på, skriver, at
teknologien er indbygget i de fleste moderne ATA/SATA-, SCSI/SAS- og NVMe-diske.
Pakken har to programmer: smartctl, der spørger og tester én disk, når du kører
det, og smartd, en dæmon, der holder vagt i baggrunden.

Hvad en disk kan rapportere, afhænger af det kommandosæt, den taler. En ATA-
eller SATA-disk fører en tabel over nummererede attributter fra 1 til 253, hver
med sit navn; attribut 12 tæller for eksempel, hvor mange gange disken er blevet
tændt. Hver attribut har en råværdi, selve tællingen eller målingen, og en
normaliseret værdi mellem 1 og 254, som producentens firmware regner ud fra
råværdien efter sin egen formel. Ved siden af dem står den laveste normaliserede
værdi, disken har registreret i hele sin levetid, og en tærskel, som producenten
har fastsat. En attribut, hvis normaliserede værdi falder til tærsklen eller
derunder, regnes for fejlet.

Hver attribut hører til en af to typer. En pre-failure-attribut på eller under
sin tærskel siger, at disken er tæt på at bryde sammen. En old age-attribut,
også kaldet en brugsattribut, på eller under sin tærskel siger, at disken har
nået enden af sit liv gennem almindeligt slid. smartctl-manualen understreger,
at mærkaten Pre-fail i sig selv ikke er grund til bekymring: den får først den
betydning, når værdien har krydset tærsklen.

Over tabellen står én samlet dom, sundhedsstatussen. En ATA-disk svarer på
kommandoen SMART RETURN STATUS med bestået eller ikke bestået. En SCSI- eller
SAS-disk melder via en logside for undtagelser og sine sense-data, og et
NVMe-drev sætter bit i Critical Warning-byten i sin SMART/Health
Information-log. Diske kan også teste sig selv på bestilling: en kort test, som
regel færdig på under ti minutter, en lang, der tager alt fra snesevis af
minutter til flere timer, og på ATA-diske en conveyance-test, der leder efter
skader fra transport. Resultatet af hver test havner i en selvtestlog på disken.

## Hvorfor det betyder noget

En disk ser sine egne problemer, før nogen anden gør. Den ved, hvilke sektorer
den ikke har formået at læse, hvor tit den er blevet tændt, og hvor varm den
kører. S.M.A.R.T. er den kanal, der bringer den viden videre til de mennesker,
som har ansvaret for dataene, og smartmontools beskriver gevinsten beskedent: i
mange tilfælde, skriver projektet, giver værktøjerne et forvarsel om, at en disk
er ved at blive dårligere og vil bryde sammen. Mange tilfælde er ikke alle, og
en stor del af denne side handler om forskellen.

Det stærkeste signal er dommen. Når smartctl melder en sundhedsstatus, der ikke
er bestået, siger manualen, at disken enten allerede har fejlet eller venter at
fejle inden for de næste 24 timer, og den beder læseren hente den fulde rapport
og flytte dataene et sikkert sted hen uden tøven. Svagere signaler kommer
tidligere. En ventende sektor (pending sector) er en, disken gerne vil markere
som dårlig og bytte ud med en reservesektor, typisk fordi en læsning fra den
mislykkedes; et tal over nul betyder, at nogle data på disken ikke længere kan
læses. Disken tæller de sektorer i attribut 197, og i attribut 198 tæller den
sektorer, som hverken en offline-scanning eller en selvtest har formået at læse.

Intet af det hjælper, hvis ingen kigger. smartd slår overvågningen til på
ATA-diske, spørger diskene hver halve time som standard, melder fejl og ændrede
attributter til syslog og kan sende en advarsel med e-mail. Den kan også starte
selvtest efter en tidsplan, så der skal ikke noget cron-job til den del.
Projektet er gammelt og stadig i bevægelse: det markerede 20-året for sin første
udgivelse i oktober 2022, udgav version 7.5 den 30. april 2025 og flyttede sin
udvikling fra SourceForge til GitHub den 1. juni 2025. Det kører blandt andet på
Linux, BSD-systemerne, macOS, Solaris og Windows.

## Sådan ser det ud i praksis

Tag en ny server med en SATA-disk på `/dev/sda`. Tre kommandoer giver
overblikket:

```sh
smartctl -i /dev/sda
smartctl -H /dev/sda
smartctl -A /dev/sda
```

Den første viser model, serienummer og firmware, om drevet understøtter
S.M.A.R.T., om funktionen er slået til, og om drevet står i smartmontools'
drevdatabase. Den anden viser dommen. Den tredje viser attributtabellen: VALUE
og WORST rummer de normaliserede tal, THRESH tærsklen, TYPE siger Pre-fail eller
Old_age, RAW_VALUE rummer råtallet, og WHEN_FAILED viser `FAILING_NOW`,
`In_the_past` eller en streg for en attribut, der aldrig har fejlet. Vil du have
det hele på én gang, viser `smartctl -x` alt, hvad værktøjet kan læse,
S.M.A.R.T. og andet, med tabellen i et tættere layout.

En lang selvtest er den grundigere udgave af den korte:

```sh
smartctl -t long /dev/sda
smartctl -l selftest /dev/sda
```

Medmindre `-C` beder om captive mode, kører testen inde i disken, mens systemet
passer sit arbejde. Den kan gøre drevet langsommere, travl trafik fra
styresystemet får den til at tage længere tid, og der kører kun én test ad
gangen. Manualen tilføjer, at en nedlukning midt i testen ikke bør gøre skade,
fordi testen enten afbrydes eller genoptages. Den anden kommando læser
selvtestloggen, når den anslåede tid er gået.

Scripts bør læse exitstatussen frem for teksten. smartctl bygger den af otte
bit, og manualens eget eksempel tester bit 3, som sættes, når disken melder, at
den er ved at fejle:

```sh
smartctl -q silent -H /dev/sda
smartstat=$(($? & 8))
```

`-q silent` udskriver ingenting, så exitstatussen er det eneste svar. En status
over nul betyder ikke altid en døende disk: bit 6 alene betyder for eksempel
kun, at fejlloggen indeholder poster.

På længere sigt læser smartd sine regler fra `smartd.conf`. Én linje kan dække
alle de diske, scanningen finder:

```text
DEVICESCAN -a -s (S/../.././02|L/../../6/03) -W 2,40,45 \
  -m ops@example.com -M test
```

`-a` slår standardsættet til: sundhedsstatussen, fejl- og selvtestloggene,
fejlede brugsattributter, ændringer i attributværdier og, på ATA-diske,
tællingerne i attribut 197 og 198. Mønsteret efter `-s` starter en kort test
hver dag mellem kl. 2 og 3 om natten og en lang hver lørdag mellem kl. 3 og 4.
`-W 2,40,45` melder en temperaturændring på 2 grader, skriver en note i loggen
ved 40 °C og sender en kritisk advarsel, via syslog og e-mail, ved 45 °C. `-m`
angiver modtageren, og `-M test` sender én testbesked, når smartd starter. Efter
en ændring får `killall -HUP smartd` dæmonen til at læse filen igen.

Tal som disse betyder mest, mens disken stadig svarer. Vores porteføljeopslag om
[datagendannelse fra ødelagte lagermedier](/da/portfolio/recovered-data-from-sd-cards-hdds-ssds-and-raid/)
begynder efter det punkt: mellem 2003 og 2014 kom folk ind med hukommelseskort,
harddiske, SSD'er og RAID-arrays, der allerede havde svigtet, og metoden skulle
passe til netop den slags medie.

## Hvor det går galt

**En bestået dom læses som en ren attest.** Sundhedsstatussen siger kun, at
disken ikke selv har erklæret sig fejlet. Attributter kan ligge på eller under
deres tærskel nu eller tidligere, og ventende sektorer kan allerede rumme
ulæselige data, mens dommen stadig lyder på bestået. Løsningen er at læse
attributtabellen og selvtestloggen med, lade smartd melde attribut 197 og 198 og
holde backup, der ikke afhænger af diskens mening om sig selv.

**Råværdier tages for pålydende.** Standarden siger ikke, hvordan en råværdi
svarer til en fysisk enhed. smartctl-manualen nævner en Hitachi-disk, der tæller
driftstid i minutter i stedet for timer, og IBM-diske, der holder tre
temperaturer i deres råværdier. Siden revision 4 af ATA/ATAPI-4 har betydningen
af attributterne været helt op til leverandørerne, og SSD'er giver nogle af
numrene andre betydninger, så det udskrevne navn kan være forkert, medmindre
drevet står i databasen. Løsningen er at sammenligne en disk med dens egen
historik, ikke med en anden model, og at tjekke, hvad `-i` siger om databasen,
før man stoler på et navn.

**`-a` bruges på en ATA-disk.** Det var den klassiske måde at se alt på, men
manualen anbefaler det ikke længere til ATA, fordi det udelader de
valgmuligheder, der kræver 48-bit ATA-kommandoer, for eksempel den udvidede
fejllog. Løsningen er at bruge `-x`.

**En RAID-controller skjuler diskene.** Styresystemet ser ét logisk drev, som
ikke har noget brugbart at melde, og den automatiske scanning i smartd på Linux
udelader helt diske bag RAID-controllere. Løsningen er at tale med hver fysisk
disk gennem controlleren med den passende enhedstype: `-d megaraid,N` når disk N
bag en MegaRAID- eller Dell PERC-controller på Linux og FreeBSD, og en linje som
`/dev/sda -d megaraid,0 -a` i `smartd.conf` sætter den disk under opsyn.

**Et USB-kabinet står i vejen.** USB-lagring taler SCSI-kommandosættet over for
computeren, men rummer næsten altid en ATA- eller SATA-disk eller
flashhukommelse. Manualen nævner firmwaren i den slags broer, sammen med
RAID-controllere, som et lag, der kan efterlade sundhedsstatussen ukendt, og
smartctl advarer så og nøjes med at sammenligne pre-failure-attributterne med
deres tærskler. Løsningen er at prøve `-d sat`, som pakker ATA-kommandoerne ind
i standarden for SCSI-til-ATA-oversættelse; `-d sat,12` vælger den korteste af
dens to kommandoformer.

**Advarselsmailen kommer aldrig.** smartd sender mail med systemets
`mail`-kommando, som skal ligge i stien for det miljø, smartd blev startet fra.
Mangler den, findes advarslen kun i syslog. Løsningen er `-M test` og derefter
at tjekke, at testbeskeden faktisk er landet i en indbakke, som nogen læser;
`-M exec` kan pege smartd mod et andet mailprogram eller et script.

**En testplan går aldrig i gang.** I mønsteret efter `-s` skal måned, dag i
måneden og time hver skrives med to cifre. Et mønster som `S/../.././2` matcher
aldrig, og manualen advarer netop om det. Løsningen er at skrive `02` og at læse
loggen efter den første nat for at se, at en test faktisk kørte.

**En fejlbehæftet ændring går ubemærket hen.** Når smartd genindlæser sin
konfiguration på et hangup-signal og finder en syntaksfejl, skriver den fejlen
ud og fortsætter med de gamle regler, som om signalet aldrig var kommet.
Løsningen er at læse loggen efter hver genindlæsning eller at genstarte
tjenesten, for smartd nægter helt at starte med en fejlbehæftet fil.

**Ingen holder øje med temperaturen.** Alle temperaturrapporter er slået fra som
standard, og `-a` slår dem ikke til. Løsningen er at tilføje `-W` med grænser,
der passer til hardwaren.

**Et tjek vækker en sovende disk.** En disk, der er spundet ned for at spare
strøm, spinner op, når smartctl spørger den. Løsningen, for scripts der kører
ofte, er `-n standby`, som får smartctl til at afslutte med status 2 i stedet
for at vække disken, eller `-n standby,0`, som regner det tilfælde som en
succes.

## Læs mere

- [smartmontools](https://www.smartmontools.org/)
  — projektets forside: begge programmer, platforme og nyt om udgivelser.
- [smartctl(8), kildetekst til manualsiden](https://github.com/smartmontools/smartmontools/blob/main/src/smartctl.8.in)
  — attributter, tærskler, sundhedsstatus, selvtest, enhedstyper og exitbit.
- [smartd(8), kildetekst til manualsiden](https://github.com/smartmontools/smartmontools/blob/main/src/smartd.8.in)
  — dæmonen: hvor tit den spørger, syslog, signaler og hvordan den finder diske.
- [smartd.conf(5), kildetekst til manualsiden](https://github.com/smartmontools/smartmontools/blob/main/src/smartd.conf.5.in)
  — direktiver for overvågning, testplaner, temperaturgrænser og e-mail.

<https://engineer.company/da/glossary/smart/>
