.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2020 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH time_namespaces 7 "2 mai 2024" "Pagini de manual de Linux 6.9.1" .SH NUME time_namespaces \- prezentare generală a spațiilor de nume de timp Linux .SH DESCRIERE Spațiile de nume de timp virtualizează valorile a două ceasuri de sistem: .IP \[bu] 3 \fBCLOCK_MONOTONIC\fP (și, de asemenea, \fBCLOCK_MONOTONIC_COARSE\fP și \fBCLOCK_MONOTONIC_RAW\fP), un ceas care nu poate fi reglat și care reprezintă timpul monoton de la \- așa cum este descris de POSIX \- „un punct nespecificat din trecut”. .IP \[bu] \fBCLOCK_BOOTTIME\fP (și, de asemenea, \fBCLOCK_BOOTTIME_ALARM\fP), un ceas nereglabil care este identic cu \fBCLOCK_MONOTONIC\fP, cu excepția faptului că include, de asemenea, orice timp în care sistemul este suspendat. .P Astfel, procesele dintr\-un spațiu de nume de timp împart valorile pentru fiecare spațiu de nume pentru aceste ceasuri. Acest lucru afectează diverse API\-uri care măsoară în funcție de aceste ceasuri, inclusiv: \fBclock_gettime\fP(2), \fBclock_nanosleep\fP(2), \fBnanosleep\fP(2), \fBtimer_settime\fP(2), \fBtimerfd_settime\fP(2) și \fI/proc/uptime\fP. .P .\" În prezent, singura modalitate de a crea un spațiu de nume de timp este prin apelarea \fBunshare\fP(2) cu fanionul \fBCLONE_NEWTIME\fP. Acest apel creează un nou spațiu de nume de timp, dar nu plasează procesul apelant în noul spațiu de nume. În schimb, copiii procesului de apelare creați ulterior sunt plasați în noul spațiu de nume. Acest lucru permite ca decalajele de ceas (a se vedea mai jos) pentru noul spațiu de nume să fie stabilite înainte ca primul proces să fie plasat în spațiul de nume. Legătura simbolică \fI/proc/\fPpid\fI/ns/time_for_children\fP arată spațiul de nume temporal în care vor fi creați copiii unui proces; (un proces poate utiliza un descriptor de fișier deschis pe această legătură simbolică într\-un apel la \fBsetns\fP(2) pentru a se muta în spațiul de nume). .SS \fI/proc/\fPpid\fI/timens_offsets\fP Fiecărui spațiu de nume de timp îi sunt asociate decalaje, exprimate în raport cu spațiul de nume de timp inițial, care definesc valorile ceasurilor monotonice și de pornire din acel spațiu de nume. Aceste decalaje sunt expuse prin intermediul fișierului \fI/proc/\fPpid\fI/timens_offsets\fP. În cadrul acestui fișier, decalajele sunt exprimate ca linii formate din trei câmpuri delimitate prin spații: .P .in +4n .EX .EE .in .P \fIclock\-id\fP este un șir de caractere care identifică ceasul ale cărui decalaje sunt afișate. Acest câmp este fie \fImonotonic\fP, pentru \fBCLOCK_MONOTONIC\fP, fie \fIboottime\fP, pentru \fBCLOCK_BOOTTIME\fP. Câmpurile rămase exprimă decalajul (secunde plus nanosecunde) pentru ceasul din acest spațiu de nume de timp. Aceste decalaje sunt exprimate în raport cu valorile ceasului din spațiul de nume de timp inițial. Valoarea \fIoffset\-secs\fP poate fi negativă, sub rezerva restricțiilor menționate mai jos; \fIoffset\-nanosecs\fP este o valoare fără semn. .P În spațiul de nume al timpului inițial, conținutul fișierului \fItimens_offsets\fP este următorul: .P .in +4n .EX $ \fBcat /proc/self/timens_offsets\fP monotonic 0 0 boottime 0 0 .EE .in .P Într\-un nou spațiu de nume de timp care nu a avut niciun proces membru, decalajele ceasului pot fi modificate prin scrierea de înregistrări cu terminație de linie nouă de aceeași formă în fișierul \fItimens_offsets\fP. Fișierul poate fi scris de mai multe ori, dar după ce primul proces a fost creat în spațiul de nume sau a intrat în spațiul de nume, scrierea \fBwrite\fP(2) pe acest fișier eșuează cu eroarea \fBEACCES\fP. Pentru a putea scrie în fișierul \fItimens_offsets\fP, un proces trebuie să aibă capacitatea \fBCAP_SYS_TIME\fP în spațiul de nume al utilizatorului care deține spațiul de nume al timpului. .P Scrierile în fișierul \fItimens_offsets\fP pot eșua cu următoarele erori: .TP \fBEINVAL\fP O valoare \fIoffset\-nanosecs\fP este mai mare de 999,999,999. .TP \fBEINVAL\fP O valoare \fIclock\-id\fP nu este validă. .TP \fBEPERM\fP Apelantul nu dispune de capacitatea \fBCAP_SYS_TIME\fP. .TP \fBERANGE\fP O valoare \fIoffset\-secs\fP este în afara intervalului. În particular; .RS .IP \[bu] 3 \fIoffset\-secs\fP nu poate fi fixat la o valoare care ar face ca ora curentă a ceasului corespunzător din interiorul spațiului de nume să fie o valoare negativă; și .IP \[bu] \fIoffset\-secs\fP nu poate fi fixat la o valoare astfel încât ora ceasului corespunzător din interiorul spațiului de nume să depășească jumătate din valoarea constantei \fBKTIME_SEC_MAX\fP a nucleului (aceasta limitează valoarea ceasului la un maxim de aproximativ 146 de ani). .RE .P Într\-un nou spațiu de nume de timp creat de \fBunshare\fP(2), conținutul fișierului \fItimens_offsets\fP este moștenit de la spațiul de nume de timp al procesului de creare. .SH NOTE Utilizarea spațiilor de nume de timp necesită un nucleu care este configurat cu opțiunea \fBCONFIG_TIME_NS\fP. .P Rețineți că spațiile de nume de timp nu virtualizează ceasul \fBCLOCK_REALTIME\fP. Virtualizarea acestui ceas a fost evitată din motive de complexitate și de suprasolicitare în cadrul nucleului. .P Pentru compatibilitate cu implementarea inițială, atunci când se scrie un \fIclock\-id\fP în fișierul \fI/proc/\fPpid\fI/timens_offsets\fP, valorile numerice ale ID\-urilor pot fi scrise în locul numelor simbolice prezentate mai sus; de exemplu, 1 în loc de \fImonotonic\fP și 7 în loc de \fIboottime\fP. Pentru ușurința de citire, se preferă utilizarea numelor simbolice în locul celor numerice. .P Motivația pentru adăugarea de spații de nume de timp a fost aceea de a permite ceasurilor monotonice și de pornire să mențină valori consecvente în timpul migrării containerului și al punctului de verificare/restaurare. .SH EXEMPLE Următoarea sesiune shell demonstrează funcționarea spațiilor de nume de timp. Începem prin afișarea numărului nodului\-i al spațiului de nume de timp al unui shell în spațiul de nume de timp inițial: .P .in +4n .EX $ \fBreadlink /proc/$$/ns/time\fP time:[4026531834] .EE .in .P Continuând în spațiul de nume al timpului inițial, vom afișa timpul de funcționare a sistemului folosind \fBuptime\fP(1) și vom folosi programul de exemplu \fIclock_times\fP prezentat în \fBclock_getres\fP(2) pentru a afișa valorile diferitelor ceasuri: .P .in +4n .EX $ \fBuptime \-\-pretty\fP up 21 hours, 17 minutes $ \fB./clock_times\fP CLOCK_REALTIME : 1585989401.971 (18356 days + 8h 36m 41s) CLOCK_TAI : 1585989438.972 (18356 days + 8h 37m 18s) CLOCK_MONOTONIC: 56338.247 (15h 38m 58s) CLOCK_BOOTTIME : 76633.544 (21h 17m 13s) .EE .in .P Apoi folosim \fBunshare\fP(1) pentru a crea un spațiu de nume de timp și pentru a executa un shell \fBbash\fP(1). Din noul shell, folosim comanda încorporată \fBecho\fP pentru a scrie înregistrări în fișierul \fItimens_offsets\fP, ajustând decalajul pentru ceasul \fBCLOCK_MONOTONIC\fP înainte cu 2 zile și decalajul pentru ceasul \fBCLOCK_BOOTTIME\fP înainte cu 7 zile: .P .in +4n .EX $ \fBPS1="ns2# " sudo unshare \-T \-\- bash \-\-norc\fP ns2# \fBecho "monotonic $((2*24*60*60)) 0" > /proc/$$/timens_offsets\fP ns2# \fBecho "boottime $((7*24*60*60)) 0" > /proc/$$/timens_offsets\fP .EE .in .P Mai sus, am pornit shell\-ul \fBbash\fP(1) cu opțiunea \fB\-\-norc\fP, astfel încât să nu fie executat niciun script de pornire. Acest lucru asigură faptul că niciun proces\-copil nu este creat din shell înainte de a avea șansa de a actualiza fișierul \fItimens_offsets\fP. .P Apoi folosim \fBcat\fP(1) pentru a afișa conținutul fișierului \fItimens_offsets\fP. Executarea lui \fBcat\fP(1) creează primul proces în noul spațiu de nume de timp, după care alte încercări de actualizare a fișierului \fItimens_offsets\fP produc o eroare. .P .in +4n .EX ns2# \fBcat /proc/$$/timens_offsets\fP monotonic 172800 0 boottime 604800 0 ns2# \fBecho "boottime $((9*24*60*60)) 0" > /proc/$$/timens_offsets\fP bash: echo: eroare de scriere: Permisiune refuzată .EE .in .P Continuând în noul spațiu de nume, vom executa \fBuptime\fP(1) și programul de exemplu \fIclock_times\fP: .P .in +4n .EX ns2# \fBuptime \-\-pretty\fP up 1 week, 21 hours, 18 minutes ns2# \fB./clock_times\fP CLOCK_REALTIME : 1585989457.056 (18356 days + 8h 37m 37s) CLOCK_TAI : 1585989494.057 (18356 days + 8h 38m 14s) CLOCK_MONOTONIC: 229193.332 (2 days + 15h 39m 53s) CLOCK_BOOTTIME : 681488.629 (7 days + 21h 18m 8s) .EE .in .P Din rezultatul de mai sus, putem vedea că ceasurile monotonic și de pornire au valori diferite în noul spațiu de nume al timpului. .P Examinând legăturile simbolice \fI/proc/\fPpid\fI/ns/time\fP și \fI/proc/\fPpid\fI/ns/time_for_children\fP, vedem că shell\-ul este membru al spațiului de nume timp inițial, dar copiii săi sunt creați în noul spațiu de nume. .P .in +4n .EX ns2# \fBreadlink /proc/$$/ns/time\fP time:[4026531834] ns2# \fBreadlink /proc/$$/ns/time_for_children\fP time:[4026532900] ns2# \fBreadlink /proc/self/ns/time\fP # Creează un proces\-copil time:[4026532900] .EE .in .P Revenind la shell\-ul din spațiul de nume de timp inițial, vedem că ceasurile monotonic și de pornire nu sunt afectate de modificările \fItimens_offsets\fP care au fost făcute în celălalt spațiu de nume de timp: .P .in +4n .EX $ \fBuptime \-\-pretty\fP up 21 hours, 19 minutes $ \fB./clock_times\fP CLOCK_REALTIME : 1585989401.971 (18356 days + 8h 38m 51s) CLOCK_TAI : 1585989438.972 (18356 days + 8h 39m 28s) CLOCK_MONOTONIC: 56338.247 (15h 41m 8s) CLOCK_BOOTTIME : 76633.544 (21h 19m 23s) .EE .in .SH "CONSULTAȚI ȘI" .\" clone3() support for time namespaces is a work in progress .\" .BR clone3 (2), \fBnsenter\fP(1), \fBunshare\fP(1), \fBclock_settime\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBnamespaces\fP(7), \fBtime\fP(7) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .