Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

XFiles sinhronizacija stabla fajla i unakrsna provera


Šta je to?


XFiles je interaktivno sredstvo za upoređivanje i spajanje jednog stabla fajla s drugim putem mreže. On podržava rad u slobodnoj formi na nekoliko mašina (nema potrebe da se prati koji su fajlovi promenjeni na kojoj mašini). XFiles takođe može da se koristi kao bekap disk<->disk strategija unakrsne provere (delovi diska mogu da se iskvare u bilo kom trenutku, bez jednostavne oznake koji su fajlovi ugroženi). Unakrsno proverite s drugim diskom pre bekapovanja da biste bili sigurni da ne bekapujete iskvarene podatke.

Klijent/server program (GUI na klijentu) prelazi kroz stablo fajla i prijavljuje svaki fajl koji nedostaje na server mašini, koji nedostaje na klijent mašini, ili drugačije. Za svaki takav fajl prikazani su veličina fajla i datum kad je izmenjen i može se dobiti poređenje (koristeći Unix diff). Za fajlove koji nedostaju s jednog stabla, prijavljuju se ‘slično imenovani fajlovi’ na tom stablu. Neusklađeni fajlovi onda mogu da se kopiraju u bilo kom smeru ili da se izbrišu na bilo kojoj mašini.

Stabla fajla ne moraju da budu dostupna putem nfs-a. Kontrolni zbirovi fajlova izračunavaju se paralelno, tako da se u velikoj meri slična stabla mogu uporediti preko linka spore mreže. Klijent i server procesi takođe se mogu obavljati na istoj mašini.

Pogledajte temu "Kako se XFiles razlikuje od Rsync” ispod za više informacija.

Snimak ekrana

Zahtevi


Xfiles 1.4 zahteva Java jdk1.2 ili noviju verziju. Da biste videli da li imate instaliranu Javu, ukucajte java-verzija, što bi trebalo da odgovori ovako nešto:

> java -version
java version "1.3.0"

Postoje razne besplatne implementacije jdk1.2 i novijih verzija. www.javalobby.org ima link za neke implementacije. Verzije The Sun Java su na java.sun.com pod "proizvodi i API". vvv.blackdovn.org ima verzije koje su bolje podešene za linux, iako su njihova poboljšanja takođe integrisana u najnovije Sun verzije. IBM takođe ima besplatnu JDK1.3 implementaciju s dopunskom virtuelnom mašinom visokih performansi.

Licenca

Daunloud


Pročitajte prvo fajl LICENSE.txt. XFiles je objavljen pod GPL, ali opciono koristi jpython za skripting; jpython ima sopstvenu licencu otvorenog izvora, pogledajte LICENSE.txt.

Daunloudujte najnovije xfilesBinary ili xfilesSource ili arhivu.

Po želji, daunloudujte jpython.jar ako želite da uradite skripting (vidite skripting odeljak ispod). [Napomena: u netscape-u daunloudujte ovo desnim klikom na link, ili tasterom shift 1. Jednostavni klik na link uzrokuje da se fajl čita u netscape prozoru, a ponekad izaziva “zamrzavanje” pretraživača ako vam je uključena Java]. jpython.jar takođe je potreban da se iznova kompajlira izvor, iako će male promene u izvoru dozvoliti da se kompajlira i bez njega. jpython.jar nije potreban ako ne želite da skriptujete).

Daunloudujte nativeFile arhivu samo ako želite detekciju izvornog Unix linka (vidite diskusiju na kraju). Ovo vam verovatno ne treba.

Izvor i binarne arhive za starije verzije

Predgovor instaliranju i pokretanju


Java je često loše integrisana s osnovnim operativnim sistemom. Ako je java za vas novost, obavezno pročitajte uputstva ispod - još uvek ne postoji sporazum gde i kako java programi (ni sama Java) treba da budu instalirani, tako da instalacija koja je navedena u nastavku nije toliko napredna kao Linux rpm ili slično. Pojedinačni koraci su, međutim, jednostavni.

Ako već nemate Javu moraćete da izaberete neku lokaciju za instaliranje, kao što je /usr/local/java; odgovaraće bilo koji direktorijum. Slično tome, XFiles program može da živi bilo gde. Ako sledite instalaciju ispod, moraćete da pokrene program iz direktorijuma gde je i smešten (ovo mu ne ograničava funkciju). Očigledne su promene ljuska-fajlova da bi on mogao da se pokrene iz bilo kojeg direktorijuma.

Program i ova dokumentacija pozivaju se na klijent i server mašine i direktorijume. Oni su zamenjivi - server se poziva samo na mašinu na kojoj server radi. (vidite dole).

Binarna Instalacija


I za klijent i za server mašinu, uradite sledeće korake:

Instalacija sa izvora


(Uputstva koja slede su za Unix/Linux):

Podešavanje za pokretanje

Upotreba


Kada se pojavi GUI, izaberite neki direktorijum i pritisnite dugme start.

Klijent prikazuje stablo klijent fajla pri podizanju što vam omogućava da izaberete pod-stablo navedenog korena ako to želite. Ako ne izaberete ništa, celo stablo će se uporediti kada pritisnete dugme start.

Da bi vam uštedeo vreme, XFiles prvo skenira celo (pod)stablo pre nego što prijavi bilo kakvu razlike (ovo može da potraje); sve razlike se onda konsekutivno prijavljuju.

Posle sinhronizovanja jednog direktorijuma, možete da izaberete drugi u GUI i ponovo pritisnite start. Međutim, trenutno GUI stablo fajla ne apdejtuje da odrazi brisanja u ranijim pokretanjima. (vidi odeljak “Šta treba da se uradi”).

Ovo su opcione naredbe komandne linije: XFiles piše fajl XFILES.LOG navodeći spisak izabranih akcija.

Skripting


Odabir fajla i interakcija s kontrolnim sistemom kao što je RCS mogu se obavljati skriptingom pomoću jpython-a. Da biste omogućili skripting, daunloudujte fajl jpython.jar i smestite ga u klijent i server pokretačke direktorijume. Zatim napravite fajl xfiles.py koji takođe mora da se kopira i u klijent i server pokretačke direktorijume.

xfiles.py može definisati sledeće funkcije: Nije potrebno definisati sve ove funkcije, međutim, ako je definisana, funkcija treba da bude tačna - ako poziv funkcije generiše grešku XFiles će prestati. Uzorak fajl xfiles.py sadržan je u distribuciji i naveden na kraju ovog dokumenta.

Najčešća pitanja: Kako se XFiles razlikuje od Rsync?


Rsync radi automatski i pretpostavlja da je izvorni direktorijum tačan. Ako taj disk ima neku korupciju, kvar, dobri fajlovi u bekap direktorijumu mogu da budu zamenjeni oštećenim fajlovima sa izvornog diska. Sličan scenario dešava se kada sačuvate fajl koji je slučajno nekako izmenjen. Opet, noviji fajl nije onaj koji je poželjan.

XFiles takođe omogućava relativno nestrukturirani rad na nekoliko mesta, bez potrebe da se o jednoj lokaciji misli kao o "masteru" - u ovom slučaju, svaki direktorijum može imati fajlove koji su zastareli, kao i kao one koji bi trebalo da se reprodukuju. Automatizovani algoritam dupliraće fajlove koji treba da se izbrišu, što rezultira dodatnim poslom kasnije. XFiles vas pita da li želite da kopirate (i u kom pravcu), i daje vam mogućnost brisanja. U slučaju tekstualnih fajlova takođe daje "diff" (na unix-u) da pomogne u odluci

U slučaju gde oba fajla imaju poželjne delove, fajl se mora ručno spojiti; XFiles ovde ne pomaže (osim da identifikuje situaciju). Dodavanje nečega kao što je Unix xdiff vizuelno spajanje bio bi lep dodatak.

U korist rsync-a, rsync je mnogo brži. (Mada, ako dodate -c da zahtevate kontrolne zbirove na sve fajlove, rsync postaje mnogo sporiji)

Autor


Primarni autor: Džej Pi Luis scribblethink.org
Saradnici: Piter Gadjokov, Volfgang Lugmair, Den Šmit

Molimo vas da šaljete mejlove o bilo kakvim problemima, uspesima, popravkama i strahovima na: zilla@computer.org
Pošaljite mejl s temom: XFiles da biste bili obavešteni o novostima

Šta treba da se uradi

Dodatak: Dnevnik verzija

Dodatak: Uzorak xfiles.py skripte



Sledeći primer skripte implementira ove funkcije: Iako je jpython sasvim kompatibilan s regularnim python-om, ovaj fajl je napisan korišćenjem mešavine python i java poziva (na primer, java string funkcije koriste se umesto python string.split rutine). To je urađeno da se ograniči zavisnost o jpython-u na jednan jpython.jar fajl .

import java
from java.io import File
import java.lang.Runtime
runtime = java.lang.Runtime.getRuntime()

# ignore files that end with these strings
skipextensions = ['RCS', ',v', '.o', '.so', '.a', '.class', '.jar']

# grab the command line arguments.  
# You could pass in the skipextensions here for example.
def setup(args):
  print 'setup got args:'
  for arg in args:
    print arg

# return 1 if xfiles should visit this path, else 0
#
def pathFilter(path):
  print 'pathFilter(%s)' % path
  if path[len(path)-1] == '~':		# emacs backup file
    return 0			
  if path == 'so_locations':
    return 0
  spath = java.lang.String(path)
  for ext in skipextensions:
    if spath.endsWith(ext):
      return 0
  return 1

# called before copying over a file
# (check out from RCS if appropriate)
#
def preCopy(path):
  name = filename(path)
  spath = filedir(path)
  spath = spath + '/RCS/'
  print 'name = %s' % name
  if exists(spath):			# RCS/ exists
    spath = spath + name + ',v'
    print 'spath = %s' % spath
    if exists(spath):			# RCS/file,v exists
      docmd('co -l -f %s' % path)


# called after copying over a file
# (check in to RCS if appropriate)
#
def postCopy(path):
  name = filename(path)
  spath = filedir(path)
  spath = spath + '/RCS/'
  print 'name = %s' % name
  if exists(spath):			# RCS/ exists
    spath = spath + name + ',v'
    print 'spath = %s' % spath
    if exists(spath):			# RCS/file,v exists
      docmd('ci -u -f -mXfiles_copy_checkin %s' % path)

# helper commands
def docmd(cmd):
  if 1:
    print cmd
  pid = runtime.exec_(cmd)
  pid.waitFor()

def filedir(path):
    result = File(path).getParent()
    if not result:
        if isabs(path):
            result = path # Must be root
        else:
            result = ""
    return result

def filename(path):
    return File(path).getName()

def exists(path):
    return File(path).exists()

def isabs(path):
    return File(path).isAbsolute()
__________________________________________________________________________________________________________________________

Dodatak: Link/Alijas detekcija


Ovaj odlomak je u velikoj meri zastareo, jer se čini da detekcija Java linka adekvatno funkcioniše.

Pošto XFiles prelazi kroz stablo direktorijuma, on mora da bude u stanju da pravi razliku između "pravih" fajlova i linkova (alijasi), kako bi se izbegla beskonačna petlju u slučaju gde link ukazuje na direktorijum iznad sebe. Postoje dva pristupa ovome, a vi treba da izabere jedan koji će koristiti: XFiles će pozvati izvornu funkciju ako ona postoji u pokretačkom direktorijumu. Instalacija sa izvornom funkcijom je malo više posla, i još uvek ne postoji za ne-Unix operativne sisteme.

Za većinu svrha, verovatno će biti u redu da se koristi ugrađeni kod. Pročitajte dodatak Linkovi/Alijasi/Prečice u Javi za više detalja o ovom pitanju.

Vodič za rešavanje problema

Instalacija sa izvora, upotrebom detekcije izvornog linka





Published (Last edited): 10-10-2012 , source: http://www.idiom.com/~zilla/xfiles.html