# S.M.A.R.T.

## Vad det är

S.M.A.R.T. står för Self-Monitoring, Analysis and Reporting Technology; smartmontools och projektets
manualsidor skriver det utan punkter, som SMART. Det är ett register som disken för över sig själv i
sin egen firmware medan den arbetar: räknare för händelser, mätvärden om dess skick och resultaten
av tester den har kört. Operativsystemet kan när som helst be enheten om det registret.
smartmontools, verktygssamlingen som den här sidan bygger på, skriver att tekniken är inbyggd i de
flesta moderna ATA/SATA-, SCSI/SAS- och NVMe-diskar. Paketet har två program: smartctl, som frågar
ut och testar en disk när du kör det, och smartd, en daemon som håller vakt i bakgrunden.

Vad en disk kan rapportera beror på vilken kommandouppsättning den talar. En ATA- eller SATA-disk
för en tabell över numrerade attribut från 1 till 253, vart och ett med sitt namn; attribut 12
räknar till exempel hur många gånger disken har slagits på. Varje attribut har ett råvärde, själva
räknaren eller mätningen, och ett normaliserat värde mellan 1 och 254 som tillverkarens firmware
räknar fram ur råvärdet med sin egen formel. Bredvid dem står det lägsta normaliserade värde disken
har registrerat under hela sin livstid och en tröskel som tillverkaren har bestämt. Ett attribut
vars normaliserade värde sjunker till tröskeln eller under räknas som underkänt.

Varje attribut hör till en av två typer. Ett pre-failure-attribut på eller under sin tröskel säger
att disken är nära att haverera. Ett old age-attribut, även kallat användningsattribut, på eller
under sin tröskel säger att disken har nått slutet av sitt liv genom vanligt slitage. Manualen för
smartctl betonar att etiketten Pre-fail i sig inte är något att oroa sig för: den får den innebörden
först när värdet har passerat tröskeln.

Ovanför tabellen står ett samlat utlåtande, hälsostatusen. En ATA-disk svarar på kommandot SMART
RETURN STATUS med godkänt eller underkänt. En SCSI- eller SAS-disk rapporterar via en loggsida för
undantag och sina sense-data, och en NVMe-enhet sätter bitar i Critical Warning-byten i sin
SMART/Health Information-logg. Diskar kan också testa sig själva på begäran: ett kort test, som
brukar vara klart på under tio minuter, ett långt som tar allt från tiotals minuter till flera
timmar, och på ATA-diskar ett conveyance-test som letar efter transportskador. Resultatet av varje
test hamnar i en självtestlogg på disken.

## Varför det spelar roll

En disk ser sina egna problem innan någon annan gör det. Den vet vilka sektorer som inte längre går
att läsa, hur ofta den har slagits på och hur varm den går. S.M.A.R.T. är kanalen som för den
kunskapen vidare till de människor som ansvarar för datan, och smartmontools beskriver vinsten
återhållsamt: i många fall, skriver projektet, ger verktygen förvarning om att en disk försämras och
kommer att haverera. Många fall är inte alla, och en stor del av den här sidan handlar om
skillnaden.

Den starkaste signalen är utlåtandet. När smartctl rapporterar en underkänd hälsostatus säger
manualen att disken antingen redan har havererat eller räknar med att göra det inom de närmaste 24
timmarna, och den uppmanar läsaren att hämta hela rapporten och flytta datan till en trygg plats
utan dröjsmål. Svagare signaler kommer tidigare. En väntande sektor (pending sector) är en sektor
som disken vill markera som dålig och byta mot en reservsektor, typiskt för att en läsning från den
misslyckades; ett tal över noll betyder att en del data på disken inte längre går att läsa. Disken
räknar de sektorerna i attribut 197, och i attribut 198 räknar den sektorer som varken en
offline-skanning eller ett självtest lyckades läsa.

Inget av det hjälper om ingen tittar. smartd slår på övervakningen på ATA-diskar, frågar diskarna
var 30:e minut som standard, rapporterar fel och ändrade attribut till syslog och kan skicka en
varning med e-post. Den kan också starta självtester enligt en tidsplan, så det behövs inget
cron-jobb för den delen. Projektet är gammalt och fortfarande i rörelse: i oktober 2022 markerade
det att 20 år hade gått sedan den första utgåvan, den 30 april 2025 släpptes version 7.5, och den 1
juni 2025 flyttade utvecklingen från SourceForge till GitHub. Det körs bland annat på Linux,
BSD-systemen, macOS, Solaris och Windows.

## Så ser det ut i praktiken

Ta en ny server med en SATA-disk på `/dev/sda`. Tre kommandon ger överblicken:

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

Det första visar modell, serienummer och firmware, om enheten stöder S.M.A.R.T., om funktionen är
påslagen och om enheten finns i enhetsdatabasen hos smartmontools. Det andra visar utlåtandet. Det
tredje visar attributtabellen: VALUE och WORST innehåller de normaliserade talen, THRESH tröskeln,
TYPE anger Pre-fail eller Old_age, RAW_VALUE innehåller råtalet, och WHEN_FAILED visar
`FAILING_NOW`, `In_the_past` eller ett streck för ett attribut som aldrig har underkänts. Vill du se
allt på en gång visar `smartctl -x` all information verktyget kan läsa, S.M.A.R.T. och annat, med
tabellen i en tätare layout.

Ett långt självtest är den grundligare versionen av det korta:

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

Om inte `-C` begär captive mode körs testet inne i disken medan systemet sköter sitt arbete. Det kan
göra enheten långsammare, tung trafik från operativsystemet gör att det tar längre tid, och bara ett
test körs åt gången. Manualen tillägger att en avstängning mitt i testet inte bör göra någon skada,
eftersom testet antingen avbryts eller återupptas. Det andra kommandot läser självtestloggen när den
beräknade tiden har gått.

Skript bör läsa slutstatusen i stället för texten. smartctl bygger den av åtta bitar, och manualens
eget exempel testar bit 3, som sätts när disken rapporterar att den håller på att haverera:

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

`-q silent` skriver ingenting, så slutstatusen är det enda svaret. En status över noll betyder inte
alltid en döende disk: bit 6 ensam betyder till exempel bara att felloggen innehåller poster.

På längre sikt läser smartd sina regler från `smartd.conf`. En rad kan täcka alla diskar som
skanningen hittar:

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

`-a` slår på standardpaketet: hälsostatusen, fel- och självtestloggarna, underkända
användningsattribut, ändringar i attributvärden och, på ATA-diskar, räknarna i attribut 197 och 198.
Mönstret efter `-s` startar ett kort test varje dag mellan klockan 02 och 03 och ett långt varje
lördag mellan klockan 03 och 04. `-W 2,40,45` rapporterar en temperaturändring på 2 grader, skriver
en notering i loggen vid 40 °C och skickar en kritisk varning, via syslog och e-post, vid 45 °C.
`-m` anger mottagaren, och `-M test` skickar ett testmeddelande när smartd startar. Efter en ändring
får `killall -HUP smartd` daemonen att läsa filen igen.

Siffror som dessa betyder mest medan disken fortfarande svarar. Vår portföljpost om
[att rädda data ur lagringsmedier som gått sönder](/sv/portfolio/recovered-data-from-sd-cards-hdds-ssds-and-raid/)
börjar efter den punkten: mellan 2003 och 2014 kom folk in med minneskort, hårddiskar, SSD:er och
RAID-arrayer som redan hade gett upp, och metoden måste passa just den sortens medium.

## Var det går fel

**Ett godkänt utlåtande läses som ett friskintyg.** Hälsostatusen säger bara att disken inte själv
har förklarat sig havererad. Attribut kan ligga på eller under sin tröskel nu eller tidigare, och
väntande sektorer kan redan rymma oläsbar data, medan utlåtandet fortfarande lyder godkänt.
Lösningen är att läsa attributtabellen och självtestloggen också, låta smartd rapportera attribut
197 och 198 och ha säkerhetskopior som inte hänger på diskens uppfattning om sig själv.

**Råvärden tas för gott.** Standarden säger inte hur ett råvärde motsvarar en fysisk enhet. Manualen
för smartctl nämner en Hitachi-disk som räknar tiden den varit påslagen i minuter i stället för
timmar, och IBM-diskar som håller tre temperaturer i sina råvärden. Sedan revision 4 av ATA/ATAPI-4
har attributens innebörd lämnats helt åt leverantörerna, och SSD:er ger en del av numren andra
betydelser, så det utskrivna namnet kan vara fel om inte enheten finns i databasen. Lösningen är att
jämföra en disk med dess egen historik, inte med en annan modell, och att kontrollera vad `-i` säger
om databasen innan man litar på ett namn.

**`-a` används på en ATA-disk.** Det var det klassiska sättet att se allt, men manualen
rekommenderar det inte längre för ATA, eftersom det utelämnar de val som kräver 48-bitars
ATA-kommandon, till exempel den utökade felloggen. Lösningen är att använda `-x`.

**En RAID-kontroller döljer diskarna.** Operativsystemet ser en logisk enhet som inte har något
användbart att rapportera, och den automatiska skanningen i smartd på Linux utelämnar diskar bakom
RAID-kontroller helt. Lösningen är att tala med varje fysisk disk genom kontrollern med rätt
enhetstyp: `-d megaraid,N` når disk N bakom en MegaRAID- eller Dell PERC-kontroller på Linux och
FreeBSD, och en rad som `/dev/sda -d megaraid,0 -a` i `smartd.conf` ställer den disken under
bevakning.

**Ett USB-kabinett står i vägen.** USB-lagring talar SCSI-kommandouppsättningen mot datorn men
rymmer nästan alltid en ATA- eller SATA-disk eller flashminne. Manualen nämner firmwaren i sådana
bryggor, tillsammans med RAID-kontroller, som ett lager som kan lämna hälsostatusen okänd, och
smartctl varnar då och nöjer sig med att jämföra pre-failure-attributen med deras trösklar.
Lösningen är att prova `-d sat`, som packar in ATA-kommandona i standarden för översättning från
SCSI till ATA; `-d sat,12` väljer den kortare av dess två kommandoformer.

**Varningsmejlet kommer aldrig fram.** smartd skickar e-post med systemets `mail`-kommando, som
måste finnas i sökvägen för den miljö smartd startades från. Saknas det finns varningen bara i
syslog. Lösningen är att använda `-M test` och sedan kontrollera att testmeddelandet faktiskt har
landat i en inkorg som någon läser; `-M exec` kan peka smartd mot ett annat e-postprogram eller ett
skript.

**En testplan startar aldrig.** I mönstret efter `-s` ska månad, dag i månaden och timme skrivas med
två siffror vardera. Ett mönster som `S/../.././2` matchar aldrig, och manualen varnar uttryckligen
för just det. Lösningen är att skriva `02` och att läsa loggen efter första natten för att se att
ett test faktiskt kördes.

**En felaktig ändring går obemärkt förbi.** När smartd läser in sin konfiguration igen efter en
hangup-signal och hittar ett syntaxfel skriver den ut felet och fortsätter med de gamla reglerna,
som om signalen aldrig hade kommit. Lösningen är att läsa loggen efter varje omläsning eller att
starta om tjänsten, eftersom smartd vägrar att starta alls med en felaktig fil.

**Ingen håller koll på temperaturen.** Alla temperaturrapporter är avslagna som standard, och `-a`
slår inte på dem. Lösningen är att lägga till `-W` med gränser som passar hårdvaran.

**En kontroll väcker en sovande disk.** En disk som har varvat ned för att spara ström varvar upp
igen när smartctl frågar den. Lösningen, för skript som körs ofta, är att använda `-n standby`, som
får smartctl att avsluta med status 2 i stället för att väcka disken, eller `-n standby,0`, som
räknar det fallet som ett lyckat utfall.

## Läs mer

- [smartmontools](https://www.smartmontools.org/)
  — projektets startsida: båda programmen, plattformar och nyheter om utgåvor.
- [smartctl(8), källtexten till manualsidan](https://github.com/smartmontools/smartmontools/blob/main/src/smartctl.8.in)
  — attribut, trösklar, hälsostatus, självtester, enhetstyper och slutstatus.
- [smartd(8), källtexten till manualsidan](https://github.com/smartmontools/smartmontools/blob/main/src/smartd.8.in)
  — daemonen: hur ofta den frågar, syslog, signaler och hur den hittar diskar.
- [smartd.conf(5), källtexten till manualsidan](https://github.com/smartmontools/smartmontools/blob/main/src/smartd.conf.5.in)
  — direktiv för övervakning, tidsplaner för tester, temperaturgränser och e-post.

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