Provided by: util-linux-locales_2.41.2-4ubuntu1_all 

NUME
hwclock - instrument pentru administrarea ceasurilor
REZUMAT
hwclock [funcția] [opțiune...]
DESCRIERE
hwclock este un instrument de administrare pentru toate ceasurile sistemului. Acesta poate: afișa ora
ceasului hardware (al componentelor fizice, practic al plăcii bază) ; stabili ceasul hardware la o oră
specificată; stabili ceasul hardware de la ceasul de sistem (ceasul software); stabili ceasul de sistem
de la ceasul hardware; compensa abaterea ceasului hardware; corecta scara de timp a ceasului de sistem;
stabili fusul orar al nucleului, scara de timp NTP și epoca (numai pentru Alpha); și prezice viitoarele
valori ale ceasului hardware pe baza ratei de abatere a acestuia.
Începând cu versiunea v2.26, au fost aduse modificări importante funcției --hctosys și opțiunii
--directisa și a fost adăugată o nouă opțiune --update-drift. A se vedea respectivele descrieri ale
acestora mai jos.
FUNCȚII
Următoarele funcții se exclud reciproc, se poate da doar una la un moment dat. Dacă nu este dată niciuna,
valoarea implicită este --show.
-a, --adjust
Adaugă sau scade timpul din ceasul hardware pentru a ține cont de abaterea sistematică de la ultima
dată când ceasul a fost stabilit sau ajustat. Consultați discuția de mai jos, la Funcția de reglare.
--getepoch; --setepoch
Aceste funcții sunt destinate numai mașinilor Alpha și sunt disponibile numai prin intermediul
controlorului RTC din nucleul Linux.
Acestea sunt utilizate pentru a citi și stabili valoarea epocii ceasului hardware al nucleului. Epoch
este numărul de ani în AD la care se referă o valoare de an zero în ceasul hardware. De exemplu, dacă
BIOS-ul mașinii stabilește contorul de ani din ceasul hardware pentru a conține numărul de ani
întregi din 1952, atunci valoarea epocii ceasului hardware al nucleului trebuie să fie 1952.
Funcția --setepoch necesită utilizarea opțiunii --epoch pentru a specifica anul. De exemplu:
hwclock --setepoch --epoch=1952
Controlorul RTC încearcă să ghicească valoarea corectă a epocii, astfel încât este posibil să nu fie
necesară definirea acesteia.
Această valoare de epocă este utilizată ori de câte ori hwclock citește sau stabilește ceasul
hardware pe o mașină Alpha. Pentru mașinile ISA, nucleul utilizează epoca fixă a ceasului hardware de
1900.
--param-get=parametru; --param-set=parametru=valoare
Citește și configurează parametrul RTC. Acest lucru este util, de exemplu, pentru a prelua funcția
RTC sau pentru a configura modul de comutare de rezervă al RTC.
parametru este fie o valoare numerică a parametrului RTC (a se vedea Kernel’s
include/uapi/linux/rtc.h), fie un alias. Consultați --help pentru o listă de alias valide. parametru
și valoare, dacă sunt prefixate cu 0x, sunt interpretate ca valori hexazecimale, în caz contrar
valori zecimale.
--predict
Prevede ce va citi ceasul hardware în viitor pe baza orei date de opțiunea --date și a informațiilor
din /etc/adjtime. Acest lucru este util, de exemplu, pentru a ține cont de abatere atunci când se
configurează o trezire a ceasului hardware (adică alarmă). A se vedea rtcwake(8).
Nu utilizați această funcție în cazul în care ceasul hardware este modificat de altceva decât de
comanda hwclock a sistemului de operare curent, cum ar fi „11 minute mode” sau de un alt sistem de
operare dual-boot.
-r, --show; --get
Citește ceasul hardware și imprimă ora acestuia la ieșirea standard în formatul ISO 8601. Ora afișată
este întotdeauna în ora locală, chiar dacă aveți ceasul hardware în UTC. Consultați opțiunea
--localtime.
Afișarea orei ceasului hardware este implicită atunci când nu este specificată nicio funcție.
Funcția --get aplică, de asemenea, o corecție de abatere la timpul citit, pe baza informațiilor din
/etc/adjtime. Nu folosiți această funcție dacă ceasul hardware este modificat de altceva decât de
comanda hwclock a sistemului de operare curent, cum ar fi „11 minute mode” sau de la un alt sistem de
operare dual-boot.
-s, --hctosys
Stabilește ceasul de sistem de la ceasul hardware. Timpul citit de la ceasul hardware este compensat
pentru a ține cont de abaterea sistematică înainte de a-l utiliza pentru a stabili ceasul sistemului.
Consultați discuția de mai jos, la Funcția de reglare.
Ceasul sistemului trebuie să fie menținut în scara de timp UTC pentru ca aplicațiile de dată-oră să
funcționeze corect în combinație cu fusul orar configurat pentru sistem. În cazul în care ceasul
hardware este menținut în ora locală, atunci ora citită de la acesta trebuie schimbată în scara de
timp UTC înainte de a o utiliza pentru a stabili ceasul sistemului. Funcția --hctosys face acest
lucru pe baza informațiilor din fișierul /etc/adjtime sau a argumentelor din linia de comandă
--localtime și --utc. Notă: nu se face nicio ajustare a orei de vară. A se vedea discuția de mai jos,
la LOCAL vs UTC.
Nucleul păstrează, de asemenea, o valoare a fusului orar, iar funcția --hctosys o stabilește la fusul
orar configurat pentru sistem. Fusul orar al sistemului este configurat de variabila de mediu TZ sau
de fișierul /etc/localtime, așa cum le-ar interpreta tzset(3). Câmpul învechit tz_dsttime al valorii
fusului orar din kernel este fixat la zero. (Pentru detalii despre ce însemna acest câmp, consultați
settimeofday(2).)
Atunci când este utilizată într-un script de pornire, făcând funcția --hctosys primul apelant al
settimeofday(2) de la pornire, aceasta va stabili scara de timp NTP „11 minute mode” prin intermediul
variabilei nucleului persistent_clock_is_local. În cazul în care se modifică configurația scării
temporale a ceasului hardware, este necesară o repornire pentru a informa nucleul. A se vedea
discuția de mai jos, la Sincronizarea automată a ceasului hardware de către nucleu.
Aceasta este o funcție bună de utilizat într-unul dintre scripturile de pornire a sistemului înainte
ca sistemele de fișiere să fie montate în regim de citire/scriere.
Această funcție nu trebuie utilizată niciodată pe un sistem în funcțiune. Salturile în ora sistemului
vor cauza probleme, cum ar fi marcaje de timp ale sistemului de fișiere corupte. De asemenea, dacă
ceva a modificat ceasul hardware, cum ar fi „modul 11 minute” al NTP, atunci --hctosys va stabili
timpul în mod incorect prin includerea compensării abaterii.
Compensarea abaterii poate fi inhibată prin definirea factorului de abatere în /etc/adjtime la zero.
Această valoare va fi persistentă atâta timp cât opțiunea --update-drift nu este utilizată cu
--systohc la închiderea sistemului (sau oriunde altundeva). O altă modalitate de a inhiba acest lucru
este utilizarea opțiunii --noadjfile la apelarea funcției --hctosys. O a treia metodă constă în
ștergerea fișierului /etc/adjtime. hwclock va utiliza în mod implicit scara de timp UTC pentru ceasul
hardware. În cazul în care ceasul hardware are ora locală, aceasta va trebui definită în fișier.
Acest lucru se poate face prin apelarea hwclock --localtime --adjust; în cazul în care fișierul nu
este prezent, această comandă nu va ajusta efectiv ceasul, dar va crea fișierul cu ora locală
configurată și cu un factor de deviație de zero.
O condiție în care se poate dori inhibarea corecției de abatere a hwclock poate fi dorită atunci când
se face o dublă pornire a mai multor sisteme de operare. Dacă în timp ce această instanță de Linux
este oprită, un alt sistem de operare modifică valoarea ceasului hardware, atunci când această
instanță este repornită, corecția de abatere aplicată va fi incorectă.
Pentru ca corecția de abatere a hwclock să funcționeze corect, este imperativ ca nimic să nu modifice
ceasul hardware în timp ce instanța sa Linux nu rulează.
--set
Stabilește ceasul hardware la ora indicată de opțiunea --date și actualizează marcajele de timp din
/etc/adjtime. Cu opțiunea --update-drift se (re)calculează, de asemenea, factorul de abatere.
Încercați fără opțiunea --set dacă --set nu reușește. A se vedea --update-drift de mai jos.
--systz
Aceasta este o alternativă la funcția --hctosys, care nu citește ceasul hardware și nici nu
stabilește ceasul de sistem; în consecință, nu există nicio corecție a abaterii. Această funcție este
destinată utilizării într-un script de pornire pe sisteme cu nuclee mai mari de versiunea 2.6, în
cazul în care știți că ceasul de sistem a fost stabilit de către nucleu în timpul pornirii de la
ceasul hardware.
Aceasta face următoarele lucruri care sunt detaliate mai sus în funcția --hctosys:
• Corectează scara de timp a ceasului de sistem la UTC, după cum este necesar. Numai că, în loc să
realizeze acest lucru prin stabilirea ceasului de sistem, hwclock informează pur și simplu
nucleul, iar acesta se ocupă de schimbare.
• Stabilește scara de timp NTP a nucleului în „11 minute mode”.
• Stabilește fusul orar al nucleului.
Primele două sunt disponibile numai la primul apel al settimeofday(2) după pornire. În consecință,
această opțiune are sens doar atunci când este utilizată într-un script de pornire. În cazul în care se
modifică configurația intervalului de timp al ceasurilor hardware, ar fi necesară o repornire pentru a
informa nucleul.
-w, --systohc
Stabilește ceasul hardware de la ceasul de sistem și actualizează marcajele de timp din /etc/adjtime.
Cu opțiunea --update-drift, (re)calculează, de asemenea, factorul de abatere. Încercați fără opțiunea
--systohc dacă --systohc eșuează. A se vedea --update-drift mai jos.
--vl-read, --vl-clear
Unele dispozitive RTC sunt capabile să monitorizeze tensiunea bateriei de rezervă și, astfel, oferă
utilizatorului o modalitate de a ști că bateria trebuie înlocuită. Funcția --vl-read recuperează
informațiile privind tensiunea scăzută și decodifică rezultatul într-o formă lizibilă pentru oameni.
Funcția --vl-clear repune la zero informațiile privind tensiunea scăzută „Voltage Low”, ceea ce este
necesar pentru unele dispozitive RTC după înlocuirea bateriei.
Consultați fișierul nucleului include/uapi/linux/rtc.h pentru detalii privind informațiile care pot
fi returnate. Rețineți că nu toate dispozitivele RTC au această capacitate de monitorizare și nici
toți controlorii nu acceptă neapărat citirea informațiilor.
-h, --help
Afișează acest mesaj de ajutor și iese.
-V, --version
Afișează versiunea și iese.
OPȚIUNI
--adjfile=nume-fișier
Suprascrie ruta implicită a fișierului /etc/adjtime.
--date=șir_dată
Această opțiune trebuie să fie utilizată împreună cu funcțiile --set sau --predict, în caz contrar
este ignorată.
hwclock --set --date='16:45'
hwclock --predict --date='2525-08-14 07:11:05'
Argumentul trebuie să fie în ora locală, chiar dacă aveți ceasul hardware în UTC. Consultați opțiunea
--localtime. Prin urmare, argumentul nu trebuie să includă informații despre fusul orar. De asemenea,
nu ar trebui să fie o oră relativă, cum ar fi „+5 minutes”, deoarece precizia hwclock depinde de
corelația dintre valoarea argumentului și momentul în care este apăsată tasta enter. Secundele
fracționare sunt eliminate în mod silențios. Această opțiune este capabilă să înțeleagă multe formate
de oră și dată, dar trebuie respectați parametrii anteriori.
--delay=secunde
Această opțiune poate fi utilizată pentru a suprascrie întârzierea utilizată intern la stabilirea
orei ceasului. Valoarea implicită este 0,5 (500ms) pentru rtc_cmos, iar pentru alte tipuri de RTC
întârzierea este 0. Dacă tipul de RTC este imposibil de determinat (din sysfs), atunci valoarea
implicită este de asemenea 0,5 pentru a fi compatibilă retroactiv.
Valoarea implicită de 500 ms se bazează pe ceasul hardware compatibil MC146818A (x86) utilizat în mod
obișnuit. Acest ceas hardware poate fi stabilit numai la orice timp întreg plus o jumătate de
secundă. Timpul întreg este necesar deoarece nu există o interfață pentru a defini sau a obține o
fracțiune de secundă. Întârzierea suplimentară de o jumătate de secundă se datorează faptului că
ceasul hardware se actualizează la următoarea secundă exact la 500 ms după ce stabilește noua oră.
Din păcate, acest comportament este specific hardware-ului și, în unele cazuri, este necesară o altă
întârziere.
-D, --debug
Utilizează --verbose. Opțiunea --debug a fost depășită și poate fi reformulată sau eliminată într-o
versiune viitoare.
--directisa
Această opțiune este semnificativă pentru mașinile compatibile ISA din familia x86 și x86_64. Pentru
alte mașini, nu are niciun efect. Această opțiune îi indică lui hwclock să utilizeze instrucțiuni de
In/Ieș explicite pentru a accesa ceasul hardware. Fără această opțiune, hwclock va utiliza fișierul
de dispozitiv rtc, despre care presupune că este condus de controlorul de dispozitiv RTC din Linux.
Începând cu versiunea v2.26, nu va mai utiliza automat „directisa” atunci când controlorul rtc nu
este disponibil; acest lucru cauza o situație nesigură care putea permite ca două procese să acceseze
ceasul hardware în același timp. Accesul direct la hardware din spațiul utilizatorului trebuie
utilizat numai pentru testare, depanare și ca ultimă soluție atunci când toate celelalte metode
eșuează. Consultați opțiunea --rtc.
--epoch=anul
Această opțiune este necesară atunci când se utilizează funcția --setepoch. Valoarea minimă pentru
anul este 1900. Valoarea maximă depinde de sistem (ULONG_MAX - 1).
-f, --rtc=nume-fișier
Suprascrie numele implicit al fișierului rtc al dispozitivului hwclock. În caz contrar, se va utiliza
primul găsit în această ordine: /dev/rtc0, /dev/rtc, /dev/misc/rtc. Pentru IA-64: /dev/efirtc
/dev/misc/efirtc
-l, --localtime; -u, --utc
Indică la ce scară de timp este stabilit ceasul hardware.
Ceasul hardware poate fi configurat pentru a utiliza fie UTC, fie scara de timp locală, însă ceasul
nu indică ce alternativă este utilizată. Opțiunile --localtime sau --utc oferă aceste informații
comenzii hwclock. Dacă o specificați pe cea greșită (sau nu specificați niciuna dintre ele și luați o
valoare implicită greșită), atât configurarea cât și citirea ceasului hardware vor fi incorecte.
Dacă nu specificați nici --utc, nici --localtime, atunci se va utiliza ultima dată cu o funcție de
stabilire (--set, --systohc, sau --adjust), așa cum este înregistrată în /etc/adjtime. În cazul în
care fișierul „adjtime” nu există, valoarea implicită este UTC.
Notă: modificările orei de vară pot fi incoerente atunci când ceasul hardware este menținut la ora
locală. Consultați discuția de mai jos, la LOCAL vs UTC.
--noadjfile
Dezactivează facilitățile oferite de /etc/adjtime. hwclock nu va citi și nici nu va scrie în acel
fișier cu această opțiune. Atunci când se utilizează această opțiune, trebuie specificate fie --utc,
fie --localtime.
--test
Nu modifică efectiv nimic în sistem, adică ceasurile sau /etc/adjtime (--verbose este implicit cu
această opțiune).
--update-drift
Actualizează factorul de abatere al ceasului hardware în /etc/adjtime. Poate fi utilizată numai cu
--set sau --systohc.
Este necesară o perioadă minimă de patru ore între ajustări. Acest lucru este pentru a evita
calculele nevalide. Cu cât perioada este mai lungă, cu atât mai precis va fi factorul de abatere
rezultat.
Această opțiune a fost adăugată în v2.26, deoarece este obișnuit ca sistemele să apeleze hwclock
--systohc la închidere; cu vechiul comportament, acest lucru ar fi (re)calculat automat factorul de
abatere, ceea ce cauzează mai multe probleme:
• În cazul în care se utilizează NTP cu un nucleu „11 minute mode”, factorul de abatere va fi redus
la aproape zero.
• Aceasta nu ar permite utilizarea corecției de abatere „la rece”. În cazul majorității
configurațiilor, utilizarea abaterii „la rece” va da rezultate favorabile. La rece înseamnă
atunci când mașina este oprită, ceea ce poate avea un impact semnificativ asupra factorului de
abatere.
• (Re)calcularea factorului de abatere la fiecare oprire oferă rezultate nesatisfăcătoare. De
exemplu, în cazul în care condițiile efemere fac ca mașina să fie anormal de fierbinte, calculul
factorului de abatere ar fi în afara intervalului.
• Creșterea semnificativă a timpului de oprire a sistemului (începând cu v2.31, când nu se
utilizează --update-drift, RTC nu este citit).
Calcularea factorului de abatere de către hwclock este un bun punct de plecare, dar pentru rezultate
optime va trebui probabil să fie ajustat prin editarea directă a fișierului /etc/adjtime. Pentru
majoritatea configurațiilor, odată ce factorul de abatere optim al mașinii este creat, nu ar trebui să
fie nevoie să fie modificat. Prin urmare, vechiul comportament de (re)calculare automată a abaterii a
fost modificat și acum necesită utilizarea acestei opțiuni. A se vedea discuția de mai jos, la Funcția de
ajustare.
Această opțiune necesită citirea ceasului hardware înainte de a-l ajusta. Dacă acesta nu poate fi citit,
atunci această opțiune va face ca funcțiile de stabilire să eșueze. Acest lucru se poate întâmpla, de
exemplu, dacă ceasul hardware este corupt de o pană de curent. În acest caz, ceasul trebuie mai întâi
stabilit fără această opțiune. În ciuda faptului că nu funcționează, factorul de corecție a abaterii
rezultat ar fi oricum nevalid.
-v, --verbose
Afișează mai multe detalii despre ceea ce face hwclock la nivel intern.
NOTE
Ceasuri într-un sistem Linux
Există două tipuri de ceasuri cu dată și oră:
• Ceasul hardware:* Acest ceas este un dispozitiv fizic independent, cu propriul său domeniu de
alimentare (baterie, condensator etc.), care funcționează atunci când mașina este oprită sau chiar
deconectată.
Pe un sistem compatibil ISA, acest ceas este specificat ca parte a standardului ISA. Un program de
control poate citi sau stabili acest ceas doar la o secundă întreagă, dar poate detecta și marginile
ticurilor de ceas de 1 secundă, astfel încât ceasul are de fapt o precizie practic infinită.
Acest ceas este numit în mod obișnuit ceas hardware, ceas de timp real, RTC, ceas BIOS și ceas CMOS.
Ceasul hardware (Hardware Clock), în forma sa cu majusculă, a fost inventat pentru a fi folosit de
hwclock. De asemenea, nucleul Linux se referă la acesta ca fiind ceasul persistent.
Unele sisteme non-ISA au câteva ceasuri în timp real, doar unul dintre ele având propriul domeniu de
alimentare. Un cip de ceas extern I2C sau SPI de foarte mică putere poate fi utilizat cu o baterie de
rezervă ca ceas fizic (hardware) pentru a inițializa un ceas în timp real integrat mai funcțional, care
este utilizat în majoritatea celorlalte scopuri.
• Ceasul de sistem:* Acest ceas face parte din nucleul Linux și este controlat de o întrerupere a
temporizatorului. (Pe o mașină ISA, întreruperea temporizatorului face parte din standardul ISA.)
Acesta are semnificație doar în timp ce Linux rulează pe mașină. Ora sistemului este numărul de
secunde de la 00:00:00:00 1 ianuarie 1970 UTC (sau, mai pe scurt, numărul de secunde de la 1969 UTC).
Totuși, Ora sistemului nu este un număr întreg. Are o precizie practic infinită.
Timpul sistemului este timpul care contează. Scopul de bază al ceasului hardware este de a păstra timpul
atunci când Linux nu rulează, astfel încât ceasul de sistem să poată fi inițializat de la acesta la
pornire. Rețineți că în DOS, pentru care a fost proiectat ISA, ceasul fizic (Hardware Clock) este
singurul ceas de timp real.
Este important ca ora sistemului să nu prezinte discontinuități, așa cum s-ar întâmpla dacă ați folosi
programul date(1) pentru a o stabili în timp ce sistemul este în funcțiune. Cu toate acestea, puteți face
orice doriți cu ceasul hardware în timp ce sistemul este în funcțiune, iar data următoare când Linux va
porni, o va face cu ora ajustată de la ceasul hardware. Notă: în prezent, acest lucru nu este posibil pe
majoritatea sistemelor, deoarece hwclock --systohc este apelat la închidere.
Fusul orar al nucleului Linux este stabilit de hwclock. Dar nu vă lăsați înșelați - aproape nimănui nu-i
pasă în ce fus orar crede nucleul că se află. În schimb, programele cărora le pasă de fusul orar (poate
pentru că vor să vă afișeze ora locală) folosesc aproape întotdeauna o metodă mai tradițională de
determinare a fusului orar: Ele utilizează variabila de mediu TZ sau fișierul /etc/localtime, așa cum se
explică în pagina de manual pentru tzset(3). Cu toate acestea, unele programe și părți marginale ale
nucleului Linux, cum ar fi sistemele de fișiere, utilizează valoarea fusului orar al nucleului. Un
exemplu este sistemul de fișiere vfat. Dacă valoarea fusului orar din nucleu este greșită, sistemul de
fișiere vfat va raporta și va defini marcaje de timp greșite pe fișiere. Un alt exemplu este "modul 11
minute" NTP al nucleului. Dacă valoarea fusului orar din nucleu și/sau variabila
persistent_clock_is_local sunt greșite, atunci ceasul hardware va fi stabilit incorect de către '11
minute mode'. A se vedea discuția de mai jos, la Sincronizarea automată a ceasului hardware de către
nucleu.
hwclock stabilește fusul orar al nucleului la valoarea indicată de TZ sau /etc/localtime cu ajutorul
funcțiilor --hctosys sau --systz.
Valoarea fusului orar al nucleului este de fapt formată din două părți: 1) un câmp tz_minuteswest, care
indică cu câte minute este decalată ora locală (neajustată pentru DST) față de UTC, și 2) un câmp
tz_dsttime, care indică tipul de convenție privind ora de vară (DST) care este în vigoare în localitate
la ora actuală. Acest al doilea câmp nu este utilizat în Linux și este întotdeauna zero. A se vedea, de
asemenea, settimeofday(2).
Metode de accesare a ceasului hardware
hwclock utilizează mai multe moduri diferite de a obține și stabili valorile ceasului hardware. Cea mai
normală modalitate este de a face In/Ieș către fișierul special al dispozitivului rtc, care se presupune
că este condus de controlorul dispozitivului rtc. De asemenea, sistemele Linux care utilizează cadrul rtc
cu udev, sunt capabile să suporte mai multe ceasuri hardware. Acest lucru poate determina necesitatea de
a suprascrie dispozitivul rtc implicit prin specificarea unuia, cu opțiunea --rtc.
Cu toate acestea, această metodă nu este întotdeauna disponibilă, deoarece sistemele mai vechi nu dispun
de un controlor rtc. Pe aceste sisteme, metoda de accesare a ceasului hardware depinde de componentele
fizice ale sistemului.
Pe un sistem compatibil ISA, hwclock poate accesa direct registrele de „memorie CMOS” care constituie
ceasul, făcând In/Ieș la porturile 0x70 și 0x71. Face acest lucru cu instrucțiuni In/Ieș reale și, în
consecință, poate face acest lucru numai dacă rulează cu userid efectiv de superutilizator. Această
metodă poate fi utilizată prin specificarea opțiunii --directisa.
Aceasta este o metodă foarte proastă de accesare a ceasului, din toate motivele pentru care programele
din spațiul utilizatorului nu ar trebui, în general, să facă In/Ieș direct și să dezactiveze
întreruperile. hwclock o oferă pentru testare, depanare și pentru că poate fi singura metodă disponibilă
pe sistemele ISA care nu au un controlor de dispozitiv rtc funcțional.
Funcția de reglare
Ceasul hardware nu este, de obicei, foarte precis. Cu toate acestea, o mare parte din inexactitatea sa
este complet previzibilă - acesta câștigă sau pierde aceeași cantitate de timp în fiecare zi. Acest lucru
se numește abatere sistematică. Funcția --adjust a hwclock vă permite să aplicați corecții de abatere
sistematică la ceasul hardware.
Aceasta funcționează în felul următor: hwclock deține un fișier, /etc/adjtime, care păstrează unele
informații istorice. Acesta se numește fișierul adjtime.
Să presupunem că începeți fără niciun fișier adjtime. Emiteți o comandă hwclock --set pentru a fixa
ceasul hardware la ora curentă reală. hwclock creează fișierul adjtime și înregistrează în el ora curentă
ca ultima dată când ceasul a fost calibrat. Cinci zile mai târziu, ceasul a câștigat 10 secunde, așa că
emiteți o comandă hwclock --set --update-drift pentru a-l da înapoi cu 10 secunde. hwclock actualizează
fișierul adjtime pentru a afișa ora curentă ca ultima dată când ceasul a fost calibrat și înregistrează 2
secunde pe zi ca rată de abatere sistematică. Trec 24 de ore, iar apoi emiteți o comandă hwclock
--adjust. hwclock consultă fișierul adjtime și constată că ceasul câștigă 2 secunde pe zi atunci când
este lăsat în pace și că a fost lăsat în pace exact o zi. Deci, scade 2 secunde din ceasul hardware. Apoi
înregistrează ora curentă ca fiind ultima dată când ceasul a fost ajustat. Mai trec 24 de ore și se emite
un alt hwclock --adjust. hwclock face același lucru: scade 2 secunde și actualizează fișierul adjtime cu
ora curentă ca fiind ultima dată când ceasul a fost ajustat.
Atunci când utilizați opțiunea --update-drift cu --set sau --systohc, rata de abatere sistematică este
(re)calculată prin compararea orei curente a ceasului hardware complet corectate pentru abatere cu noua
oră stabilită, de la care se obține rata de abatere pe 24 de ore pe baza ultimei date de timp calibrate
din fișierul „adjtime”. Acest factor de abatere actualizat este apoi salvat în /etc/adjtime.
O mică cantitate de eroare se strecoară atunci când este stabilit ceasul hardware (Hardware Clock), așa
că --adjust se abține de la orice ajustare mai mică de 1 secundă. Mai târziu, când solicitați din nou o
ajustare, abaterea acumulată va fi mai mare de 1 secundă, iar --adjust va efectua ajustarea, inclusiv
orice cantitate fracționară.
hwclock --hctosys utilizează, de asemenea, datele din fișierul adjtime pentru a compensa valoarea citită
de la ceasul hardware înainte de a o utiliza pentru a stabili ceasul sistemului. Nu împărtășește
limitarea de 1 secundă a --adjust și va corecta imediat valorile de abatere sub o secundă. Nu modifică
ora ceasului hardware și nici fișierul „adjtime”. Acest lucru poate elimina necesitatea de a utiliza
--adjust, cu excepția cazului în care altceva în sistem necesită compensarea ceasului hardware.
Fișierul adjtime
În timp ce este numit pentru scopul său istoric de a controla doar ajustările, el conține de fapt alte
informații utilizate de hwclock de la o invocare la alta.
Formatul fișierului „adjtime” este, în ASCII:
Linia 1: Trei numere, separate prin spații libere: 1) rata de abatere sistematică în secunde pe zi, număr
zecimal cu virgulă mobilă; 2) numărul rezultat de secunde din 1969 UTC de la cea mai recentă ajustare sau
calibrare, număr întreg zecimal; 3) zero (pentru compatibilitate cu clock(8)) ca număr zecimal cu virgulă
mobilă.
Linia 2: Un număr: numărul de secunde rezultat din 1969 UTC de la cea mai recentă calibrare. Zero în
cazul în care nu a avut loc încă nicio calibrare sau se știe că orice calibrare anterioară este inutilă
(de exemplu, deoarece s-a constatat că ceasul hardware nu mai conține o oră valabilă de la acea
calibrare). Acesta este un număr întreg zecimal.
Linia 3: "UTC" sau "LOCAL". Indică dacă ceasul hardware este stabilit la timpul universal coordonat sau
la ora locală. Puteți oricând să înlocuiți această valoare cu opțiunile din linia de comandă hwclock.
Puteți utiliza un fișier „adjtime” care a fost utilizat anterior cu programul clock(8) cu hwclock.
Sincronizarea automată a ceasului hardware de către nucleu
Ar trebui să știți că există un alt mod în care ceasul hardware (Hardware Clock) este menținut
sincronizat în unele sisteme. Nucleul Linux are un mod în care copiază ora sistemului în ceasul hardware
la fiecare 11 minute. Acest mod este o opțiune de compilare, astfel încât nu toate nucleele vor avea
această capacitate. Acesta este un mod bun de utilizat atunci când folosiți ceva sofisticat, cum ar fi
NTP, pentru a menține ceasul de sistem sincronizat. (NTP este o modalitate de a menține sincronizată ora
de sistem fie cu un server de timp undeva în rețea, fie cu un ceas radio conectat la sistemul
dumneavoastră. Consultați RFC 1305.)
Dacă nucleul este compilat cu opțiunea „11 minute mode”, aceasta va fi activă atunci când disciplina de
ceas a nucleului se află într-o stare de sincronizare. Când se află în această stare, bitul 6 (bitul care
este setat în masca 0x0040) din variabila time_status a nucleului este dezactivat. Această valoare este
afișată ca linie „status” (de stare) a comenzilor adjtimex --print sau ntptime.
Este nevoie de o influență externă, cum ar fi demonul NTP, pentru a pune disciplina ceasului din nucleu
într-o stare de sincronizare și, prin urmare, pentru a activa „modul 11 minute”. Acesta poate fi
dezactivat prin rularea oricărui lucru care ajustează ceasul de sistem în mod tradițional, inclusiv
hwclock --hctosys. Cu toate acestea, dacă demonul NTP este încă în funcțiune, acesta va activa din nou
„modul 11 minute” la următoarea sincronizare a ceasului de sistem.
Dacă sistemul dvs. funcționează cu „modul 11 minute” activat, este posibil să fie necesar să folosiți
--hctosys sau --systz într-un script de pornire, în special dacă ceasul hardware este configurat să
folosească scara de timp locală. Dacă nucleul nu este informat despre ce scară de timp folosește ceasul
hardware, este posibil să o folosească pe cea greșită. În mod implicit, nucleul utilizează UTC.
Prima comandă din spațiul utilizatorului de stabilire a ceasului de sistem informează nucleul cu privire
la scara de timp pe care o folosește ceasul hardware. Acest lucru se întâmplă prin intermediul variabilei
nucleului persistent_clock_is_local. Dacă --hctosys sau --systz este prima, aceasta va defini această
variabilă în funcție de fișierul adjtime sau de argumentul corespunzător din linia de comandă. Rețineți
că, atunci când se utilizează această capacitate și se modifică configurarea scării temporale a ceasului
hardware, este necesară o repornire pentru a notifica nucleul.
hwclock --adjust nu ar trebui să fie utilizată cu „modul 11 minute” NTP.
Valoarea secolului pentru ceasul hardware ISA
Există un fel de standard care definește octetul 50 al memoriei CMOS pe o mașină ISA ca indicator al
secolului în care ne aflăm. hwclock nu utilizează sau configurează acel octet deoarece există unele
mașini care nu definesc octetul în acest mod și, oricum, nu este necesar, deoarece anul secolului face o
treabă bună în ceea ce privește indicarea secolului în care ne aflăm.
Dacă aveți o utilizare de bună credință pentru un octet de secol CMOS, contactați responsabilul hwclock;
o opțiune poate fi potrivită.
Rețineți că această secțiune este relevantă numai atunci când utilizați metoda „direct ISA” de accesare a
ceasului hardware. ACPI oferă o modalitate standard de accesare a valorilor de secol, atunci când acestea
sunt acceptate de hardware.
CONFIGURAREA DATEI ȘI A OREI
Gestionarea timpului (dată+oră) fără sincronizare externă
Această discuție se bazează pe următoarele condiții:
• Nu rulează nimic care să modifice data și ora ceasurilor, cum ar fi un daemon NTP sau un cron job (o
sarcină programată în demonul «cron»).
• Fusul orar al sistemului este configurat pentru ora locală corectă. A se vedea mai jos, la POSIX vs
„CORECT”.
• La începutul pornirii sunt apelate următoarele, în această ordine: adjtimex --tick valoare
--frequency valoare hwclock --hctosys
• În timpul închiderii (opriri sistemului), se apelează următoarea comandă: hwclock --systohc
• Sistemele care nu dispun de adjtimex pot utiliza ntptime.
Indiferent dacă mențineți sau nu ora exactă cu ajutorul daemonului NTP, este logic să configurați
sistemul pentru a menține o dată și o oră relativ bune pe cont propriu.
Primul pas pentru a face acest lucru este să înțelegem clar care este situația în ansamblu. Există două
dispozitive hardware complet separate care funcționează la propria viteză și care se îndepărtează de
timpul „corect” în ritmuri proprii. Metodele și software-ul de corecție a abaterii sunt diferite pentru
fiecare dintre ele. Cu toate acestea, majoritatea sistemelor sunt configurate pentru a face schimb de
valori între aceste două ceasuri la pornire și la oprire. Acum, erorile de păstrare a timpului ale
fiecărui dispozitiv în parte sunt transferate între ele. Încercați să configurați corecția abaterii doar
pentru unul dintre ele, iar abaterea celuilalt se va suprapune peste aceasta.
Această problemă poate fi evitată atunci când se configurează corecția de abatere pentru ceasul de
sistem, prin simpla ne-oprire a mașinii. Acest lucru, plus faptul că toată precizia hwclock (inclusiv
calcularea factorilor de abatere) depinde de corectitudinea ritmului ceasului de sistem, înseamnă că ar
trebui să se facă mai întâi configurarea ceasului de sistem.
Abaterea ceasului de sistem este corectată cu ajutorul opțiunilor --tick și --frequency a comenzii
adjtimex(8). Aceste două opțiuni funcționează împreună: „--tick” este ajustarea grosieră, iar
„--frequency” este ajustarea fină (pentru sistemele care nu au un pachet adjtimex, se poate folosi în
schimb ntptime -f ppm).
Unele distribuții Linux încearcă să calculeze automat abaterea ceasului de sistem cu ajutorul operației
de comparare a adjtimex. Încercarea de a corecta un ceas cu abatere folosind ca referință un alt ceas cu
abatere, se aseamănă cu un câine care încearcă să-și prindă propria coadă. Succesul poate avea loc în
cele din urmă, dar probabil că va fi precedat de un efort mare și de frustrări. Această automatizare
poate aduce o îmbunătățire față de absența oricărei configurații, dar așteptarea unor rezultate optime ar
fi o eroare. O alegere mai bună pentru configurarea manuală ar fi opțiunile --log de la adjtimex.
Ar putea fi mai eficient să urmăriți pur și simplu abaterea ceasului de sistem cu sntp, sau date -Ins și
un ceas de precizie, apoi să calculați manual corecția.
După ce ați stabilit valorile pentru „--tick” și cele pentru „-frequency”, continuați să testați și să
rafinați ajustările până când ceasul de sistem se menține potrivit. Consultați adjtimex(2) pentru mai
multe informații și exemplul care demonstrează calculele de abatere manuală.
Odată ce ceasul de sistem (System Clock) funcționează fără probleme, treceți la ceasul hardware (Hardware
Clock).
De regulă, abaterea la rece va funcționa cel mai bine pentru majoritatea cazurilor de utilizare. Acest
lucru ar trebui să fie valabil chiar și în cazul mașinilor care funcționează 24/7 și a căror perioadă
normală de oprire constă într-o repornire. În acest caz, valoarea factorului de abatere are o importanță
redusă. Dar, în rarele ocazii în care mașina este oprită pentru o perioadă lungă de timp, atunci abaterea
la rece ar trebui să dea rezultate mai bune.
• Pașii pentru a calcula deriva la rece: *
1
Asigurați-vă că demonul NTP nu va fi lansat la pornire.
2
Ora System Clock (ceasului de sistem) trebuie să fie corectă la oprire!
3
Închideți(opriți) sistemul.
4
Lăsați să treacă o perioadă îndelungată fără a modifica ceasul hardware.
5
Porniți sistemul.
6
Utilizați imediat hwclock pentru a stabili ora corectă, adăugând opțiunea --update-drift.
Notă: dacă la pasul 6 se utilizează --systohc, atunci ceasul sistemului trebuie stabilit corect (pasul
6a) chiar înainte de a face acest lucru.
Calcularea factorului de abatere de către hwclock este un bun punct de plecare, dar pentru rezultate
optime va trebui probabil să fie ajustat prin editarea directă a fișierului /etc/adjtime. Continuați să
testați și să rafinați factorul de abatere până când ceasul hardware este corectat corect la pornire.
Pentru a verifica acest lucru, asigurați-vă mai întâi că ora sistemului este corectă înainte de oprire și
apoi utilizați sntp, sau date -Ins și un ceas de precizie, imediat după pornire.
LOCAL vs UTC
Ținerea ceasului hardware într-o scară de timp locală determină rezultate incoerente în ceea ce privește
ora de vară:
• Dacă Linux rulează în timpul schimbării orei de vară, ora scrisă în ceasul hardware va fi ajustată în
funcție de această schimbare.
• Dacă Linux NU rulează în timpul schimbării orei de vară, ora citită de la ceasul hardware NU va fi
ajustată pentru această schimbare.
Ceasul hardware de pe un sistem compatibil cu ISA păstrează doar data și ora, nu are noțiunea de fus orar
și nici de ora de vară. Prin urmare, atunci când hwclock este informat că se află în ora locală, acesta
presupune că se află în ora locală „corectă” și nu face nicio ajustare a orei citite de la el.
Linux gestionează schimbările de oră de vară în mod transparent numai atunci când ceasul hardware este
menținut în scara de timp UTC. Acest lucru este facilitat pentru administratorii de sistem, deoarece
hwclock utilizează ora locală pentru ieșire și ca argument pentru opțiunea --date.
Sistemele POSIX, precum Linux, sunt proiectate pentru ca ceasul de sistem să funcționeze pe scara de timp
UTC. Scopul ceasului hardware este de a inițializa ceasul de sistem, astfel încât este logic să fie
păstrat și în UTC.
Cu toate acestea, Linux încearcă să se adapteze la faptul că ceasul hardware se află în scara de timp
locală. Acest lucru este valabil în primul rând pentru pornirea duală cu versiunile mai vechi ale MS
Windows. Începând cu Windows 7, cheia de registru RealTimeIsUniversal ar trebui să funcționeze corect,
astfel încât ceasul hardware să poată fi păstrat în UTC.
POSIX vs „CORECT”
O discuție despre configurarea datei și a orei ar fi incompletă dacă nu ar fi abordată și problema
fuselor orare; acest aspect este în mare parte bine acoperit de tzset(3). Un domeniu care pare să nu aibă
documentație este directorul „corect” al bazei de date a fusurilor orare, numit uneori „tz” sau
„zoneinfo”.
Există două baze de date separate în sistemul zoneinfo, posix și „right” (corect). „Right” (numită acum
„zoneinfo-leaps”) include secundele bisecte, iar posix nu. Pentru a utiliza baza de date „right”, ceasul
de sistem trebuie să fie setat la (UTC + secundele bisecte), ceea ce este echivalent cu (TAI - 10). Acest
lucru permite calcularea numărului exact de secunde dintre două date care traversează o epocă de secunde
bisecte. Ceasul sistemului este apoi convertit la ora civilă corectă, inclusiv UTC, prin utilizarea
fișierelor de fus orar „right/corecte” care scad secundele bisecte. Notă: această configurație este
considerată experimentală și se știe că are probleme.
Pentru a configura un sistem pentru a utiliza o anumită bază de date, toate fișierele aflate în
directorul acesteia trebuie copiate în rădăcina fișierului /usr/share/zoneinfo. Fișierele nu se
utilizează niciodată direct din subdirectoarele posix sau „right”, de exemplu, TZ='right/Europe/Dublin'.
Acest obicei devenise atât de frecvent încât proiectul „zoneinfo” din amonte a restructurat arborele de
fișiere al sistemului prin mutarea subdirectoarelor posix și „right” din directorul zoneinfo în
directoare fraterne:
/usr/share/zoneinfo, /usr/share/zoneinfo-posix, /usr/share/zoneinfo-leaps
Din nefericire, unele distribuții Linux au revenit la vechea structură arborescentă în pachetele lor.
Astfel, problema administratorilor de sistem care ajung în subdirectorul „right/corect” persistă. Acest
lucru face ca fusul orar al sistemului să fie configurat pentru a include secundele bisecte, în timp ce
baza de date zoneinfo este încă configurată pentru a le exclude. Apoi, atunci când o aplicație, cum ar fi
un ceas mondial, are nevoie de fișierul cu fusul orar South_Pole; sau un MTA de poștă electronică, sau
hwclock are nevoie de fișierul cu fusul orar UTC; acestea îl preiau de la rădăcina /usr/share/zoneinfo ,
deoarece așa trebuie să facă. Aceste fișiere exclud secundele bisecte, dar ceasul de sistem le include
acum, ceea ce provoacă o conversie incorectă a timpului.
Încercarea de a amesteca și de a potrivi fișiere din aceste baze de date separate nu va funcționa,
deoarece fiecare dintre ele necesită ca ceasul de sistem să utilizeze o scară de timp diferită. Baza de
date zoneinfo trebuie configurată pentru a utiliza fie posix, fie „right”, așa cum este descris mai sus,
sau prin atribuirea unei rute la baza de date în variabila de mediu TZDIR.
STARE DE IEȘIRE
Una dintre următoarele valori de ieșire va fi returnată:
EXIT_SUCCESS („0” în sistemele POSIX)
Executarea cu succes a programului.
EXIT_FAILURE („1” în sistemele POSIX)
Operația a eșuat sau sintaxa comenzii nu a fost validă.
MEDIU
TZ
Dacă această variabilă este definită, valoarea ei are prioritate față de fusul orar configurat de
sistem.
TZDIR
Dacă această variabilă este definită, valoarea ei are prioritate față de ruta la directorul bazei de
date a fusului orar configurat de sistem.
FIȘIERE
/etc/adjtime
Fișierul de configurare și de stare pentru hwclock. A se vedea, de asemenea, adjtime_config(5).
/etc/localtime
Fișierul cu fusul orar al sistemului.
/usr/share/zoneinfo/
Directorul bazei de date cu fusul orar al sistemului.
Fișierele de dispozitiv hwclock pot încerca să acceseze ceasul hardware: Dev/rtc0_ Dev/rtc0 /dev/rtc
/dev/misc/rtc /dev/efirtc /dev/misc/efirtc
CONSULTAȚI ȘI
date(1), adjtime_config(5), adjtimex(8), gettimeofday(2), settimeofday(2), crontab(1p), tzset(3)
AUTORI
Scris de Bryan Henderson <bryanh@giraffe-data.com>, septembrie 1996, pe baza lucrărilor efectuate pe
programul clock(8) de Charles Hedrick, Rob Hooft și Harald Koenig. Consultați codul sursă pentru un
istoric complet și o listă de credite (mulțumiri adresate diferiților contribuitori).
RAPORTAREA ERORILOR
Pentru rapoarte de eroare, folosiți sistemul de urmărire al erorilor
<https://github.com/util-linux/util-linux/issues>.
DISPONIBILITATE
Comanda hwclock face parte din pachetul util-linux care poate fi descărcat de la Linux Kernel Archive
<https://www.kernel.org/pub/linux/utils/util-linux/>.
util-linux 2.41.2 2025-10-17 HWCLOCK(8)