Mezzogiorno di fuoco. O era l’una?

Mezzogiorno di fuoco

A molti di quelli che hanno una macchina con installati sia Windows che Linux in configurazione dualboot capiterà di chiudere il sistema con Windows avendo l’orologio che segna, ad esempio, mezzogiorno, riavviare immediatamente sotto Linux e ritrovarsi l’orologio che segna l’una.

Premetto che il problema si risolve, come spesso accade nelle configurazioni dualboot, facendo in modo che Linux vada incontro a Windows: chi ha fretta di risolvere può saltare all’ultimo paragrafo. Se vuoi approfondire un po’, continua a leggere.

Un po’ di necessario background

In un PC ci sono due orologi: l’orologio hardware e l’orologio di sistema.

L’orologio hardware è quello gestito dal BIOS del PC, la cui ora può essere impostata anche dal programma di setup del BIOS e che, grazie alla batteria tampone della scheda madre, continua a girare anche a computer spento. È per questo che non è necessario reimpostare l’ora quando si stacca e riattacca la spina della corrente. Così non è per altri apparecchi elettronici come, ad esempio, il mio forno a microonde.

L’orologio di sistema è invece quello gestito dal sistema operativo: esiste solamente quando il sistema operativo (Windows o Linux) è in esecuzione sulla macchina. È utilizzato per mostrare l’ora nei vari applicativi (quali il comando date o l’applet orologio di Linux, oppure l’orologio della tray area di Windows), è l’orologio che viene utilizzato per impostare le date di creazione e modifica dei file, per annotare l’ora sui file di log, etc. In breve è l’unico orologio di riferimento del sistema operativo. L’ora gestita dall’orologio di sistema è sempre quella locale, ossia aggiustata in base al fuso orario e alla presenza o meno dell’ora legale.

Che legame c’è tra orologio hardware e orologio di sistema? All’avvio della macchina il sistema operativo inizializza l’orologio di sistema andando a leggere l’ora dall’orologio hardware. Da lì in avanti i due orologi corrono indipendenti e paralleli fintanto che la macchina non viene spenta. Il sistema operativo può aggiornare in qualsiasi momento, in risposta ad una specifica azione dell’utente (comando hwclock) oppure automaticamente (scaricando l’ora corrente da un server su Internet tramite il protocollo NTP), l’uno o l’altro orologio, oppure entrambi. A questo proposito, la procedura corretta per aggiornare l’ora di una Linux box è aggiornare il solo orologio hardware sull’ora desiderata e quindi riavviare; dopo il riavvio anche l’orologio di sistema sarà impostato sull’ora giusta. Questo perché “non è bene”, durante il funzionamento del sistema operativo, sottoporre l’orologio di sistema a discontinuità.

Diverse interpretazioni dell’orologio hardware

Il problema dell’ora diversa tra Linux e Windows nasce dalla differente interpretazione (almeno nella configurazione di default) che i due OS fanno dell’orologio hardware.

Windows ritiene che l’ora dell’orologio hardware sia quella locale e quindi, in fase di avvio, copia l’ora dell’orologio hardware nell’orologio di sistema senza effettuare alcun aggiustamento. Analogamente, quando da sistema operativo si imposta l’ora, questa viene inserita uguale sia nell’orologio di sistema che nell’orologio hardware.

Linux, seguendo la convenzione Unix, ritiene che l’ora dell’orologio hardware sia quella UTC, volgarmente nota come ora di Greenwich. Questo comporta che all’avvio, quando viene inizializzato l’orologio di sistema, Linux calcola l’ora locale applicando all’ora dell’orologio hardware gli aggiustamenti necessari in base al fuso orario impostato e alla presenza o meno dell’ora legale. Analogo aggiustamento, ma inverso, quando si va a modificare l’ora dell’orologio hardware.

Ecco spiegato, almeno per quanto riguarda l’Italia, lo scarto di un’ora tra Windows e Linux: se nell’orologio hardware ci sono le 12:00, Windows ritiene che quella sia l’ora di Roma, mentre Linux ritiene che quella sia l’ora di Greenwich e quindi l’ora di Roma sarà le 13:00.

Come risolvere

Vano credere di piegare Windows a comportarsi come Unix! L’unica soluzione è configurare Linux a comportarsi come Windows e, quindi, a ritenere che nell’orologio hardware ci sia l’ora locale. Il modo di cambiare questa configurazione dipende dalla distribuzione. Io proporrò la soluzione per Debian e derivate perché è quella che, attualmente, ho sotto mano. Ma non è difficile ottenere lo stesso risultato su altre distro, andando a scandagliarne la documentazione alla ricerca della stringa “UTC”.

In soldoni, su Debian e derivate, c’è da aprire il file /etc/default/rcS e cambiare la linea

UTC=yes

in

UTC=no

Beh? Cosa aspetti a rimettere l’orologio?

Advertisements

3 Pensieri su &Idquo;Mezzogiorno di fuoco. O era l’una?

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...