«

»

stínové kopie alá Microsoft

Potrebovali jsme zajistit spravu verzi dokumentu a jejich zalohovani pred nechtenym smazanim ci prepsanim.
Ve windows se tato funkce jmenuje stinova kopie svazku (volume shadow copy). Original Microsofti system ma vsak slabinu v tom, ze lze uchovat pouze historii 64 (u slozek sdilenych) resp. 512 snimku, a to at jiz byl soubor zmenen, ci nikoli. V praxi to tedy znamena, ze nastavime – li snimkovani po 1h uchova se nam historie pouze necele 3 dny nazpet.

Dalsi moznosti od Ms. je pouziti sharepoint serveru, kde je upload mozno provadet pres Webdav. Integrovany Webdav klient je ve Windows exploreru (tzn soubor – odeslat do…, pripadne ctrl+c, ctrl+v) a dale jeste v original Ms Office.
Bohuzel takovehoto klienta nenajdete nativne v aplikacich 3. stran, coz nam nevyhovovalo, nebot pak nelze jednoduse rovnou ukladat do sharepointu tak, aby fungovalo verzovani – a platit 5000 USD za pridavny filtr do sharepointu je pro rozumne premyslejici rovnez nesmysl. i kdyz pak k timu navic jeste obdrzite indexovani a vyhledavani v obsahu

Proto jsem se rozhodl provadet zalohovani a verzovani na linuxove masine.
K tomu lze pouzit SVN + Webdav plugin do Apache (a obdrzime sharepoint-like zpusob) je to vsak ponekud krkolomna cesta.
Elegantni zpusob je pouzit sambu a zalohovaci skripty s vyuzitim nastroje rsync .

Nasdilime v /etc/samba/smb.conf slozku pro sdileni i zapis, jako pracovni adresar, nazveme ji working:

[working]
path = /var/raid/vykresy
comment = sem ukladat vsechny vykresy
browseable = yes
public = yes
writeable = yes
guest ok = yes
directory mask = 0777
create mask = 0666

Dale nastavime slozku older_versions jen pro cteni – tam pozdeji najdeme historicke verze souboru

[older_versions]
comment = jen pro cteni – stare verze, zalohy
path = /var/raid/older_versions
browseable = yes
public = yes
writeable = no
readonly = yes
guest ok = yes

a zalohovaci skripty nastavime nejlepe v /etc/cron.hourly/zalohy.cron:

#!/bin/bash
rsync -Cabxu –suffix=.`date +%F_%H-%M`~ –exclude-from=”/etc/cron.hourly/exclude.rsync” /var/raid/vykresy /var/raid/older_versions
find /var/raid/older_versions -name *~ | awk -F. ‘{print “mv \””$F”\” \””$F”.”$(NF-1)”\””}’|sh

v /etc/cron.hourly/exclude.rsync uvedeme masky souboru, jez se nebudou zalohovat (napr. Thumbs.db, *.bak, *~ atd)
prvni radek naseho skriptu provede zalohovani, s tim, ze do nazvu stare verze souboru prida priponu generovanou dle aktualniho data a casu (napr. verze souboru soubor.doc se budou jmenovat: soubor.doc.27-04-2009_16-00~ ), a misto ni ulozi novou verzi.

druhy radek jeste projede takto vsechny nove zalohovane soubory (vyhledava je podle znaku ~ na konci) a prida do nazvu souboru jeste jednou priponu nakonec pro snazsi pouziti s windows klienty (tzn. soubor soubor.doc.27-04-2009_16-00~ prejmenuje na soubor.doc.27-04-2009_16-00~.doc). Vlastni zpracovani stringu provadi awk, separator poli je . , vysledek se posila rourou do sh, ktery vykona prikaz mv…..
Pro spravnou funkcnost se soubory s mezerami v nazvu jsme jeste vsude na zacatek a konec stringu s nazvy souboru doplnili uvozovky.

Vysledkem je, ze ve sdilenem adresari working mame aktualni verze a muzeme je dle libosti menit a mazat.
v adresari older_versions mame take v podstate aktualni verze (s maximalni prodlevou 1h), a navic ty historicke, jez maji shodny nazev s originalem, jenom mezi jmenem a priponou maji textovy retezec odpovidajici dobe zalohovani. Pokud nejaky soubor v adresari working omylem smazeme, v older_versions zustava jeho kopie.