Fórum Root.cz

Hlavní témata => Software => Téma založeno: doga312 05. 03. 2017, 15:26:00

Název: Skript pro zálohu pomocí rsync
Přispěvatel: 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
Kód: [Vybrat]
    #!/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
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: # 05. 03. 2017, 15:51:53
Co myslis pod pojmem "aby pracoval i s casem"?

Toto?

Kód: [Vybrat]
$ date +%F-%k-%M
2017-03-05-15-50
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: Franta <xkucf03/> 05. 03. 2017, 16:10:29
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:

Kód: [Vybrat]
$ date -Iminutes
2017-03-05T16:08+01:00

# případně:
$ date --iso-8601=minutes
2017-03-05T16:08+01:00

Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: doga312 05. 03. 2017, 19:02:07
Ahoj,
se samotným datem ani časem problém není.
Kód: [Vybrat]
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


Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: Franta <xkucf03/> 05. 03. 2017, 19:33:09
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ě.
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: doga312 05. 03. 2017, 20:06:45
Dík, asi tuším jak to myslíš, teď to jen vymyslet, přece jsem jenom skriptí vykradač :D
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: JardaP . 05. 03. 2017, 20:19:01
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?
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: rsnapshot 05. 03. 2017, 20:23:17
Použij rsnapshot, Luku...  :-)
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: doga312 05. 03. 2017, 20:34:03
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
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: Franta <xkucf03/> 05. 03. 2017, 20:35:56
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.
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: # 05. 03. 2017, 20:38:54
Jak tu jiz zaznelo, proste na konci skriptu updatni link na aktualni zalohu a mas to :)
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: doga312 05. 03. 2017, 20:44:23
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
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: # 05. 03. 2017, 21:39:56
Pokud chapu co hledas, tak te zajima

ln -s teda vytvoreni symbolickyho linku, proste udelas vzdy link posledni zalohy ukazujici na backup/latest

viz
Kód: [Vybrat]
man ls
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: JardaP . 05. 03. 2017, 21:57:25
Nejak nechapu, k cemu je link na posledni zalohu. To ma byt pro blbe, kteri neumi vybrat podle datumu?
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: doga312 05. 03. 2017, 23:49:10
Pokud chapu co hledas, tak te zajima

ln -s teda vytvoreni symbolickyho linku, proste udelas vzdy link posledni zalohy ukazujici na backup/latest

viz
Kód: [Vybrat]
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?
Kód: [Vybrat]
#!/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
Název: Re:Skript pro zalohu pomocí rsync
Přispěvatel: doga312 06. 03. 2017, 01:10:34
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
Kód: [Vybrat]
#!/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
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: doga312 06. 03. 2017, 10:50:30
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í?
Kód: [Vybrat]
ls /home/doga/pokus6 -t1 | grep backup_ | head -n 1Dík
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: trubicoid2 06. 03. 2017, 11:06:26
no proc to nefunguje nevim, ale muzes se vyhnout tomu grep

Kód: [Vybrat]
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
Kód: [Vybrat]
ls -sf tak ono to ten stary link prepise
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: Ondra Satai Nekola 06. 03. 2017, 11:10:59
Nemohu se zbavit dojmu, ze se pokousis pracne vyrobit neco, co bys mel trebas s borgem zadarmo a hotove...
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: doga312 06. 03. 2017, 13:49:50
no proc to nefunguje nevim, ale muzes se vyhnout tomu grep

Kód: [Vybrat]
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
Kód: [Vybrat]
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 ;)
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: doga312 06. 03. 2017, 14:38:52
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.
Kód: [Vybrat]
/home/doga/pokus6/`ls /home/doga/pokus6 -1 | grep backup_ | head -n 1
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: trubicoid2 06. 03. 2017, 15:41:59
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?
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: doga312 06. 03. 2017, 17:22:08
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.
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: JardaP . 06. 03. 2017, 21:01:33
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.
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: JardaH 06. 03. 2017, 21:31:23
Jako inspiraci i s vysvetlenim doporucuji http://www.mikerubel.org/computers/rsync_snapshots/.  Je tam resena i rotace zaloh a opravdu to funguje
Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: doga312 07. 03. 2017, 23:51:31
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 ;)

Název: Re:Skript pro zálohu pomocí rsync
Přispěvatel: nobody(ten pravej) 08. 03. 2017, 00:47:36
ln -sf musi prepsat link vzdy, takze pokud se ti tak nedelo mas problem jinde ;)

script se da zabit napr. takto:
Kód: [Vybrat]
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...