HWCLOCK(8) Administrare sistem HWCLOCK(8) NUME hwclock - instrument pentru administrarea ceasurilor REZUMAT hwclock [funcia] [opiune...] DESCRIERE hwclock este un instrument de administrare pentru toate ceasurile sistemului. Acesta poate: afia ora ceasului hardware (al componentelor fizice, practic al placii baza) ; stabili ceasul hardware la o ora specificata; 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. Incepand cu versiunea v2.26, au fost aduse modificari importante funciei --hctosys i opiunii --directisa i a fost adaugata o noua opiune --update-drift. A se vedea respectivele descrieri ale acestora mai jos. FUNCII Urmatoarele funcii se exclud reciproc, se poate da doar una la un moment dat. Daca nu este data niciuna, valoarea implicita este --show. -a, --adjust Adauga sau scade timpul din ceasul hardware pentru a ine cont de abaterea sistematica de la ultima data cand ceasul a fost stabilit sau ajustat. Consultai discuia de mai jos, la Funcia de reglare. --getepoch; --setepoch Aceste funcii sunt destinate numai mainilor 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 numarul de ani in AD la care se refera o valoare de an zero in ceasul hardware. De exemplu, daca BIOS-ul mainii stabilete contorul de ani din ceasul hardware pentru a conine numarul de ani intregi din 1952, atunci valoarea epocii ceasului hardware al nucleului trebuie sa fie 1952. Funcia --setepoch necesita utilizarea opiunii --epoch pentru a specifica anul. De exemplu: hwclock --setepoch --epoch=1952 Controlorul RTC incearca sa ghiceasca valoarea corecta a epocii, astfel incat este posibil sa nu fie necesara definirea acesteia. Aceasta valoare de epoca este utilizata ori de cate ori hwclock citete sau stabilete ceasul hardware pe o maina Alpha. Pentru mainile ISA, nucleul utilizeaza epoca fixa a ceasului hardware de 1900. --param-get=parametru; --param-set=parametru=valoare Citete i configureaza parametrul RTC. Acest lucru este util, de exemplu, pentru a prelua funcia RTC sau pentru a configura modul de comutare de rezerva al RTC. parametru este fie o valoare numerica a parametrului RTC (a se vedea Kernel's include/uapi/linux/rtc.h), fie un alias. Consultai --help pentru o lista de alias valide. parametru i valoare, daca sunt prefixate cu 0x, sunt interpretate ca valori hexazecimale, in caz contrar valori zecimale. --predict Prevede ce va citi ceasul hardware in viitor pe baza orei date de opiunea --date i a informaiilor din /etc/adjtime. Acest lucru este util, de exemplu, pentru a ine cont de abatere atunci cand se configureaza o trezire a ceasului hardware (adica alarma). A se vedea rtcwake(8). Nu utilizai aceasta funcie in cazul in care ceasul hardware este modificat de altceva decat 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 Citete ceasul hardware i imprima ora acestuia la ieirea standard in formatul ISO 8601. Ora afiata este intotdeauna in ora locala, chiar daca avei ceasul hardware in UTC. Consultai opiunea --localtime. Afiarea orei ceasului hardware este implicita atunci cand nu este specificata nicio funcie. Funcia --get aplica, de asemenea, o corecie de abatere la timpul citit, pe baza informaiilor din /etc/adjtime. Nu folosii aceasta funcie daca ceasul hardware este modificat de altceva decat 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 Stabilete ceasul de sistem de la ceasul hardware. Timpul citit de la ceasul hardware este compensat pentru a ine cont de abaterea sistematica inainte de a-l utiliza pentru a stabili ceasul sistemului. Consultai discuia de mai jos, la Funcia de reglare. Ceasul sistemului trebuie sa fie meninut in scara de timp UTC pentru ca aplicaiile de data-ora sa funcioneze corect in combinaie cu fusul orar configurat pentru sistem. In cazul in care ceasul hardware este meninut in ora locala, atunci ora citita de la acesta trebuie schimbata in scara de timp UTC inainte de a o utiliza pentru a stabili ceasul sistemului. Funcia --hctosys face acest lucru pe baza informaiilor din fiierul /etc/adjtime sau a argumentelor din linia de comanda --localtime i --utc. Nota: nu se face nicio ajustare a orei de vara. A se vedea discuia de mai jos, la LOCAL vs UTC. Nucleul pastreaza, de asemenea, o valoare a fusului orar, iar funcia --hctosys o stabilete la fusul orar configurat pentru sistem. Fusul orar al sistemului este configurat de variabila de mediu TZ sau de fiierul /etc/localtime, aa cum le-ar interpreta tzset(3). Campul invechit tz_dsttime al valorii fusului orar din kernel este fixat la zero. (Pentru detalii despre ce insemna acest camp, consultai settimeofday(2).) Atunci cand este utilizata intr-un script de pornire, facand funcia --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. In cazul in care se modifica configuraia scarii temporale a ceasului hardware, este necesara o repornire pentru a informa nucleul. A se vedea discuia de mai jos, la Sincronizarea automata a ceasului hardware de catre nucleu. Aceasta este o funcie buna de utilizat intr-unul dintre scripturile de pornire a sistemului inainte ca sistemele de fiiere sa fie montate in regim de citire/scriere. Aceasta funcie nu trebuie utilizata niciodata pe un sistem in funciune. Salturile in ora sistemului vor cauza probleme, cum ar fi marcaje de timp ale sistemului de fiiere corupte. De asemenea, daca ceva a modificat ceasul hardware, cum ar fi ,,modul 11 minute" al NTP, atunci --hctosys va stabili timpul in mod incorect prin includerea compensarii abaterii. Compensarea abaterii poate fi inhibata prin definirea factorului de abatere in /etc/adjtime la zero. Aceasta valoare va fi persistenta atata timp cat opiunea --update-drift nu este utilizata cu --systohc la inchiderea sistemului (sau oriunde altundeva). O alta modalitate de a inhiba acest lucru este utilizarea opiunii --noadjfile la apelarea funciei --hctosys. O a treia metoda consta in tergerea fiierului /etc/adjtime. hwclock va utiliza in mod implicit scara de timp UTC pentru ceasul hardware. In cazul in care ceasul hardware are ora locala, aceasta va trebui definita in fiier. Acest lucru se poate face prin apelarea hwclock --localtime --adjust; in cazul in care fiierul nu este prezent, aceasta comanda nu va ajusta efectiv ceasul, dar va crea fiierul cu ora locala configurata i cu un factor de deviaie de zero. O condiie in care se poate dori inhibarea coreciei de abatere a hwclock poate fi dorita atunci cand se face o dubla pornire a mai multor sisteme de operare. Daca in timp ce aceasta instana de Linux este oprita, un alt sistem de operare modifica valoarea ceasului hardware, atunci cand aceasta instana este repornita, corecia de abatere aplicata va fi incorecta. Pentru ca corecia de abatere a hwclock sa funcioneze corect, este imperativ ca nimic sa nu modifice ceasul hardware in timp ce instana sa Linux nu ruleaza. --set Stabilete ceasul hardware la ora indicata de opiunea --date i actualizeaza marcajele de timp din /etc/adjtime. Cu opiunea --update-drift se (re)calculeaza, de asemenea, factorul de abatere. Incercai fara opiunea --set daca --set nu reuete. A se vedea --update-drift de mai jos. --systz Aceasta este o alternativa la funcia --hctosys, care nu citete ceasul hardware i nici nu stabilete ceasul de sistem; in consecina, nu exista nicio corecie a abaterii. Aceasta funcie este destinata utilizarii intr-un script de pornire pe sisteme cu nuclee mai mari de versiunea 2.6, in cazul in care tii ca ceasul de sistem a fost stabilit de catre nucleu in timpul pornirii de la ceasul hardware. Aceasta face urmatoarele lucruri care sunt detaliate mai sus in funcia --hctosys: o Corecteaza scara de timp a ceasului de sistem la UTC, dupa cum este necesar. Numai ca, in loc sa realizeze acest lucru prin stabilirea ceasului de sistem, hwclock informeaza pur i simplu nucleul, iar acesta se ocupa de schimbare. o Stabilete scara de timp NTP a nucleului in ,,11 minute mode". o Stabilete fusul orar al nucleului. Primele doua sunt disponibile numai la primul apel al settimeofday(2) dupa pornire. In consecina, aceasta opiune are sens doar atunci cand este utilizata intr-un script de pornire. In cazul in care se modifica configuraia intervalului de timp al ceasurilor hardware, ar fi necesara o repornire pentru a informa nucleul. -w, --systohc Stabilete ceasul hardware de la ceasul de sistem i actualizeaza marcajele de timp din /etc/adjtime. Cu opiunea --update-drift, (re)calculeaza, de asemenea, factorul de abatere. Incercai fara opiunea --systohc daca --systohc eueaza. A se vedea --update-drift mai jos. --vl-read, --vl-clear Unele dispozitive RTC sunt capabile sa monitorizeze tensiunea bateriei de rezerva i, astfel, ofera utilizatorului o modalitate de a ti ca bateria trebuie inlocuita. Funcia --vl-read recupereaza informaiile privind tensiunea scazuta i decodifica rezultatul intr-o forma lizibila pentru oameni. Funcia --vl-clear repune la zero informaiile privind tensiunea scazuta ,,Voltage Low", ceea ce este necesar pentru unele dispozitive RTC dupa inlocuirea bateriei. Consultai fiierul nucleului include/uapi/linux/rtc.h pentru detalii privind informaiile care pot fi returnate. Reinei ca nu toate dispozitivele RTC au aceasta capacitate de monitorizare i nici toi controlorii nu accepta neaparat citirea informaiilor. -h, --help Afieaza acest mesaj de ajutor i iese. -V, --version Afieaza versiunea i iese. OPIUNI --adjfile=nume-fiier Suprascrie ruta implicita a fiierului /etc/adjtime. --date=ir_data Aceasta opiune trebuie sa fie utilizata impreuna cu funciile --set sau --predict, in caz contrar este ignorata. hwclock --set --date='16:45' hwclock --predict --date='2525-08-14 07:11:05' Argumentul trebuie sa fie in ora locala, chiar daca avei ceasul hardware in UTC. Consultai opiunea --localtime. Prin urmare, argumentul nu trebuie sa includa informaii despre fusul orar. De asemenea, nu ar trebui sa fie o ora relativa, cum ar fi ,,+5 minutes", deoarece precizia hwclock depinde de corelaia dintre valoarea argumentului i momentul in care este apasata tasta enter. Secundele fracionare sunt eliminate in mod silenios. Aceasta opiune este capabila sa ineleaga multe formate de ora i data, dar trebuie respectai parametrii anteriori. --delay=secunde Aceasta opiune poate fi utilizata pentru a suprascrie intarzierea utilizata intern la stabilirea orei ceasului. Valoarea implicita este 0,5 (500ms) pentru rtc_cmos, iar pentru alte tipuri de RTC intarzierea este 0. Daca tipul de RTC este imposibil de determinat (din sysfs), atunci valoarea implicita este de asemenea 0,5 pentru a fi compatibila retroactiv. Valoarea implicita de 500 ms se bazeaza pe ceasul hardware compatibil MC146818A (x86) utilizat in mod obinuit. Acest ceas hardware poate fi stabilit numai la orice timp intreg plus o jumatate de secunda. Timpul intreg este necesar deoarece nu exista o interfaa pentru a defini sau a obine o fraciune de secunda. Intarzierea suplimentara de o jumatate de secunda se datoreaza faptului ca ceasul hardware se actualizeaza la urmatoarea secunda exact la 500 ms dupa ce stabilete noua ora. Din pacate, acest comportament este specific hardware-ului i, in unele cazuri, este necesara o alta intarziere. -D, --debug Utilizeaza --verbose. Opiunea --debug a fost depaita i poate fi reformulata sau eliminata intr-o versiune viitoare. --directisa Aceasta opiune este semnificativa pentru mainile compatibile ISA din familia x86 i x86_64. Pentru alte maini, nu are niciun efect. Aceasta opiune ii indica lui hwclock sa utilizeze instruciuni de In/Ie explicite pentru a accesa ceasul hardware. Fara aceasta opiune, hwclock va utiliza fiierul de dispozitiv rtc, despre care presupune ca este condus de controlorul de dispozitiv RTC din Linux. Incepand cu versiunea v2.26, nu va mai utiliza automat ,,directisa" atunci cand controlorul rtc nu este disponibil; acest lucru cauza o situaie nesigura care putea permite ca doua procese sa acceseze ceasul hardware in acelai timp. Accesul direct la hardware din spaiul utilizatorului trebuie utilizat numai pentru testare, depanare i ca ultima soluie atunci cand toate celelalte metode eueaza. Consultai opiunea --rtc. --epoch=anul Aceasta opiune este necesara atunci cand se utilizeaza funcia --setepoch. Valoarea minima pentru anul este 1900. Valoarea maxima depinde de sistem (ULONG_MAX - 1). -f, --rtc=nume-fiier Suprascrie numele implicit al fiierului rtc al dispozitivului hwclock. In caz contrar, se va utiliza primul gasit in aceasta ordine: /dev/rtc0, /dev/rtc, /dev/misc/rtc. Pentru IA-64: /dev/efirtc /dev/misc/efirtc -l, --localtime; -u, --utc Indica la ce scara de timp este stabilit ceasul hardware. Ceasul hardware poate fi configurat pentru a utiliza fie UTC, fie scara de timp locala, insa ceasul nu indica ce alternativa este utilizata. Opiunile --localtime sau --utc ofera aceste informaii comenzii hwclock. Daca o specificai pe cea greita (sau nu specificai niciuna dintre ele i luai o valoare implicita greita), atat configurarea cat i citirea ceasului hardware vor fi incorecte. Daca nu specificai nici --utc, nici --localtime, atunci se va utiliza ultima data cu o funcie de stabilire (--set, --systohc, sau --adjust), aa cum este inregistrata in /etc/adjtime. In cazul in care fiierul ,,adjtime" nu exista, valoarea implicita este UTC. Nota: modificarile orei de vara pot fi incoerente atunci cand ceasul hardware este meninut la ora locala. Consultai discuia de mai jos, la LOCAL vs UTC. --noadjfile Dezactiveaza facilitaile oferite de /etc/adjtime. hwclock nu va citi i nici nu va scrie in acel fiier cu aceasta opiune. Atunci cand se utilizeaza aceasta opiune, trebuie specificate fie --utc, fie --localtime. --test Nu modifica efectiv nimic in sistem, adica ceasurile sau /etc/adjtime (--verbose este implicit cu aceasta opiune). --update-drift Actualizeaza factorul de abatere al ceasului hardware in /etc/adjtime. Poate fi utilizata numai cu --set sau --systohc. Este necesara o perioada minima de patru ore intre ajustari. Acest lucru este pentru a evita calculele nevalide. Cu cat perioada este mai lunga, cu atat mai precis va fi factorul de abatere rezultat. Aceasta opiune a fost adaugata in v2.26, deoarece este obinuit ca sistemele sa apeleze hwclock --systohc la inchidere; cu vechiul comportament, acest lucru ar fi (re)calculat automat factorul de abatere, ceea ce cauzeaza mai multe probleme: o In cazul in care se utilizeaza NTP cu un nucleu ,,11 minute mode", factorul de abatere va fi redus la aproape zero. o Aceasta nu ar permite utilizarea coreciei de abatere ,,la rece". In cazul majoritaii configuraiilor, utilizarea abaterii ,,la rece" va da rezultate favorabile. La rece inseamna atunci cand maina este oprita, ceea ce poate avea un impact semnificativ asupra factorului de abatere. o (Re)calcularea factorului de abatere la fiecare oprire ofera rezultate nesatisfacatoare. De exemplu, in cazul in care condiiile efemere fac ca maina sa fie anormal de fierbinte, calculul factorului de abatere ar fi in afara intervalului. o Creterea semnificativa a timpului de oprire a sistemului (incepand cu v2.31, cand nu se utilizeaza --update-drift, RTC nu este citit). Calcularea factorului de abatere de catre hwclock este un bun punct de plecare, dar pentru rezultate optime va trebui probabil sa fie ajustat prin editarea directa a fiierului /etc/adjtime. Pentru majoritatea configuraiilor, odata ce factorul de abatere optim al mainii este creat, nu ar trebui sa fie nevoie sa fie modificat. Prin urmare, vechiul comportament de (re)calculare automata a abaterii a fost modificat i acum necesita utilizarea acestei opiuni. A se vedea discuia de mai jos, la Funcia de ajustare. Aceasta opiune necesita citirea ceasului hardware inainte de a-l ajusta. Daca acesta nu poate fi citit, atunci aceasta opiune va face ca funciile de stabilire sa eueze. Acest lucru se poate intampla, de exemplu, daca ceasul hardware este corupt de o pana de curent. In acest caz, ceasul trebuie mai intai stabilit fara aceasta opiune. In ciuda faptului ca nu funcioneaza, factorul de corecie a abaterii rezultat ar fi oricum nevalid. -v, --verbose Afieaza mai multe detalii despre ceea ce face hwclock la nivel intern. NOTE Ceasuri intr-un sistem Linux Exista doua tipuri de ceasuri cu data i ora: o Ceasul hardware:* Acest ceas este un dispozitiv fizic independent, cu propriul sau domeniu de alimentare (baterie, condensator etc.), care funcioneaza atunci cand maina este oprita sau chiar deconectata. 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 secunda intreaga, dar poate detecta i marginile ticurilor de ceas de 1 secunda, astfel incat ceasul are de fapt o precizie practic infinita. Acest ceas este numit in mod obinuit ceas hardware, ceas de timp real, RTC, ceas BIOS i ceas CMOS. Ceasul hardware (Hardware Clock), in forma sa cu majuscula, a fost inventat pentru a fi folosit de hwclock. De asemenea, nucleul Linux se refera la acesta ca fiind ceasul persistent. Unele sisteme non-ISA au cateva ceasuri in timp real, doar unul dintre ele avand propriul domeniu de alimentare. Un cip de ceas extern I2C sau SPI de foarte mica putere poate fi utilizat cu o baterie de rezerva ca ceas fizic (hardware) pentru a iniializa un ceas in timp real integrat mai funcional, care este utilizat in majoritatea celorlalte scopuri. o Ceasul de sistem:* Acest ceas face parte din nucleul Linux i este controlat de o intrerupere a temporizatorului. (Pe o maina ISA, intreruperea temporizatorului face parte din standardul ISA.) Acesta are semnificaie doar in timp ce Linux ruleaza pe maina. Ora sistemului este numarul de secunde de la 00:00:00:00 1 ianuarie 1970 UTC (sau, mai pe scurt, numarul de secunde de la 1969 UTC). Totui, Ora sistemului nu este un numar intreg. Are o precizie practic infinita. Timpul sistemului este timpul care conteaza. Scopul de baza al ceasului hardware este de a pastra timpul atunci cand Linux nu ruleaza, astfel incat ceasul de sistem sa poata fi iniializat de la acesta la pornire. Reinei ca in DOS, pentru care a fost proiectat ISA, ceasul fizic (Hardware Clock) este singurul ceas de timp real. Este important ca ora sistemului sa nu prezinte discontinuitai, aa cum s-ar intampla daca ai folosi programul date(1) pentru a o stabili in timp ce sistemul este in funciune. Cu toate acestea, putei face orice dorii cu ceasul hardware in timp ce sistemul este in funciune, iar data urmatoare cand Linux va porni, o va face cu ora ajustata de la ceasul hardware. Nota: in prezent, acest lucru nu este posibil pe majoritatea sistemelor, deoarece hwclock --systohc este apelat la inchidere. Fusul orar al nucleului Linux este stabilit de hwclock. Dar nu va lasai inelai - aproape nimanui nu-i pasa in ce fus orar crede nucleul ca se afla. In schimb, programele carora le pasa de fusul orar (poate pentru ca vor sa va afieze ora locala) folosesc aproape intotdeauna o metoda mai tradiionala de determinare a fusului orar: Ele utilizeaza variabila de mediu TZ sau fiierul /etc/localtime, aa cum se explica in pagina de manual pentru tzset(3). Cu toate acestea, unele programe i pari marginale ale nucleului Linux, cum ar fi sistemele de fiiere, utilizeaza valoarea fusului orar al nucleului. Un exemplu este sistemul de fiiere vfat. Daca valoarea fusului orar din nucleu este greita, sistemul de fiiere vfat va raporta i va defini marcaje de timp greite pe fiiere. Un alt exemplu este "modul 11 minute" NTP al nucleului. Daca valoarea fusului orar din nucleu i/sau variabila persistent_clock_is_local sunt greite, atunci ceasul hardware va fi stabilit incorect de catre '11 minute mode'. A se vedea discuia de mai jos, la Sincronizarea automata a ceasului hardware de catre nucleu. hwclock stabilete fusul orar al nucleului la valoarea indicata de TZ sau /etc/localtime cu ajutorul funciilor --hctosys sau --systz. Valoarea fusului orar al nucleului este de fapt formata din doua pari: 1) un camp tz_minuteswest, care indica cu cate minute este decalata ora locala (neajustata pentru DST) faa de UTC, i 2) un camp tz_dsttime, care indica tipul de convenie privind ora de vara (DST) care este in vigoare in localitate la ora actuala. Acest al doilea camp nu este utilizat in Linux i este intotdeauna zero. A se vedea, de asemenea, settimeofday(2). Metode de accesare a ceasului hardware hwclock utilizeaza mai multe moduri diferite de a obine i stabili valorile ceasului hardware. Cea mai normala modalitate este de a face In/Ie catre fiierul special al dispozitivului rtc, care se presupune ca este condus de controlorul dispozitivului rtc. De asemenea, sistemele Linux care utilizeaza cadrul rtc cu udev, sunt capabile sa suporte mai multe ceasuri hardware. Acest lucru poate determina necesitatea de a suprascrie dispozitivul rtc implicit prin specificarea unuia, cu opiunea --rtc. Cu toate acestea, aceasta metoda nu este intotdeauna disponibila, 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, facand In/Ie la porturile 0x70 i 0x71. Face acest lucru cu instruciuni In/Ie reale i, in consecina, poate face acest lucru numai daca ruleaza cu userid efectiv de superutilizator. Aceasta metoda poate fi utilizata prin specificarea opiunii --directisa. Aceasta este o metoda foarte proasta de accesare a ceasului, din toate motivele pentru care programele din spaiul utilizatorului nu ar trebui, in general, sa faca In/Ie direct i sa dezactiveze intreruperile. hwclock o ofera pentru testare, depanare i pentru ca poate fi singura metoda disponibila pe sistemele ISA care nu au un controlor de dispozitiv rtc funcional. Funcia de reglare Ceasul hardware nu este, de obicei, foarte precis. Cu toate acestea, o mare parte din inexactitatea sa este complet previzibila - acesta catiga sau pierde aceeai cantitate de timp in fiecare zi. Acest lucru se numete abatere sistematica. Funcia --adjust a hwclock va permite sa aplicai corecii de abatere sistematica la ceasul hardware. Aceasta funcioneaza in felul urmator: hwclock deine un fiier, /etc/adjtime, care pastreaza unele informaii istorice. Acesta se numete fiierul adjtime. Sa presupunem ca incepei fara niciun fiier adjtime. Emitei o comanda hwclock --set pentru a fixa ceasul hardware la ora curenta reala. hwclock creeaza fiierul adjtime i inregistreaza in el ora curenta ca ultima data cand ceasul a fost calibrat. Cinci zile mai tarziu, ceasul a catigat 10 secunde, aa ca emitei o comanda hwclock --set --update-drift pentru a-l da inapoi cu 10 secunde. hwclock actualizeaza fiierul adjtime pentru a afia ora curenta ca ultima data cand ceasul a fost calibrat i inregistreaza 2 secunde pe zi ca rata de abatere sistematica. Trec 24 de ore, iar apoi emitei o comanda hwclock --adjust. hwclock consulta fiierul adjtime i constata ca ceasul catiga 2 secunde pe zi atunci cand este lasat in pace i ca a fost lasat in pace exact o zi. Deci, scade 2 secunde din ceasul hardware. Apoi inregistreaza ora curenta ca fiind ultima data cand ceasul a fost ajustat. Mai trec 24 de ore i se emite un alt hwclock --adjust. hwclock face acelai lucru: scade 2 secunde i actualizeaza fiierul adjtime cu ora curenta ca fiind ultima data cand ceasul a fost ajustat. Atunci cand utilizai opiunea --update-drift cu --set sau --systohc, rata de abatere sistematica este (re)calculata prin compararea orei curente a ceasului hardware complet corectate pentru abatere cu noua ora stabilita, de la care se obine rata de abatere pe 24 de ore pe baza ultimei date de timp calibrate din fiierul ,,adjtime". Acest factor de abatere actualizat este apoi salvat in /etc/adjtime. O mica cantitate de eroare se strecoara atunci cand este stabilit ceasul hardware (Hardware Clock), aa ca --adjust se abine de la orice ajustare mai mica de 1 secunda. Mai tarziu, cand solicitai din nou o ajustare, abaterea acumulata va fi mai mare de 1 secunda, iar --adjust va efectua ajustarea, inclusiv orice cantitate fracionara. hwclock --hctosys utilizeaza, de asemenea, datele din fiierul adjtime pentru a compensa valoarea citita de la ceasul hardware inainte de a o utiliza pentru a stabili ceasul sistemului. Nu impartaete limitarea de 1 secunda a --adjust i va corecta imediat valorile de abatere sub o secunda. Nu modifica ora ceasului hardware i nici fiierul ,,adjtime". Acest lucru poate elimina necesitatea de a utiliza --adjust, cu excepia cazului in care altceva in sistem necesita compensarea ceasului hardware. Fiierul adjtime In timp ce este numit pentru scopul sau istoric de a controla doar ajustarile, el conine de fapt alte informaii utilizate de hwclock de la o invocare la alta. Formatul fiierului ,,adjtime" este, in ASCII: Linia 1: Trei numere, separate prin spaii libere: 1) rata de abatere sistematica in secunde pe zi, numar zecimal cu virgula mobila; 2) numarul rezultat de secunde din 1969 UTC de la cea mai recenta ajustare sau calibrare, numar intreg zecimal; 3) zero (pentru compatibilitate cu clock(8)) ca numar zecimal cu virgula mobila. Linia 2: Un numar: numarul de secunde rezultat din 1969 UTC de la cea mai recenta calibrare. Zero in cazul in care nu a avut loc inca nicio calibrare sau se tie ca orice calibrare anterioara este inutila (de exemplu, deoarece s-a constatat ca ceasul hardware nu mai conine o ora valabila de la acea calibrare). Acesta este un numar intreg zecimal. Linia 3: "UTC" sau "LOCAL". Indica daca ceasul hardware este stabilit la timpul universal coordonat sau la ora locala. Putei oricand sa inlocuii aceasta valoare cu opiunile din linia de comanda hwclock. Putei utiliza un fiier ,,adjtime" care a fost utilizat anterior cu programul clock(8) cu hwclock. Sincronizarea automata a ceasului hardware de catre nucleu Ar trebui sa tii ca exista un alt mod in care ceasul hardware (Hardware Clock) este meninut sincronizat in unele sisteme. Nucleul Linux are un mod in care copiaza ora sistemului in ceasul hardware la fiecare 11 minute. Acest mod este o opiune de compilare, astfel incat nu toate nucleele vor avea aceasta capacitate. Acesta este un mod bun de utilizat atunci cand folosii ceva sofisticat, cum ar fi NTP, pentru a menine ceasul de sistem sincronizat. (NTP este o modalitate de a menine sincronizata ora de sistem fie cu un server de timp undeva in reea, fie cu un ceas radio conectat la sistemul dumneavoastra. Consultai RFC 1305.) Daca nucleul este compilat cu opiunea ,,11 minute mode", aceasta va fi activa atunci cand disciplina de ceas a nucleului se afla intr-o stare de sincronizare. Cand se afla in aceasta stare, bitul 6 (bitul care este setat in masca 0x0040) din variabila time_status a nucleului este dezactivat. Aceasta valoare este afiata ca linie ,,status" (de stare) a comenzilor adjtimex --print sau ntptime. Este nevoie de o influena externa, cum ar fi demonul NTP, pentru a pune disciplina ceasului din nucleu intr-o stare de sincronizare i, prin urmare, pentru a activa ,,modul 11 minute". Acesta poate fi dezactivat prin rularea oricarui lucru care ajusteaza ceasul de sistem in mod tradiional, inclusiv hwclock --hctosys. Cu toate acestea, daca demonul NTP este inca in funciune, acesta va activa din nou ,,modul 11 minute" la urmatoarea sincronizare a ceasului de sistem. Daca sistemul dvs. funcioneaza cu ,,modul 11 minute" activat, este posibil sa fie necesar sa folosii --hctosys sau --systz intr-un script de pornire, in special daca ceasul hardware este configurat sa foloseasca scara de timp locala. Daca nucleul nu este informat despre ce scara de timp folosete ceasul hardware, este posibil sa o foloseasca pe cea greita. In mod implicit, nucleul utilizeaza UTC. Prima comanda din spaiul utilizatorului de stabilire a ceasului de sistem informeaza nucleul cu privire la scara de timp pe care o folosete ceasul hardware. Acest lucru se intampla prin intermediul variabilei nucleului persistent_clock_is_local. Daca --hctosys sau --systz este prima, aceasta va defini aceasta variabila in funcie de fiierul adjtime sau de argumentul corespunzator din linia de comanda. Reinei ca, atunci cand se utilizeaza aceasta capacitate i se modifica configurarea scarii temporale a ceasului hardware, este necesara o repornire pentru a notifica nucleul. hwclock --adjust nu ar trebui sa fie utilizata cu ,,modul 11 minute" NTP. Valoarea secolului pentru ceasul hardware ISA Exista un fel de standard care definete octetul 50 al memoriei CMOS pe o maina ISA ca indicator al secolului in care ne aflam. hwclock nu utilizeaza sau configureaza acel octet deoarece exista unele maini care nu definesc octetul in acest mod i, oricum, nu este necesar, deoarece anul secolului face o treaba buna in ceea ce privete indicarea secolului in care ne aflam. Daca avei o utilizare de buna credina pentru un octet de secol CMOS, contactai responsabilul hwclock; o opiune poate fi potrivita. Reinei ca aceasta seciune este relevanta numai atunci cand utilizai metoda ,,direct ISA" de accesare a ceasului hardware. ACPI ofera o modalitate standard de accesare a valorilor de secol, atunci cand acestea sunt acceptate de hardware. CONFIGURAREA DATEI I A OREI Gestionarea timpului (data+ora) fara sincronizare externa Aceasta discuie se bazeaza pe urmatoarele condiii: o Nu ruleaza nimic care sa modifice data i ora ceasurilor, cum ar fi un daemon NTP sau un cron job (o sarcina programata in demonul <>). o Fusul orar al sistemului este configurat pentru ora locala corecta. A se vedea mai jos, la POSIX vs ,,CORECT". o La inceputul pornirii sunt apelate urmatoarele, in aceasta ordine: adjtimex --tick valoare --frequency valoare hwclock --hctosys o In timpul inchiderii (opriri sistemului), se apeleaza urmatoarea comanda: hwclock --systohc o Sistemele care nu dispun de adjtimex pot utiliza ntptime. Indiferent daca meninei sau nu ora exacta cu ajutorul daemonului NTP, este logic sa configurai sistemul pentru a menine o data i o ora relativ bune pe cont propriu. Primul pas pentru a face acest lucru este sa inelegem clar care este situaia in ansamblu. Exista doua dispozitive hardware complet separate care funcioneaza la propria viteza i care se indeparteaza de timpul ,,corect" in ritmuri proprii. Metodele i software-ul de corecie a abaterii sunt diferite pentru fiecare dintre ele. Cu toate acestea, majoritatea sistemelor sunt configurate pentru a face schimb de valori intre aceste doua ceasuri la pornire i la oprire. Acum, erorile de pastrare a timpului ale fiecarui dispozitiv in parte sunt transferate intre ele. Incercai sa configurai corecia abaterii doar pentru unul dintre ele, iar abaterea celuilalt se va suprapune peste aceasta. Aceasta problema poate fi evitata atunci cand se configureaza corecia de abatere pentru ceasul de sistem, prin simpla ne-oprire a mainii. Acest lucru, plus faptul ca toata precizia hwclock (inclusiv calcularea factorilor de abatere) depinde de corectitudinea ritmului ceasului de sistem, inseamna ca ar trebui sa se faca mai intai configurarea ceasului de sistem. Abaterea ceasului de sistem este corectata cu ajutorul opiunilor --tick i --frequency a comenzii adjtimex(8). Aceste doua opiuni funcioneaza impreuna: ,,--tick" este ajustarea grosiera, iar ,,--frequency" este ajustarea fina (pentru sistemele care nu au un pachet adjtimex, se poate folosi in schimb ntptime -f ppm). Unele distribuii Linux incearca sa calculeze automat abaterea ceasului de sistem cu ajutorul operaiei de comparare a adjtimex. Incercarea de a corecta un ceas cu abatere folosind ca referina un alt ceas cu abatere, se aseamana cu un caine care incearca sa-i prinda propria coada. Succesul poate avea loc in cele din urma, dar probabil ca va fi precedat de un efort mare i de frustrari. Aceasta automatizare poate aduce o imbunataire faa de absena oricarei configuraii, dar ateptarea unor rezultate optime ar fi o eroare. O alegere mai buna pentru configurarea manuala ar fi opiunile --log de la adjtimex. Ar putea fi mai eficient sa urmarii pur i simplu abaterea ceasului de sistem cu sntp, sau date -Ins i un ceas de precizie, apoi sa calculai manual corecia. Dupa ce ai stabilit valorile pentru ,,--tick" i cele pentru ,,-frequency", continuai sa testai i sa rafinai ajustarile pana cand ceasul de sistem se menine potrivit. Consultai adjtimex(2) pentru mai multe informaii i exemplul care demonstreaza calculele de abatere manuala. Odata ce ceasul de sistem (System Clock) funcioneaza fara probleme, trecei la ceasul hardware (Hardware Clock). De regula, abaterea la rece va funciona cel mai bine pentru majoritatea cazurilor de utilizare. Acest lucru ar trebui sa fie valabil chiar i in cazul mainilor care funcioneaza 24/7 i a caror perioada normala de oprire consta intr-o repornire. In acest caz, valoarea factorului de abatere are o importana redusa. Dar, in rarele ocazii in care maina este oprita pentru o perioada lunga de timp, atunci abaterea la rece ar trebui sa dea rezultate mai bune. o Paii pentru a calcula deriva la rece: * 1 Asigurai-va ca demonul NTP nu va fi lansat la pornire. 2 Ora System Clock (ceasului de sistem) trebuie sa fie corecta la oprire! 3 Inchidei(oprii) sistemul. 4 Lasai sa treaca o perioada indelungata fara a modifica ceasul hardware. 5 Pornii sistemul. 6 Utilizai imediat hwclock pentru a stabili ora corecta, adaugand opiunea --update-drift. Nota: daca la pasul 6 se utilizeaza --systohc, atunci ceasul sistemului trebuie stabilit corect (pasul 6a) chiar inainte de a face acest lucru. Calcularea factorului de abatere de catre hwclock este un bun punct de plecare, dar pentru rezultate optime va trebui probabil sa fie ajustat prin editarea directa a fiierului /etc/adjtime. Continuai sa testai i sa rafinai factorul de abatere pana cand ceasul hardware este corectat corect la pornire. Pentru a verifica acest lucru, asigurai-va mai intai ca ora sistemului este corecta inainte de oprire i apoi utilizai sntp, sau date -Ins i un ceas de precizie, imediat dupa pornire. LOCAL vs UTC inerea ceasului hardware intr-o scara de timp locala determina rezultate incoerente in ceea ce privete ora de vara: o Daca Linux ruleaza in timpul schimbarii orei de vara, ora scrisa in ceasul hardware va fi ajustata in funcie de aceasta schimbare. o Daca Linux NU ruleaza in timpul schimbarii orei de vara, ora citita de la ceasul hardware NU va fi ajustata pentru aceasta schimbare. Ceasul hardware de pe un sistem compatibil cu ISA pastreaza doar data i ora, nu are noiunea de fus orar i nici de ora de vara. Prin urmare, atunci cand hwclock este informat ca se afla in ora locala, acesta presupune ca se afla in ora locala ,,corecta" i nu face nicio ajustare a orei citite de la el. Linux gestioneaza schimbarile de ora de vara in mod transparent numai atunci cand ceasul hardware este meninut in scara de timp UTC. Acest lucru este facilitat pentru administratorii de sistem, deoarece hwclock utilizeaza ora locala pentru ieire i ca argument pentru opiunea --date. Sistemele POSIX, precum Linux, sunt proiectate pentru ca ceasul de sistem sa funcioneze pe scara de timp UTC. Scopul ceasului hardware este de a iniializa ceasul de sistem, astfel incat este logic sa fie pastrat i in UTC. Cu toate acestea, Linux incearca sa se adapteze la faptul ca ceasul hardware se afla in scara de timp locala. Acest lucru este valabil in primul rand pentru pornirea duala cu versiunile mai vechi ale MS Windows. Incepand cu Windows 7, cheia de registru RealTimeIsUniversal ar trebui sa funcioneze corect, astfel incat ceasul hardware sa poata fi pastrat in UTC. POSIX vs ,,CORECT" O discuie despre configurarea datei i a orei ar fi incompleta daca nu ar fi abordata i problema fuselor orare; acest aspect este in mare parte bine acoperit de tzset(3). Un domeniu care pare sa nu aiba documentaie este directorul ,,corect" al bazei de date a fusurilor orare, numit uneori ,,tz" sau ,,zoneinfo". Exista doua baze de date separate in sistemul zoneinfo, posix i ,,right" (corect). ,,Right" (numita acum ,,zoneinfo-leaps") include secundele bisecte, iar posix nu. Pentru a utiliza baza de date ,,right", ceasul de sistem trebuie sa fie setat la (UTC + secundele bisecte), ceea ce este echivalent cu (TAI - 10). Acest lucru permite calcularea numarului exact de secunde dintre doua date care traverseaza o epoca de secunde bisecte. Ceasul sistemului este apoi convertit la ora civila corecta, inclusiv UTC, prin utilizarea fiierelor de fus orar ,,right/corecte" care scad secundele bisecte. Nota: aceasta configuraie este considerata experimentala i se tie ca are probleme. Pentru a configura un sistem pentru a utiliza o anumita baza de date, toate fiierele aflate in directorul acesteia trebuie copiate in radacina fiierului /usr/share/zoneinfo. Fiierele nu se utilizeaza niciodata direct din subdirectoarele posix sau ,,right", de exemplu, TZ='right/Europe/Dublin'. Acest obicei devenise atat de frecvent incat proiectul ,,zoneinfo" din amonte a restructurat arborele de fiiere al sistemului prin mutarea subdirectoarelor posix i ,,right" din directorul zoneinfo in directoare fraterne: /usr/share/zoneinfo, /usr/share/zoneinfo-posix, /usr/share/zoneinfo-leaps Din nefericire, unele distribuii Linux au revenit la vechea structura arborescenta in pachetele lor. Astfel, problema administratorilor de sistem care ajung in subdirectorul ,,right/corect" persista. Acest lucru face ca fusul orar al sistemului sa fie configurat pentru a include secundele bisecte, in timp ce baza de date zoneinfo este inca configurata pentru a le exclude. Apoi, atunci cand o aplicaie, cum ar fi un ceas mondial, are nevoie de fiierul cu fusul orar South_Pole; sau un MTA de pota electronica, sau hwclock are nevoie de fiierul cu fusul orar UTC; acestea il preiau de la radacina /usr/share/zoneinfo , deoarece aa trebuie sa faca. Aceste fiiere exclud secundele bisecte, dar ceasul de sistem le include acum, ceea ce provoaca o conversie incorecta a timpului. Incercarea de a amesteca i de a potrivi fiiere din aceste baze de date separate nu va funciona, deoarece fiecare dintre ele necesita ca ceasul de sistem sa utilizeze o scara de timp diferita. Baza de date zoneinfo trebuie configurata pentru a utiliza fie posix, fie ,,right", aa cum este descris mai sus, sau prin atribuirea unei rute la baza de date in variabila de mediu TZDIR. STARE DE IEIRE Una dintre urmatoarele valori de ieire va fi returnata: EXIT_SUCCESS (,,0" in sistemele POSIX) Executarea cu succes a programului. EXIT_FAILURE (,,1" in sistemele POSIX) Operaia a euat sau sintaxa comenzii nu a fost valida. MEDIU TZ Daca aceasta variabila este definita, valoarea ei are prioritate faa de fusul orar configurat de sistem. TZDIR Daca aceasta variabila este definita, valoarea ei are prioritate faa de ruta la directorul bazei de date a fusului orar configurat de sistem. FIIERE /etc/adjtime Fiierul de configurare i de stare pentru hwclock. A se vedea, de asemenea, adjtime_config(5). /etc/localtime Fiierul cu fusul orar al sistemului. /usr/share/zoneinfo/ Directorul bazei de date cu fusul orar al sistemului. Fiierele de dispozitiv hwclock pot incerca sa acceseze ceasul hardware: Dev/rtc0_ Dev/rtc0 /dev/rtc /dev/misc/rtc /dev/efirtc /dev/misc/efirtc CONSULTAI I date(1), adjtime_config(5), adjtimex(8), gettimeofday(2), settimeofday(2), crontab(1p), tzset(3) AUTORI Scris de Bryan Henderson , septembrie 1996, pe baza lucrarilor efectuate pe programul clock(8) de Charles Hedrick, Rob Hooft i Harald Koenig. Consultai codul sursa pentru un istoric complet i o lista de credite (mulumiri adresate diferiilor contribuitori). RAPORTAREA ERORILOR Pentru rapoarte de eroare, folosii sistemul de urmarire al erorilor . DISPONIBILITATE Comanda hwclock face parte din pachetul util-linux care poate fi descarcat de la Linux Kernel Archive . util-linux 2.41 2025-03-29 HWCLOCK(8)