Recent am făcut un mic server pe un Intel NUC. Pe el am instalat câteva servicii printre care și Scrutiny care să îmi monitorizeze stocarea.
După o zi am decis să pun acest serviciu și pe calculator pentru monitorizarea disk-urilor, fără să fie nevoie să intru manual în smartctl periodic.
Ce părea simplu la instalare s-a dovedit puțin mai complicat: ambele drive-uri au apărut ca Failed în interfață imediat după primul scan. Spoiler: niciunul nu era defect.
În calculator am două disk-uri, și acestea sunt:
- ADATA Legend 710 - SSD NVMe, 1TB, drive de sistem (
/dev/nvme0) - Seagate ST6000VX009 - HDD SATA, 6TB, date (
/dev/sda)
Instalarea Scrutiny
Scrutiny rulează ca două componente separate în același container: un collector care citește datele S.M.A.R.T. și un web server care le afișează. Există o imagine all-in-one (ghcr.io/analogj/scrutiny:master-omnibus) care le include pe amândouă.
Creez directorul de configurare:
mkdir -p ~/.services/scrutiny/config
~/.services/scrutiny/docker-compose.yml:
services:
scrutiny:
image: ghcr.io/analogj/scrutiny:master-omnibus
container_name: scrutiny
restart: unless-stopped
cap_add:
- SYS_RAWIO
- SYS_ADMIN
ports:
- "8088:8080"
volumes:
- /run/udev:/run/udev:ro
- ./config:/opt/scrutiny/config
devices:
- /dev/nvme0:/dev/nvme0
- /dev/sda:/dev/sda
cd ~/.services/scrutiny
docker compose up -d
După instalare și pornire, Scrutiny e accesibil la http://localhost:8088. Și acum au început și problemele.
Problema 1 - SSD-ul NVMe apare ca Failed
La primul scan, SSD-ul ADATA Legend 710 a apărut imediat ca Failed cu o eroare de tip checksum. Am verificat cu smartctl direct:
sudo smartctl -a /dev/nvme0 -d nvme
Output-ul era clar: drive-ul e sănătos, SMART overall-health self-assessment: PASSED, temperatură 30°C, zero erori. Scrutiny vedea altceva.
În docker-compose.yml aveam inițial doar SYS_RAWIO în cap_add. Fără SYS_ADMIN, containerul nu poate citi corect datele NVMe prin interfața kernel-ului, ceea ce genera erori de checksum la parsarea atributelor SMART.
Am adăugat SYS_ADMIN în cap_add:
cap_add:
- SYS_RAWIO
- SYS_ADMIN
Restart container:
docker compose down
docker compose up -d
Eroarea de checksum a dispărut după următorul scan.
Problema 2 - HDD-ul Seagate apare ca Failed
Chiar și după rezolvarea problemei NVMe, HDD-ul Seagate ST6000VX009 continua să apară ca Failed. Atributele incriminate erau Seek Error Rate (ID 7) și Read Error Rate (ID 1), ambele cu valori aparent catastrofale.
Aceasta e o problemă cunoscută cu drive-urile Seagate. Seagate folosește un format proprietar pentru aceste atribute: valorile brute sunt de fapt contoare pe 48 de biți care encodează atât numărul de erori cât și numărul total de operații. Scrutiny (și de fapt majoritatea tool-urilor S.M.A.R.T.) le interpretează greșit ca valori simple, rezultând cifre uriașe care declanșează alarme false.
Dacă rulezi sudo smartctl -a /dev/sda și drive-ul arată SMART overall-health self-assessment test result: PASSED cu Reallocated Sectors, Pending Sectors și Uncorrectable Errors la zero, drive-ul e sănătos.
Scrutiny stochează statusul drive-urilor într-o bază de date SQLite la /opt/scrutiny/config/scrutiny.db. Resetez manual statusul fals:
Pasul 1 - intru în container:
docker exec -it scrutiny /bin/bash
Pasul 2 - instalez sqlite3 (nu e inclus în imagine, nu persistă după restart):
apt-get update && apt-get install -y sqlite3
Pasul 3 - resetez statusul:
sqlite3 /opt/scrutiny/config/scrutiny.db "UPDATE devices SET device_status = null;"
Pasul 4 - rulez manual collector-ul:
/opt/scrutiny/bin/scrutiny-collector-metrics run
Pasul 5 - ies din container:
exit
Atenție:
SYS_ADMINtrebuie să fie deja prezent încap_addînainte de acest pas. Dacă faci resetul înainte de fix, collector-ul va rescrie imediat statusul Failed și trebuie să repeți toată procedura.
Verificare suplimentară - SMART extended test pe HDD
Deși eram convins că e o alertă falsă, am rulat și un test extended S.M.A.R.T. complet pe HDD, ca să fiu sigur:
sudo smartctl -t long /dev/sda
Testul durează în funcție de dimensiunea drive-ului - pentru un HDD de 6TB, estimarea a fost de 651 de minute (~10 ore). La final:
sudo smartctl -a /dev/sda | grep -A 1 "SMART overall"
Rezultat: Completed without error - drive-ul e perfect sănătos.
Rezultatul final
După toate corecțiile, ambele drive-uri apar cu status verde în Scrutiny:
- ADATA Legend 710 (
/dev/nvme0) - Healthy - Seagate ST6000VX009 (
/dev/sda) - Healthy
Scrutiny rulează acum cu restart: unless-stopped, scanează automat drive-urile și trimite notificări prin email dacă apare ceva real.
Rezumat
Două lucruri de reținut dacă instalezi Scrutiny cu drive-uri NVMe sau Seagate:
1. NVMe necesită SYS_ADMIN în cap_add, nu doar SYS_RAWIO. Fără el, citirea atributelor NVMe eșuează cu erori de checksum.
2. Seagate Seek/Read Error Rate sunt fals pozitive. Seagate encodează statistici complexe în atributele S.M.A.R.T. pe care Scrutiny le interpretează greșit. Verifică întotdeauna smartctl direct și uită-te la atributele cu adevărat relevante: Reallocated Sectors (ID 5), Pending Sectors (ID 197) și Uncorrectable Errors (ID 198). Dacă acestea sunt la zero și testul overall e PASSED, drive-ul e sănătos.

Comentarii