Come molti utenti hanno già sperimentato sulla propria pelle, spesso i nostri computer (anche con Linux) cominciano a funzionare male, talvolta anche in modo permanente, per i motivi più vari. Chi non ha mai sperimentato un inatteso crash del sistema o un rallentamento quasi totalmente inspiegabile, non può far altro che ritenersi fortunato.
Le cause di questi problemi sono più varie, e vanno dall’installazione di moduli RAM difettosi, al surriscaldamento della CPU per problemi di varia natura, fino al danneggiamento dei dischi rigidi. In questo articolo presenteremo alcuni strumenti open source che è possibile utilizzare sui sistemi GNU/Linux per rilevare e monitorare questi ed altri problemi, consentendo di evitare sprechi di tempo e denaro, e (cosa non meno importante) quei fastidiosissimi ma inevitabili mal di testa.
RAM difettosa o guasta
Un banco di memoria guasto o un qualsiasi altro problema legato alla memoria primaria della piattaforma su cui si esegue un sistema operativo, possono causare problemi non indifferenti come il blocco del sistema, la corruzione di alcuni dati o altri problemi legati al software (come, ad esempio, errori di compilazione). Un’ottima utility per testare la bontà della memoria primaria del sistema è Memtest86+, un tool molto utile per verificare lo stato della RAM. Si basa su memtest86, che poteva essere utilizzato con le sole architetture x86; la nuova versione, per nostra fortuna, è compatibile anche con altre architetture (inclusa AMD64).
Memtest86+ è un’immagine di boot che può essere eseguita in modo indipendente dal sistema in uso, ed è integrata in moltissime distribuzioni (Ubuntu su tutte). Può essere scaricata direttamente dal sito ufficiale, che ne spiega anche il funzionamento. Una volta iniziata la fase di boot, non bisogna fare altre che attendere i risultati del test, e verificare che tutto sia andato a buon fine. Premendo il tasto C, è anche possibile visualizzare un menu di configurazione, dal quale si può modificare il metodo di test, riavviare la procedura, uscire e altro ancora, sebbene di norma i valori di default vadano più che bene, e questo menu non venga utilizzato molto spesso.
In alternativa a Memtest86+, esistono diversi software per Linux in grado di effettuare test della RAM direttamente dal sistema operativo. Un esempio è un tool noto come memtester, che ha proprio lo scopo di effettuare test come quelli di Memtest86+, ma senza la necessità di riavviare ogni volta il sistema operativo. Per chi volesse saperne di più, rimandiamo al sito di riferimento.
Temperatura della CPU e surriscaldamento
Spesso i sistemi di prevenzione dei guasti, inclusi nei moderni hardware e sistemi operativi, forzano i nostri computer (in questo caso Linux) a spegnersi in tutti quei casi in cui vengano registrate temperature maggiori o uguali ad una determinata soglia di sicurezza. Ciò è dovuto, in genere, all’esecuzione simultanea di diversi processi che fanno un uso intenso della CPU (tipici task di questo tipo sono il video encoding, la compilazione, le simulazioni scientifiche, eccetera). In genere, è bene avere a disposizione due tipi di strumenti:
- Software in grado di generare un grande carico computazionale, al fine di valutare la risposta della CPU in termini sia di prestazione che di temperature;
- Software in grado di fornire costantemente informazioni sulle temperature della CPU (e non solo), che possano essere abbinati ed utilizzati insieme a quelli precedentemente citati, in modo tale da potere trarre le conclusioni sul comportamento dell’hardware.
Per quanto riguarda la prima categoria di software, un’interessante set di utility è quello che prende il nome di CPU Burn. Esso è presente nella maggior parte dei repository delle principali distribuzioni Linux in circolazione, ed è anche liberamente scaricabile da internet. Con questo tool di benchmark, è possibile eseguire dei comandi in background, al fine di stressare il più possibile la CPU. Per esempio, se utilizziamo un processore Intel Pentium, possiamo eseguire il seguente comando:
burnP5 || echo $?
In questo modo, eseguiremo ripetutamente il comando Bash echo $? . Esistono molti altri comandi, tutti del tipo burnX (dove X rappresenta una sigla che indica una particolare tipologia di processore che si vuole testare), che possono essere opportunamente utilizzati.
A questo punto, per valutare i risultati di un test come il precedente, abbiamo bisogno di software che consentano di misurare le temperature, facendo riferimento ai relativi sensori di cui l’hardware dovrebbe essere dotato. Un esempio è ACPI, anch’esso open source ed installabile gratuitamente sia tramite i repository della maggior parte delle distribuzioni Linux più diffuse, sia scaricando e compilando i sorgenti dal sito ufficiale. In alternativa si può utilizzare lm_sensors, anche in questo caso facilmente reperibile. Con quest’ultimo software, si può sfruttare il comando sensors:
sensors
In questo modo otterremo un output simile al seguente:
k8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp:
+23°C
Core1 Temp:
+19°C
it8716-isa-0290
Adapter: ISA adapter
VCore: +1.18 V (min = +0.00 V, max = +4.08 V)
VDDR: +3.25 V (min = +0.00 V, max = +4.08 V)
+3.3V: +0.00 V (min = +0.00 V, max = +4.08 V) ALARM
+5V: +4.81 V (min = +0.00 V, max = +6.85 V)
+12V: +11.58 V (min = +0.00 V, max = +16.32 V)
in5: +0.00 V (min = +0.00 V, max = +4.08 V) ALARM
in6: +0.00 V (min = +0.00 V, max = +4.08 V) ALARM
5VSB: +4.84 V (min = +0.00 V, max = +6.85 V)
VBat: +2.94 V
fan1: 0 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
temp1: +30°C (low = -1°C, high = +127°C) sensor = diode
temp2: +30°C (low = -1°C, high = +127°C) sensor = thermistor
temp3: -7°C (low = -1°C, high = +127°C) sensor = thermistor
vid: +1.300 V
acpitz-virtual-0
Adapter: Virtual device
temp1: +49.0°C (crit = +95.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +59.0°C (crit = +100.0°C)
coretemp-isa-0001
Adapter: ISA adapter
Core 1: +57.0°C (crit = +100.0°C)
Da qui, saremo in grado di controllare tutte le volte che vogliamo le temperature del nostro sistema Linux, e quindi anche quelle della CPU.
Per il monitoraggio delle temperature e di molte altre informazioni relative all’hardware del computer, esistono diversi altri tool per la nostra Linux box, eventualmente integrabili con il desktop environment che si utilizza abitualmente, per rendere più agevoli e dirette le operazioni di controllo.
Problemi dei dischi rigidi
Gli hard disk oggi disponibili sul mercato sono sempre più piccoli e più veloci, e possiedono capacità sempre maggiori. Tuttavia, nessuno di essi è esente da problemi. Al fine di poterne controllare lo stato, molti produttori integrano i dischi con un sistema di monitoraggio, denominato Self-Monitoring, Analysis and Reporting Technology (SMART), che oltre a fornire tutti i tipi di informazioni sull'unità (modello, numero di serie, temperatura a regime, eccetera) offre un modo semplice per verificare l'integrità del disco. Per interagire con tale sistema, si può utilizzare si Linux un programma come Smartmontools.
S.M.A.R.T. Monitoring Tools è un set di utility che può essere utilizzato con tutti i tipi di dispositivi (P)ATA, Serial ATA e SCSI. Può essere facilmente scaricato dal sito ufficiale, oppure facendo riferimento alla maggior parte dei repository delle maggiori distribuzioni Linux in circolazione. Esso contiene due programmi:
- smartctl, una utility a riga di comando che può essere utilizzata direttamente per eseguire i task più comuni ed interagire con il sistema SMART;
- smartd, un demone che controlla il sistema SMART e può essere utilizzato per rispondere tempestivamente alla rilevazione di guasti del disco rigido.
Ovviamente si tratta in entrambi i casi di software da utilizzare con estrema cura ed attenzione, dal momento che i dati del vostro hard disk potrebbero essere messi in pericolo. Per questo motivo, si suggerisce di dare sempre un’occhiata al manuale, consultabile con i seguenti comandi:
man smartctl
man smartd
La prima cosa che ci interessa fare è ottenere tutte le informazioni sull’hard disk di cui vogliamo verificare lo stato. Per farlo, possiamo usare il comando seguente:
smartctl -a /dev/HDD_DEVICE
dove HDD_DEVICE deve essere sostituito dal nome del disco (ad esempio, sda1), che potete ottenere dando uno sguardo all’output del comando seguente:
sudo fdisk -l
A questo punto, smartctl ci fornirà un output simile a questo:
smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda 7200.10 family
Device Model: ST3320620AS
Serial Number: 9QF26NGD
Firmware Version: 3.AAJ
User Capacity: 320,072,933,376 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 7
ATA Standard is: Exact ATA specification draft version not indicated
Local Time is: Sun Mar 7 14:20:18 2010 MST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Se vogliamo effettuare un test per verificare l’integrità del dispositivo, possiamo utilizzare un altro flag del comando smartctl:
smartctl -t long /dev/HDD_DEVICE
Mentre il test si svolge in background, possiamo controllare lo stato di avanzamento ed i risultati utilizzando il comando smartctl come segue:
smartctl -l selftest /dev/HDD_DEVICE
Il demone smartd può essere anche sfruttato per effettuare dei test periodici. Per fare ciò, si può fare riferimento ad un file di configurazione, chiamato smartd.conf (di solito installato in /etc), che include diversi esempi che ne chiariscono l’utilizzo.
Un’altra possibilità che consente di verificare se vi sono settori danneggiati in un hard disk (e che torna molto utile per tutti quei dispositivi che non utilizzano SMART) sotto Linux, è quella di utilizzare E2fsprogs, una suite di utility open source, liberamente scaricabile dal sito di riferimento, e spesso inclusa in molte distribuzioni Linux. Questo set di strumenti, se installato, consente di verificare il numero di blocchi danneggiati di un hard disk, utilizzando il comando seguente:
badblocks -n -v /dev/HDD_DEVICE
Conclusioni
Software come quelli descritti in precedenza consentono, molto spesso, di risolvere (o facilitare la risoluzione) di molti problemi che un amministratore di sistema può dover fronteggiare. Il fatto che si tratti di soluzioni open source ne rafforza l’utilità, ed è bene conoscerle (o almeno avere sempre a portata di mano delle valide alternative) se si vuole migliorare anche la qualità del lavoro di sistemista che ci si trova a dovere svolgere.