Fórum Root.cz
Hlavní témata => Software => Téma založeno: doga312 05. 03. 2017, 15:26:00
-
Ahoj,
tak jsem se přes řadu zálohovacích programů dostal až k rsync.
Tady je jeden jednoduchý skript pro tvorbu snapshotů, který mi vyhovuje ale pracuje jen s datem.
Prosím o radu , jak ho doplnit, aby pracoval i časem. Hodiny a minuty stačí.
Děkuji
#!/bin/bash
#Backup Script
#Todays date in ISO-8601 format:
DAY0=`date -I`
#Yesterdays date in ISO-8601 format:
DAY1=`date -I -d "1 day ago"`
#The source directory:
SRC="/home/doga/pokus1"
#The target directory:
TRG="/home/doga/pokus2/$DAY0"
#The link destination directory:
LNK="/home/doga/pokus2/$DAY1"
#The rsync options:
OPT="-avh --delete --link-dest=$LNK"
#Execute the backup
rsync $OPT $SRC $TRG
#29 days ago in ISO-8601 format
DAY29=`date -I -d "29 days ago"`
#Delete the backup from 29 days ago, if it exists
if [ -d /home/doga/pokus2/$DAY29 ]
then
rm /home/doga/pokus2/$DAY29
fi
-
Co myslis pod pojmem "aby pracoval i s casem"?
Toto?
$ date +%F-%k-%M
2017-03-05-15-50
-
tak jsem se přes řadu zálohovacích programů dostal až k rsync.
Gratuluji :-) taky jsem došel k tomu, že je lepší si napsat skript na pár řádek než používat nějaké složité zálohovací nástroje. Takže používám buď rsync nebo Btrfs snapshoty.
Prosím o radu , jak ho doplnit, aby pracoval i časem. Hodiny a minuty stačí.
Tohle je spíš otázka na date než rsync. Stačí kouknout do manuálové stránky (man date) a jen připsat jedno slovo:
$ date -Iminutes
2017-03-05T16:08+01:00
# případně:
$ date --iso-8601=minutes
2017-03-05T16:08+01:00
-
Ahoj,
se samotným datem ani časem problém není.
DAY0=`date +%F-%k-%M-%S`
Jde mi o nastavení linku. Když použiji jiný formát času,z důvodu více záloh za den, třeba i ručně spuštěné, jak vytvořím link na poslední zálohu?
Dík
-
Můžeš ho vytvořit během zálohování, když ho máš ještě v té proměnné, ne? Odkaz vždycky smažeš a vytvoříš aktuální. To bude nejjednodušší – jinak bys musel seřadit soubory (sort) a vzít ten poslední (tail), kdybys chtěl odkaz vytvářet až dodatečně.
-
Dík, asi tuším jak to myslíš, teď to jen vymyslet, přece jsem jenom skriptí vykradač :D
-
Tedy jestli to spravne pochopuju, tak delate pro kazdy backup adresar a do nej rsync vsechno nasypete. Jste si jist, ze by vam vic nevyhovoval rdiff-backup, ktery by udelal totez, ale zabralo by to mene mista?
-
Použij rsnapshot, Luku... :-)
-
Chci aby záloha byla jednoduše "viditelná" a přehledná dle mé struktury. Tím padá rdiff-backup. To co nabízí rsnapshot jsem si už podobně udělal přes unison ale to jsem opustil, protože má vlastní strukturu verzování souborů. Chci jednoduché a čisté řešení s rsyncem, jen poladit ten skriptík :D
-
Tedy jestli to spravne pochopuju, tak delate pro kazdy backup adresar a do nej rsync vsechno nasypete. Jste si jist, ze by vam vic nevyhovoval rdiff-backup, ktery by udelal totez, ale zabralo by to mene mista?
rdiff-backup je dobrý, používal jsem ho, ale pro větší objemy dat (stovky GB a spousty souborů) už to bylo pomalé – oproti tomu Btrfs má minimální režii. Nicméně rdiff-backup má svoje využití, pracuje nad obyčejnými adresáři a nepotřebuje roota ani zvláštní FS.
-
Jak tu jiz zaznelo, proste na konci skriptu updatni link na aktualni zalohu a mas to :)
-
A ten link musím schovat někam do souboru, do příštího spuštění skriptu? Jsem v tomhle opravdu nováček. Potřeboval bych nějaký reálný příklad. Dík
-
Pokud chapu co hledas, tak te zajima
ln -s teda vytvoreni symbolickyho linku, proste udelas vzdy link posledni zalohy ukazujici na backup/latest
viz
man ls
-
Nejak nechapu, k cemu je link na posledni zalohu. To ma byt pro blbe, kteri neumi vybrat podle datumu?
-
Pokud chapu co hledas, tak te zajima
ln -s teda vytvoreni symbolickyho linku, proste udelas vzdy link posledni zalohy ukazujici na backup/latest
viz
man ls
Ahoj, díky, to jsem potřeboval pro další skriptí vykrádaní ;)
Můžete mi pomoct, k čemu je ve skriptu ta poslední podmínka, tipuji k promazávání starých záloh .... že to vypíše počet položek v cíli a dál?
#!/bin/bash
#Datum
DATE=`date +%F-%k-%M-%S`
mkdir /home/doga/pokus6/backup_$DATE/
#The source directory:
SRC="/home/doga/pokus1"
#The target directory:
TRG="/home/doga/pokus6/backup_$DATE"
#The link destination directory:
LNK="/home/doga/pokus6/current/"
#The rsync options:
OPT="-avh --delete --link-dest=$LNK"
#Execute the backup
rsync $OPT $SRC $TRG
rm -rf /home/doga/pokus6/current
ln -s /home/doga/pokus6/backup_$DATE /home/doga/pokus6/current
if [ `ls /home/doga/pokus6 -1 | wc -l` -gt 180 ]; then
rm -rf /home/doga/pokus6/`ls /home/doga/pokus6 -t1 | grep backup_ | head -n 1`
fi
-
haha, tak jsem to lousknul. V podmínce jsem musel ještě u ls doplnit parametr -r, protože mi to umazávalo nejnovější zálohu místo nejstarší.
Ještě dodělat report po mailu a je to :D
#!/bin/bash
#Datum
DATE=`date "+%Y.%m.%d_%H:%M:%S"`
#Vytvořčení složky pro zálohu
mkdir /home/doga/pokus6/backup_$DATE/
#Zdroj
SRC="/home/doga/pokus1"
#Cíl
TRG="/home/doga/pokus6/backup_$DATE"
#Link pro rsync
LNK="/home/doga/pokus6/current/"
#Parametry rsync
OPT="-avh --delete --link-dest=$LNK"
#Provedení zálohy
rsync $OPT $SRC $TRG
#Smazaní starého a vytvoření nového symlinku pro link nadcházející zálohy
rm -rf /home/doga/pokus6/current
ln -s /home/doga/pokus6/backup_$DATE /home/doga/pokus6/current
#Když je v cíli více jak deset položek, vymaže se ta nejstarší
if [ `ls /home/doga/pokus6 -1 | wc -l` -gt 10 ]; then
rm -rf /home/doga/pokus6/`ls /home/doga/pokus6 -t1 -r| grep backup_ | head -n 1`
fi
-
HA, tak radost byla předčasná. Po nějakém čase i s parametrem -r začal mazat zálohy z prostřed a pak zase nejnovější.
Bez parametru -r to teď funguje ale evidentně řazení souboru nefunguje správně.
Nějaký nápad jak upravit výběr k mazání?
ls /home/doga/pokus6 -t1 | grep backup_ | head -n 1
Dík
-
no proc to nefunguje nevim, ale muzes se vyhnout tomu grep
ls /home/doga/pokus6/backup_* -t1 | head -n 1
taky bych asi nemazal ten link current s parametrem -rf, staci bez nej
nebo taky kdyz das ls -sf
tak ono to ten stary link prepise
-
Nemohu se zbavit dojmu, ze se pokousis pracne vyrobit neco, co bys mel trebas s borgem zadarmo a hotove...
-
no proc to nefunguje nevim, ale muzes se vyhnout tomu grep
ls /home/doga/pokus6/backup_* -t1 | head -n 1
taky bych asi nemazal ten link current s parametrem -rf, staci bez nej
nebo taky kdyz das ls -sf
tak ono to ten stary link prepise
Ahoj, bez toho grep to nefunguje. Vrací to hodnotu s dvojtečkou.
ln -sf trochu blbo ale pak se to chytlo :D dík
Edit: už to vidím, asi tam máš překlep(ls-sf).
Nemohu se zbavit dojmu, ze se pokousis pracne vyrobit neco, co bys mel trebas s borgem zadarmo a hotove...
Mám teď čas a po vyzkoušení pěti aplikací jsem si řekl, že se něčemu přiučím ale na Borg kouknu. Dík za tip ;)
-
Dělal to parametr -t. Nevím jestli je to díky hardlinkům ale vytvořené složky záloh mají nereálné časy změn.
Když dodržím svoji strukturu, měl by u ls stačit abecední výpis.
/home/doga/pokus6/`ls /home/doga/pokus6 -1 | grep backup_ | head -n 1
-
hodnotu s dvojteckou nechapu, vsak mas dvojtecku v nazvu, ne?
ln -sf jasne, moje chyba
a co to tam sachujes s tema hardlinkama? to je kvuli setreni mistem? neni tedy lepsi btrfs?
-
Mazaní už funguje, díky za tipy.
Jo jo, šetřím místem,zálohuji 1,7TB RAWů a JPGů a chci k tomu i nějakou historii zpátky.
Linuxu se věnuji aktivně rok a půl, a je to boží a je toho móóóóc :D, a teď jsem objevil linky v rsyncu a skripty :D
Takže si nechám btrfs na příště ale samozřejmě díky za radu.
-
No a ted byste se mohl znovu kouknout na rdiff-backup a k nemu rdiff-backup-fs. Jedinou nevyhodu vidim v jiste pomalosti rdiff-backup ve srovnani s rsyncem. Aspon mi pripada. Ale otazka je, jestli rsync s tim vasim skriptem okolo je rychlejsi.
-
Jako inspiraci i s vysvetlenim doporucuji http://www.mikerubel.org/computers/rsync_snapshots/. Je tam resena i rotace zaloh a opravdu to funguje
-
Ahoj,
tak vylepšovák pomocí ln -sf (přepsaní stávajícího linku) nevyšel, tak jsem se vrátil k smazat/vytvořit.
Ne vždy se link přepíše, což je docela na prd, když se dají do pohybu 2TB, místo 10GB.
A to mě přivádí k otázce.
Jak se dá zabít spuštěný skript, nenašel jsem nic co by fungovalo.
Dík za pomoc ;)
-
ln -sf musi prepsat link vzdy, takze pokud se ti tak nedelo mas problem jinde ;)
script se da zabit napr. takto:
kill $(ps aux|grep "jm[e]noscriptu" | awk '{print $2}')
duvod proc je cast jmena scriptu za grep v hranatejch je ten, aby ve vysledku grep nebyl zobrazen radek procesu toho grep...