Atime je mrtav, živio RelAtime!

U prošlom članku smo objasnili i razradili značenja tri timestampa koja se pojavljuju na Linuxovom datotečnom sustavu. Također smo objasnili i zašto je osvježavanje vremena atime zapravo nepoželjno. Zbog usporavanja diskovnih I/O operacija pristupilo se osmišljavanju rješenja za ovaj problem, kako bi se istovremeno zadržala kompatibilnost i poboljšale performanse. Odgovor je nađen u parametru relatime (nije greška, nije realtime, nego relatime).

Provjerimo što se događa na našoj datoteci 'c' uz pomoć alata stat (http://sistemac.carnet.hr/node/731):

# stat c
Access: (0666/-rw-rw-rw-) Uid: ( 1008/ korisnik) Gid: ( 100/ users)
Access: 2013-02-04 15:21:51.000000000 +0100
Modify: 2013-02-04 15:21:51.000000000 +0100
Change: 2013-02-04 15:21:51.000000000 +0100
# cat c
Sadrzaj datoteke c.
# stat c
Access: (0666/-rw-rw-rw-) Uid: ( 1008/ korisnik) Gid: ( 100/ users)
Access: 2013-02-04 15:37:50.000000000 +0100
Modify: 2013-02-04 15:21:51.000000000 +0100
Change: 2013-02-04 15:21:51.000000000 +0100

Inicijalno, sve su vremenske oznake jednake. Nakon što smo "pročitali" datoteku 'c', atime je novije nego ctime ili mtime. Sada ćemo ponovo pročitati datoteku, bez ikakvih drugih intervencija nad njom:

# cat c
Sadrzaj datoteke c.
# stat c
Access: (0666/-rw-rw-rw-) Uid: ( 1008/ korisnik) Gid: ( 100/ users)
Access: 2013-02-04 15:37:50.000000000 +0100
Modify: 2013-02-04 15:21:51.000000000 +0100
Change: 2013-02-04 15:21:51.000000000 +0100

Očekivali bismo da će svako novo čitanje datoteke 'c' obnoviti vrijeme pristupanja, ali to se zbog opcije relatime nije dogodilo.

Kako relatime mijenja uobičajeno ponašanje u zapisivanju timestampova? Stvar je zapravo vrlo jednostavna, vremenske oznake se više ne upisuju kod svakog čitanja, nego se vrijednost prvo uspoređuje s vrijednostima ctime i mtime. Ukoliko je vrijeme pristupa starije od mtime ili ctime, onda će se vremenska oznaka za atime upisati. Svako sljedeće pristupanje datoteci neće prouzročiti osvježavanje oznake, sve dok se ne promijeni ctime ili mtime. Provjerimo tu činjenicu:

# echo novisadrzaj > c
# stat c
Access: (0666/-rw-rw-rw-) Uid: ( 1008/ korisnik) Gid: ( 100/ users)
Access: 2013-02-04 15:37:50.000000000 +0100
Modify: 2013-02-04 15:39:54.000000000 +0100
Change: 2013-02-04 15:39:54.000000000 +0100
# cat c
novisadrzaj
# stat c
Access: (0666/-rw-rw-rw-) Uid: ( 1008/ korisnik) Gid: ( 100/ users)
Access: 2013-02-04 15:40:01.000000000 +0100
Modify: 2013-02-04 15:39:54.000000000 +0100
Change: 2013-02-04 15:39:54.000000000 +0100

Kako smo obavili operaciju pisanja, promijenila su se samo vremena ctime i mtime. Nakon što smo obavili i operaciju čitanja, vrijeme atime se promijenilo, jer je bilo starije od ctime ili mtime.

Opcija relatime je uključena negdje u kernelu 2.6.30 kao kompromis između potpunog obustavljanja zapisivanja vremena atime s jedne strane, i mogućih problema u radu nekih programa s druge strane. Spomenuli smo ih, to su tmpwatch, mutt i neki programi za backup koji provjeravaju atime. Inače, mutt se može podesiti da radi i bez atime.

Kako možemo provjeriti jesu li naši datotečni sustavi montirani s opcijom noatime, relatime, ili kojom drugom? Prije svega, možemo pogledati u datoteku /etc/fstab. To nam nažalost neće dati pouzdanu informaciju, jer se datotečni sustavi mogu naknadno remountati (mount -o remount), pa ta informacija može biti zastarjela.

# grep /home /etc/fstab
/dev/sda3 /home ext3 defaults 0 2

U datoteci se dakle ne nalaze nikakve posebne opcije, no je li ustinu tako? Provjerimo s naredbom mount, bez parametara:

# mount | grep home
/dev/sda3 on /home type ext3 (rw)

Čini se da nikakvih dodatnih opcija nema, zar ne? Idemo ipak korak dalje:

# cat /proc/mounts | grep home
/dev/sda3 /home ext3 rw,relatime,errors=continue,data=ordered 0 0

Dakle, ono što nam treba je samo datotečni sustav /proc i naredba cat. Njihovom uporabom smo upravo obaviješteni da nije potrebno ništa posebno specificirati unutar datoteke /etc/fstab. Opcija relatime je uključena po defaultu, iako se ni ne pojavljuje u /etc/fstab. Ukoliko iz nekog razloga ipak želite tradicionalno ponašanje kod osvježavanja vremena atime, isključite relatime s opcijom strictatime ili norelatime.

Puni popis opcija koje možete navesti unutar /etc/fstab se nalazi unutar manuala za naredbu mount.

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