ATIME, CTIME, MTIME

Ukoliko ste svoje probleme s backupom riješili preko (hvaljene) CARNetove usluge sys.backup, vjerojatno ste u nekom trenutku dobili ovakvu poruku o greški:

Error: /var/mail/korisnik mtime changed during backup.

Promijenio se "mtime"? Aha, to je onaj "modification time", vjerojatno zato jer je korisniku stigao mail nakon što je backup već počeo. No, što je tu je, tu se ne može ništa. Ipak je to live backup, nakon početka kopiranja datotečni sustav se i dalje mijenja.

Radi se, dakle, o informativnoj poruci o kojoj ne treba previše razmišljati. Samo, što je sa vremenima ctime i atime, koja se također dodjeljuju svakoj datoteci?  Atime ("access time") je vrijeme koje se zapisuje svaki put kada se pristupi datoteci, nekim editorom (vi, joe) ili preglednikom (more, less, cat...).  Očigledno se vrijeme atime ne uzima u obzir za backupiranje, jer sadržaj datoteke može ostati u potpunosti isti. Čemu backupirati datoteku koja se uopće nije promijenila, iako joj je možda pristupano nakon izmjena?
Sasvim je drugačija situacija s vremenom "ctime". Ctime nije "creation time", odnosno vrijeme kreiranja! Ovo se vrijeme uopće ne zapisuje u strukturama datotečnog sustava na Linuxu, nego je ctime zapravo vrijeme promjene pripadajućeg inodea. Inode je podatkovna struktura na disku, odnosno metapodatak u kojem se nalaze svi podaci o datoteci (tko je vlasnik, koje su dozvole, veličina itd), osim imena i sadržaja datoteke.

Ljudskom načinu razmišljanja je zapravo vrlo zgodno zapamtiti: atime je access time, ctime je creation time, mtime je modification time. No, to nije točno za vrijeme ctime.

Ponovimo, ctime jest vrijeme promjene, ali pripadajućeg inodea, što se događa prilikom promjene bilo kojeg podatka unutar strukture.  U moguće uzročnike promjene vremena ctime možemo uvrstiti promjenu vlasništva (naredbom chown) ili modusa datoteke (naredbom chmod).

Ovo ima za posljedicu da promjena vremena ctime ne povlači promjenu vremena mtime, ali obrnuto itekako vrijedi. Pomoću naredbe ls možemo vidjeti kako se ta vremena mijenjaju. (Možete rabiti i naredbu stat, koja je opisana u članku http://sistemac.carnet.hr/node/731)

Za probu, kreirane su tri prazne datoteke, a, b i c. Naredba ls po defaultu prikazuje vrijeme mtime, a s opcijom "-u" prikazuje vrijeme atime:

> ls -l
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 b
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 c
> ls -lu
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 b
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 c
> cat b
> ls -lu
total 0
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:21 b
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 c

Vidimo da jednostavna uporaba naredbe cat mijenja vrijeme pristupa datoteci, dok ostale vrijednosti ostaju nepromijenjene.

Sada možemo pogledati kako će se vremena promijeniti kada promijenimo ctime (ctime naredba ls prikazuje ukoliko uključimo prekidač -c):

> chmod 666 c
> ls -lu
total 0
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:21 b
-rw-rw-rw- 1 korisnik users 0 Feb 4 13:19 c

> ls -l
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 b
-rw-rw-rw- 1 korisnik users 0 Feb 4 13:19 c

> ls -lc
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 b
-rw-rw-rw- 1 korisnik users 0 Feb 4 13:22 c

Vrijeme pristupa i modificiranja se na datoteci c nisu promijenili. Promijenjeno je samo vrijeme promjene inodea (ctime), kako smo i namjeravali.

Pogledajmo još što će se dogoditi kada izmijenimo samu datoteku c.

> echo 1 > c
> ls -lu
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:21 b
-rw-rw-rw- 1 korisnik users 2 Feb 4 13:19 c
> ls -l
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 b
-rw-rw-rw- 1 korisnik users 2 Feb 4 13:44 c
> ls -lc
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 a
-rw-r--r-- 1 korisnik users 0 Feb 4 13:19 b
-rw-rw-rw- 1 korisnik users 2 Feb 4 13:44 c

Kao što smo i očekivali, promjena sadržaja datoteke c (a time i vremena mtime), je prouzrokovalo i promjenu vremena ctime (jer su se promijenili podaci u strukturi inodea). Ono što je možda iznenađujuće je da se vrijeme pristupa (atime) nije promijenilo. Ovo je stoga što se vrijeme atime ažurira samo kod operacija čitanja, a vremena ctime i mtime samo kod operacija pisanja.

Ponašanje kod osvježavanja vremena pristupa se može promijeniti s opcijama "noatime", "relatime" i "strictatime". One se mogu upisati za svaku particiju posebno unutar datoteke /etc/fstab, ali se s njima u ovom članku nećemo baviti.

Kako te opcije mogu utjecati na performanse ulazno/izlaznih operacija, bit će zanimljivo obraditi i tu temu (pogotovo stoga što bi to značilo da bi neki programi mogli prestati raditi - npr. mutt, tmpwatch, neki programi za backup itd).

Kuharice: 
Kategorije: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (4 votes)