# S.M.A.R.T.

## Hva det er

S.M.A.R.T. står for Self-Monitoring, Analysis and Reporting Technology; smartmontools og prosjektets
manualsider skriver det uten punktum, som SMART. Det er et register en disk fører over seg selv i
sin egen fastvare mens den arbeider: tellinger av hendelser, målinger av tilstanden og resultatene
av tester den har kjørt. Operativsystemet kan når som helst be stasjonen om dette registeret.
smartmontools, verktøysettet denne siden bygger på, skriver at teknologien er innebygd i de fleste
moderne ATA/SATA-, SCSI/SAS- og NVMe-disker. Pakken har to programmer: smartctl, som spør og tester
én disk når du kjører det, og smartd, en daemon som holder vakt i bakgrunnen.

Hva en disk kan rapportere, avhenger av kommandosettet den snakker. En ATA- eller SATA-disk fører en
tabell over nummererte attributter fra 1 til 253, hver med sitt navn; attributt 12 teller for
eksempel hvor mange ganger disken er slått på. Hver attributt har en råverdi, selve tellingen eller
målingen, og en normalisert verdi mellom 1 og 254 som produsentens fastvare regner ut fra råverdien
etter sin egen formel. Ved siden av står den laveste normaliserte verdien disken har registrert i
hele levetiden sin, og en terskel produsenten har fastsatt. En attributt der den normaliserte
verdien faller til terskelen eller lavere, regnes som feilet.

Hver attributt hører til en av to typer. En pre-failure-attributt på eller under terskelen sier at
disken er nær ved å svikte. En old age-attributt, også kalt en bruksattributt, på eller under
terskelen sier at disken har nådd slutten av livet sitt gjennom vanlig slitasje. Manualen til
smartctl understreker at merkelappen Pre-fail i seg selv ikke er grunn til bekymring: den får først
den betydningen når verdien har krysset terskelen.

Over tabellen står én samlet dom, helsestatusen. En ATA-disk svarer på kommandoen SMART RETURN
STATUS med bestått eller ikke bestått. En SCSI- eller SAS-disk melder fra via en loggside for unntak
og sine sense-data, og en NVMe-stasjon setter biter i Critical Warning-byten i sin SMART/Health
Information-logg. Disker kan også teste seg selv på forespørsel: en kort test, som regel ferdig på
under ti minutter, en lang som tar alt fra flere titalls minutter til flere timer, og på ATA-disker
en conveyance-test som ser etter skader fra transport. Resultatet av hver test havner i en
selvtestlogg på disken.

## Hvorfor det er viktig

En disk ser sine egne problemer før noen andre gjør det. Den vet hvilke sektorer som ikke lenger lar
seg lese, hvor ofte den er slått på, og hvor varm den går. S.M.A.R.T. er kanalen som bringer den
kunnskapen videre til menneskene som har ansvaret for dataene, og smartmontools beskriver gevinsten
nøkternt: i mange tilfeller, skriver prosjektet, gir verktøyene forhåndsvarsel om at en disk
forringes og kommer til å svikte. Mange tilfeller er ikke alle, og mye av denne siden handler om
forskjellen.

Det sterkeste signalet er dommen. Når smartctl melder en helsestatus som ikke er bestått, sier
manualen at disken enten allerede har sviktet eller venter å svikte i løpet av de neste 24 timene,
og den ber leseren hente hele rapporten og flytte dataene til et trygt sted uten å nøle. Svakere
signaler kommer tidligere. En ventende sektor (pending sector) er en sektor disken vil merke som
dårlig og bytte ut med en reservesektor, typisk fordi en lesing fra den mislyktes; et tall over null
betyr at noen data på disken ikke lenger kan leses. Disken teller disse sektorene i attributt 197,
og i attributt 198 teller den sektorer som verken en offline-skanning eller en selvtest klarte å
lese.

Ingenting av dette hjelper hvis ingen ser etter. smartd slår på overvåkingen på ATA-disker, spør
diskene hver halvtime som standard, melder feil og endrede attributter til syslog og kan sende et
varsel på e-post. Den kan også starte selvtester etter en tidsplan, så det trengs ingen cron-jobb
til den delen. Prosjektet er gammelt og fortsatt i bevegelse: det markerte 20-årsdagen for sin
første utgivelse i oktober 2022, ga ut versjon 7.5 den 30. april 2025 og flyttet utviklingen fra
SourceForge til GitHub den 1. juni 2025. Det kjører blant annet på Linux, BSD-systemene, macOS,
Solaris og Windows.

## Slik ser det ut i praksis

Ta en ny server med en SATA-disk på `/dev/sda`. Tre kommandoer gir oversikten:

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

Den første viser modell, serienummer og fastvare, om stasjonen støtter S.M.A.R.T., om funksjonen er
slått på, og om stasjonen står i stasjonsdatabasen til smartmontools. Den andre viser dommen. Den
tredje viser attributtabellen: VALUE og WORST rommer de normaliserte tallene, THRESH terskelen, TYPE
sier Pre-fail eller Old_age, RAW_VALUE rommer råtallet, og WHEN_FAILED viser `FAILING_NOW`,
`In_the_past` eller en strek for en attributt som aldri har feilet. Vil du ha alt på én gang, viser
`smartctl -x` all informasjonen verktøyet kan lese, S.M.A.R.T. og annet, med tabellen i et tettere
oppsett.

En lang selvtest er den grundigere utgaven av den korte:

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

Med mindre `-C` ber om captive mode, kjører testen inne i disken mens systemet gjør jobben sin. Den
kan gjøre stasjonen tregere, tung trafikk fra operativsystemet gjør at den tar lengre tid, og bare
én test kjører om gangen. Manualen legger til at det ikke skal gjøre skade å slå av maskinen midt i
testen, fordi testen enten avbrytes eller gjenopptas. Den andre kommandoen leser selvtestloggen når
den anslåtte tiden er gått.

Skript bør lese avslutningskoden framfor teksten. smartctl bygger den av åtte biter, og manualens
eget eksempel tester bit 3, som settes når disken melder at den holder på å svikte:

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

`-q silent` skriver ingenting, så avslutningskoden er det eneste svaret. En kode over null betyr
ikke alltid en døende disk: bit 6 alene betyr for eksempel bare at feilloggen inneholder
oppføringer.

På lengre sikt leser smartd reglene sine fra `smartd.conf`. Én linje kan dekke alle diskene
skanningen finner:

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

`-a` slår på standardsettet: helsestatusen, feil- og selvtestloggene, feilede bruksattributter,
endringer i attributtverdier og, på ATA-disker, tellingene i attributt 197 og 198. Mønsteret etter
`-s` starter en kort test hver dag mellom kl. 02 og 03 og en lang hver lørdag mellom kl. 03 og 04.
`-W 2,40,45` melder en temperaturendring på 2 grader, skriver en merknad i loggen ved 40 °C og
sender et kritisk varsel, via syslog og e-post, ved 45 °C. `-m` angir mottakeren, og `-M test`
sender én testmelding når smartd starter. Etter en endring får `killall -HUP smartd` daemonen til å
lese filen på nytt.

Tall som disse betyr mest mens disken fortsatt svarer. Porteføljeoppføringen vår om
[å hente data ut av ødelagte lagringsmedier](/nb/portfolio/recovered-data-from-sd-cards-hdds-ssds-and-raid/)
begynner etter det punktet: mellom 2003 og 2014 kom folk med minnekort, harddisker, SSD-er og
RAID-oppsett som allerede hadde sviktet, og metoden måtte passe til akkurat den typen medium.

## Hvor det går galt

**En bestått dom leses som en ren helseattest.** Helsestatusen sier bare at disken ikke selv har
erklært seg sviktet. Attributter kan ligge på eller under terskelen nå eller tidligere, og ventende
sektorer kan allerede romme uleselige data, mens dommen fortsatt lyder bestått. Løsningen er å lese
attributtabellen og selvtestloggen i tillegg, la smartd melde attributt 197 og 198 og ha
sikkerhetskopier som ikke er avhengige av diskens mening om seg selv.

**Råverdier tas for god fisk.** Standarden sier ikke hvordan en råverdi svarer til en fysisk enhet.
Manualen til smartctl nevner en Hitachi-disk som teller driftstid i minutter i stedet for timer, og
IBM-disker som holder tre temperaturer i råverdiene sine. Siden revisjon 4 av ATA/ATAPI-4 har
betydningen av attributtene vært helt opp til leverandørene, og SSD-er gir noen av numrene andre
betydninger, så navnet som skrives ut kan være feil med mindre stasjonen står i databasen. Løsningen
er å sammenligne en disk med dens egen historikk, ikke med en annen modell, og sjekke hva `-i` sier
om databasen før man stoler på et navn.

**`-a` brukes på en ATA-disk.** Det var den klassiske måten å se alt på, men manualen anbefaler det
ikke lenger for ATA, fordi det utelater valgene som krever 48-bits ATA-kommandoer, for eksempel den
utvidede feilloggen. Løsningen er å bruke `-x`.

**En RAID-kontroller skjuler diskene.** Operativsystemet ser én logisk stasjon som ikke har noe
nyttig å melde, og den automatiske skanningen til smartd på Linux utelater disker bak
RAID-kontrollere helt. Løsningen er å snakke med hver fysiske disk gjennom kontrolleren med riktig
enhetstype: `-d megaraid,N` når disk N bak en MegaRAID- eller Dell PERC-kontroller på Linux og
FreeBSD, og en linje som `/dev/sda -d megaraid,0 -a` i `smartd.conf` setter den disken under oppsyn.

**Et USB-kabinett står i veien.** USB-lagring snakker SCSI-kommandosettet mot datamaskinen, men
rommer nesten alltid en ATA- eller SATA-disk eller flashminne. Manualen nevner fastvaren i slike
broer, sammen med RAID-kontrollere, som et lag som kan gjøre helsestatusen ukjent, og smartctl
advarer da og nøyer seg med å sammenligne pre-failure-attributtene med tersklene deres. Løsningen er
å prøve `-d sat`, som pakker ATA-kommandoene inn i standarden for oversettelse fra SCSI til ATA;
`-d sat,12` velger den korteste av de to kommandoformene.

**Varselet på e-post kommer aldri.** smartd sender e-post med systemets `mail`-kommando, som må
ligge i stien til miljøet smartd ble startet fra. Mangler den, finnes varselet bare i syslog.
Løsningen er `-M test` og deretter å sjekke at testmeldingen faktisk har havnet i en innboks noen
leser; `-M exec` kan peke smartd mot et annet e-postprogram eller et skript.

**En testplan starter aldri.** I mønsteret etter `-s` skal måned, dag i måneden og time skrives med
to sifre hver. Et mønster som `S/../.././2` treffer aldri, og manualen advarer nettopp mot det.
Løsningen er å skrive `02` og lese loggen etter første natt for å se at en test faktisk ble kjørt.

**En feilaktig endring går ubemerket hen.** Når smartd leser inn konfigurasjonen på nytt etter et
hangup-signal og finner en syntaksfeil, skriver den ut feilen og fortsetter med de gamle reglene,
som om signalet aldri kom. Løsningen er å lese loggen etter hver innlesing eller starte tjenesten på
nytt, for smartd nekter helt å starte med en feilaktig fil.

**Ingen følger med på temperaturen.** All temperaturrapportering er slått av som standard, og `-a`
slår den ikke på. Løsningen er å legge til `-W` med grenser som passer maskinvaren.

**En sjekk vekker en sovende disk.** En disk som har spunnet ned for å spare strøm, spinner opp
igjen når smartctl spør den. Løsningen, for skript som kjører ofte, er `-n standby`, som får
smartctl til å avslutte med kode 2 i stedet for å vekke disken, eller `-n standby,0`, som regner det
tilfellet som vellykket.

## Les mer

- [smartmontools](https://www.smartmontools.org/)
  — prosjektets forside: begge programmene, plattformer og nytt om utgivelser.
- [smartctl(8), kildeteksten til manualsiden](https://github.com/smartmontools/smartmontools/blob/main/src/smartctl.8.in)
  — attributter, terskler, helsestatus, selvtester, enhetstyper og avslutningskoder.
- [smartd(8), kildeteksten til manualsiden](https://github.com/smartmontools/smartmontools/blob/main/src/smartd.8.in)
  — daemonen: hvor ofte den spør, syslog, signaler og hvordan den finner disker.
- [smartd.conf(5), kildeteksten til manualsiden](https://github.com/smartmontools/smartmontools/blob/main/src/smartd.conf.5.in)
  — direktiver for overvåking, testplaner, temperaturgrenser og e-post.

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