U dubinama Time Machine-a

Šime Šoić

Objavljeno 09.11.2008. Objavio/la: Šime Šoić
U sekciji Software, Članci |

uvodna

Jedna od revolucionarnih mogućnosti prilikom predstavljanja Leoparda je bio automatski backup sistem, Time Machine. Upotreba Time Machine-a je trivijalna, čak i zabavna, no tehnologija koja stoji iza toga svega je prilično zanimljiva. Ako vas zanima općeniti pogled na Time Machine, preporučam da pročitate Tonijev članak, a ja ću u ovome zaroniti u dubinu.

Prvo pogledajmo što se nalazi na TM disku.
mape

Imamo mapu Backups.backupdb u kojoj imamo podmape s nazivima računala koji se backup-iraju na taj disk. Unutra se nalaze mape s vremenskim oznakama kao nazivima i u njima potpuni sadržaj diska(ova) u trenutku kada je obavljen backup. Obratite pozornost na riječ “potpuni”, jer ako idete otvarati i gledati datoteke i mape u svakoj mapi s vremenskom oznakom, vidjet ćete da je potpuni sadržaj tu i da nisu nikakvi shortcut-ovi, već da su datoteke stvarno tu. No kao što već znamo iz iskustva, TM ne kopira cijeli disk prilikom backup-a, već samo nove i promijenjene datoteke i mape, a i da kopira sve, onda bi diskovi za backup trebali biti 20, 30…. puta veći od diska kojega backup-iramo. 

U čemu je onda trik??
Da bi to saznali trebamo se upoznati s dva UNIX pojma, symbolic links i hard links (upotrebljavat ću eng. nazive da ne bi došlo do nezgodnih prijevoda).
No, i prije toga, moramo se podsjetiti na koji se način datoteke zapisuju na disk. Na slici je prikazan jako pojednostavljen princip:
struktura diska

Negdje na početku diska imamo “tablicu” u kojoj se nalaze imena datoteka i pokazivači na njima pridružene blokove podataka. Znači, ono što mi vidimo kao jednu datoteku u OS-u, se u biti na disk zapisuje u dva dijela, kao pokazivač na podatak i kao sam podatak.. Da se tako ne radi, rad na računalu, praktički, ne bi bio moguć jer bi svaki puta kada bi se trebala, recimo, pročitati neka datoteka morao pretraživati cijeli disk da bi se našla, a ovako se datoteka sa samo pronađe u tablici te se glava diska ciljano uputi na dio diska na kojem je podatak. Također su olakšane operacije preimenovanja, brisanja, premještanja itd. Možete primjetiti razliku prilikom premještanja i kopiranja neke datoteke iz mape u mapu na istom disku. Kada je premještate, dogodi se trenutno, jer je u biti samo premješten unos u “tablici” na neko drugo mjesto, dok se kod kopiranja piše potpuno nova datoteka, i unos u “tablici” i blok podataka na disk. Brisanje se izvodi tako da se samo izbriše unos u “tablici”, te tako ta datoteka više ne postoji, iako će sam podatak ostati na disku sve dok ga nešto ne prebriše, jer je to za OS sada prazan prostor (na tome principu radi većina data recovery programa).
Također, možete vidjeti i princip fragmentacije podataka, tj. kada unos u “tablici” pokazuje na više blokova podataka koji čine jednu datoteku, te prilikom čitanja takve datoteke, glava se diska treba kretati stalno po disku među blokovima, te zbog toga i imamo famoznu defragmentaciju, odnosno mi nemamo :-), jer OS X ima neke druge mehanizme da spriječi fragmentaciju.

Nakon ove dvije digresije, idemo na onu prvotnu.
Symbolic link je, u biti, ono što smo navikli zvati alias ili shortcut. Treba samo primjetiti, da iako imaju istu funkciju, alias i symbolic link u OS X-u nisu iste stvari. Alias koristi isključivo OS X i on je UNIX-u nerazumljiv.
Symbolic link je datoteka čiji je sadržaj pokazivač na unos u “tablici”. Veličina symbolic link-a je zanemariva u odnosu na datoteku na koju pokazuje, jer sadrži samo adresu unosa u “tablici”, što se mjeri u bajtovima. Grafički je puno jasnije:
soft link

Kada se symbolic link izbriše, datoteka ostaje. Kada se datoteka izbriše, symbolic link ostaje, ali ostaju i podaci na disku, jer kao što smo već spomenuli, prilikom brisanja, briše se samo unos u “tablici” . No kada pristupimo symbolic link-u, reći će da datoteka ne postoji. To je zbog toga što symbolic link pokazuje samo na unos u tablici, a ne na sam podatak.
Ako ste pozorno pratili, već lagano možete shvatiti kamo ovo vodi.
Hard link je, dakle, pokazivač na sam podatak. Što to znači? To znači, da je u biti svaki unos u “tablici” (pokazivač) hard link. Sad se sigurno pitate, gdje je kvaka, ovo smo već prošli? Kvaka je u tome, što ih u UNIX-u možete stvoriti koliko god hoćete. Znači možete imati 100 unosa u “tablici” koji će pokazivati na isti blok podataka i svi će OS-u biti jednako ravnopravni tj. svakoga će tretirati kao posebnu datoteku, iako se radi o jednoj datoteci, ne postoji neki kvazi master-slave odnos kao kod symbolic link-a. Možete to jednostavno shvatiti i kao jednu datoteku koja ima više imena.
hard link

Ako se izbriše jedna od tih datoteka, kao što smo već spomenuli, briše se samo unos u “tablici”, odnosno hard link koji je vezan s tim imenom datoteke, ali taj blok podataka neće biti prebrisan sve dok je za njega vezan barem još jedan hard link.
Dakle, došli smo do toga kako TM zapravo održava toliko puno preslika diska(ova) ne zauzimajući prostor koliko bi zapravo trebao.

Ima jedna razlika u implementaciji hard link mehanizma između UNIX-a i OS X-a. Kod UNIX-a je moguće samo hard link-anje datoteka, dok je kod OS X-a specijalno zbog TM-a dodana i mogućnost hard link-anja mapa. Naime, ako recimo, uzmemo System folder u kojem ima oko 60-tak tisuća datoteka i oko 18-tak tisuća mapa i ako ništa nije promijenjeno, opet bi TM morao napraviti tih 18 tisuća mapa i hard link-ati 60 tisuća datoteka, što ne samo da bi vremenski bilo zahtjevno, već bi i imalo utjecaja na popunjenost diska, jer u tome broju, uz backup svakih sat vremena i svaki dan, bila bi osjetna veličina. Uglavnom, jedna ogromna komplikacija koja se riješila mogućnošću hard link-anjem mapa i svela na praktički na jednu operaciju.

Kao što znate, prilikom backup-a, TM kopira samo nove i promijenjene datoteke. A kako zapravo TM zapravo zna što je promijenjeno, a što je ostalo isto?
Treba se vratiti malo u prošlost, do Tiger-a. Jedna od novih tehnologija u Tiger-u je bio Spotlight. Da bi Spotlight bio moguć uveden je /dev/fsevents API. To je API prati sve promjene datoteka i mapa te ih prijavljuje zainteresiranim klijentima. No, taj je API postavljen kao privatan (i to s jako dobrim razlogom, ali nećemo sada još i o tome), te ga je mogao koristiti samo Spotlight. U Leopardu je dodan još jedan framework koji ga može koristiti, FSEvents. FSEvents framework se oslanja na jedan pozadinski proces (daemon) pod nazivom fseventsd koji hvata informacije koje šalje /dev/fsevents te ih zapisuje u log datoteku. No, da zapisuje svaku promjenu koja se dogodi, taj bi log brzo napunio disk, te je zbog toga napravljeno da se zapisuju samo promjene nad mapama. Polovično rješenje, no ipak puno bolje nego da svaki proces/aplikacija ima pristup /dev/fsevents.
Iako je pristup log datoteci koju stvara FSEvents omogućen svima, FSEvents je prvenstveno napravljen da bi ga koristio TM.

Kada TM krene u postupak backup-a, prvo pregleda log u potrazi za promijenjenim mapama, a zatim uspoređuje sadržaj promijenjenih mapa sa sadržajem tih istih mapa prilikom posljednjeg backup-a (kojeg ima pohranjenog na svome disku). Sadržaj koji je promijenjen ili dodan se kopira, dok se ostatak datoteka i mapa hard link-a s posljednjeg backup-a.

Jednostavno, zar ne?


Tagovi: , , , , , ,

 

Komentari:

10 komentara na “U dubinama Time Machine-a”

  1. john_st u 13:01, 09.11.2008.

    Sjajno! Maestralno!! Pače, ingeniozno!!!

  2. igorst u 14:25, 09.11.2008.

    odlican clanak koji savrseno jednostano objasnjava sistem koji je takodjer jednostavan i odlican. vrlo korisno jer mi je otklonio strah: sto ako bacim neke stare backupove?

  3. lukas u 18:20, 09.11.2008.

    nisam imao pojma kako je ovo dobro, uvijek sam mislio da je to jos jedna od izvikanih fičra bez pokrića. Hvala na clanku sa gustom sam ga citao

  4. Vanja T. u 19:14, 09.11.2008.

    Skidam kapu, dobro dođu ovakvi jednostavno napisani članci, sada samo uputim link svakome tko me zapita isto pitanje i ne moram se zamarati!

  5. Filippo u 19:40, 09.11.2008.

    Hvala Šime, sad su mi neke stvari puno jasnije.

  6. Matko Smoljan u 19:46, 09.11.2008.

    Bravo stari, odličan članak!

    A i naučio me o UNIXu nešto šta nisam znao :))

  7. zlatko u 19:58, 09.11.2008.

    Bravo za ovaj izvrstan clanak!

  8. aramic u 22:43, 09.11.2008.

    Nevjerojatno kako si to lijepo objasnio. Šime, hvala i …. naravno, mi bi još :)

  9. Šime Šoić u 13:43, 10.11.2008.

    Hehe, hvala na pohvalama, ali nije ništa to novo, mogu se naći ovakvi članci na netu, samo sam pokušao pojednostavniti maksimalno da svi razumiju :-)

  10. Andrej u 15:50, 10.11.2008.

    Sad kad se čovjek malo zamisli i shvati da hard linkovi postoje otkad je unixa, a varijanta FSevents-a odnosno FAM ( http://oss.sgi.com/projects/fam/faq.html#what_is_fam ) od 1989 da se nitko nije sjetio to dvoje lijepo upakirati i na to staviti vrpcu i ispast frajer. Pravo Kolumbovo jaje. Svaka cast Apple. I naravno Šimi na prosvjetljenju. Sad, iako koristim rsync (+ arrsync.sourceforge.net) za backup ozbiljno ću razmisliti o TM-u.

Ostavi komentar




Pretplati se na odgovore bez komentiranja članka:

Tagcloud:



RSS

Newsletter