Sziasztok!
Első körben elvi szinten kérdeznélek titeket, mire is jó az rsync?
Meg nem mondom, hogy hol, de szerintem több helyen is hallottam/olvastam azt, hogy csak a "változást viszi át".
Rosszul értelmezem ezt, amikor arra gondolok, ha van egy 100MB-os fájlom, melyben megváltozik 4 byte, akkor csak a 4 byte változás megy át? Feltételezve persze, hogy már "odaát" van az egyel régebbi változata az adott fájlnak.
Egyszer próbálkoztam ezzel, Windows alatt, de már nincs meg a gép, pontos emlékek sincsenek. Ott egyik partícióról a másikra játszottam egy CD ISO fájllal, rsync-kel áttoltam a "túloldalra", belenyúltam notepad-dal, átírtam benne egy-két bájtot, majd újra ráengedtem az rsyncet. Néhány mp. alatt végzett, nem vitte át újra a CD-nyi méretet.
Most viszont sehogy sem tudom ezt reprodukálni.
Tény, hogy nem ISO fájlba nyúltam msot bele. Van két rar fájlom, ugyanaz a nevük, egyikben egyel több állomány van. Ezeket másolgattam felváltva egy forrás könyvtárba, majd engedtem rá az rsync-et, ami szinkronizálta a cél partíción levő könyvtárba. Mindig átmásolta a teljes fájlt, ha cseréltem.
Amúgy tgz fájlok szinkronizálásához kellene a dolog. Egy-egy ilyen állomány lehet 2...10GB, a benne levő változás pedig általában néhány kb-nyi. Így gondolom értitek, miért szeretném, ha csak a változás menne át, nem pedig minden alkalommal 10GB.
Szóval mit tudtok erről a dologról, tudna ilyet az rsync?
- 7241 megtekintés
Hozzászólások
az rsync (rdiff) delta algoritmusa nagy valószínűséggel észreveszi, ha egy fájlban módosítasz pár bájtot/kilobájtot, és akkor elég csak a differenciát átmásolni.
egy tar/gzip/rar fájlnak azonban kb. semmi köze sem lesz az eredetihez, ha módosítasz a tartalmán...
- A hozzászóláshoz be kell jelentkezni
Az rsync nem pusztán bitről-bitre nézi meg, mi van? - nem tudom, kérdezem. Gondolod, hogy fájl specifikus lenne a dolog? Ha egy mpg, mp3, stb fájlom lenne, ami mondjuk 5 mp-el rövidebb, mint az eredeti, akkor azzal mit kezdene vajon?
- A hozzászóláshoz be kell jelentkezni
A tömörítéseknél az a gond, hogy egy általad kicsinek gonolt változás valószínűleg a teljes fájlt megváltoztatja. Ezért másol az rsync mindent.
- A hozzászóláshoz be kell jelentkezni
+1, ha a változás jelentős, akkor nem sz@rozik a blokkonkénti hash kreálással meg küldözgetéssel, hanem áttolja az egész fájlt, nem pazarolva a CPU-t
- A hozzászóláshoz be kell jelentkezni
Szerintem, de ha tévedek, majd kijavítanak, az rsync csak azt veszi észre, hogy változott a fájl és ekkor átmásolja a teljes fájlt. Az rsync-re épülő rdiff illetve rdiff-backup tudja azt, hogy csak a különbséget patch-ként átmásolja.
- A hozzászóláshoz be kell jelentkezni
Az rsync is tud különbséget másolni. Tipikus példa: megszakadt scp-t szoktam rsync-kel befejezni. Egyébként még biztos trükköz, mert a teljesen egyező fájlokat el sem szokta kezdeni átnézni, gondolom timestampet és méretet néz.
- A hozzászóláshoz be kell jelentkezni
részenként hasonlítja össze a két fájl-t, mindkét oldalon megcsinálja az aktuális fájl blokk-ra a hash-t, és ha egyezik, akkor azt a részt nem másolja, és folytatja a következővel.
beállítható hogy méret és dátum ellenőrzés legyen-e, vagy teljes adat.
- A hozzászóláshoz be kell jelentkezni
.tgz-khez pont jó, először tar-t kell csinálnod, utána gzip-et ráereszteni, de --rsyncable kapcsolóval.
ezen kívül ahogy előttem is írták, más tömörített anyagot már hiába hasonlítja, ott mindig át fogja tolni az egészet.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
ezt jo tudni
Tyrael
- A hozzászóláshoz be kell jelentkezni
báze, van ilyen opciója a gzipnek? hogy miket nem tud a tudomány manapság :)
(kb. akkor néztem meg először és utoljára a gzip manualját, amikor elkezdtem rá átszokni UNIX compress-ről, kb. 15 évvel ezelőtt :P )
akkor most már csak a pigz-nek kéne implementálni ezt az opciót...
- A hozzászóláshoz be kell jelentkezni
akkor már lbzip2 talán? ott blokk-onként tömörít, viszont hogy mekkora blokkokban vagy hogy állítható-e, nem tudom, ki kell próbálni.
- A hozzászóláshoz be kell jelentkezni
man gzip (on FreeBSD) :
This implementation of gzip was ported based on the NetBSD gzip, and
first appeared in FreeBSD 7.0.
És mondanom sem kell, nincs benne rsync-es opció :-) illetve hát :-(
- A hozzászóláshoz be kell jelentkezni
Ubin (deszkatop) van rsync opció. Sajna, FBSD82-n s/nincs. :(
- A hozzászóláshoz be kell jelentkezni
Nem része a patch sem a gzip-nek, sem a zlib-nek. Kering a neten, és minden értelmes disztrib berakja.
- A hozzászóláshoz be kell jelentkezni
Köszi az info-t
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm mindenkinek, megoldottam. Log69 írta le a lényeget, --rsyncable kapcsolóval érdekes, működik a dolog.
Eddig egy parancs által készült a tgz, most további kettőre van szükség, viszont szépen megeszi az rsync, azt csinálja amit kell, csak ajánlani tudom minden erre tévedőnek!
Érdekes amúgy, Debian Lenny az op.rendszer, manjában egy szó nem esik erről a kapcsolóról. Sőt, ha elgépelem, nem is szól érte, azaz simán legyártja a tgz fájlt mindkét esetben:
gzip -c --rsyncable valami.tar > valami.tgz
gzip -c --rsyncabl valami.tar > valami.tgz
Azt hittem, nem is megy, viszont a helyes kapcsolóval, illetve a nélkül készült gz fájlok méretében van különbség (nekem 0,6%-al nagyobb az rsync-es móddal készült) és persze élesben tesztelve az rsync-kel szépen látszik, hogy a forgalmazott byte-ok mérete a változás körüli mérettel egyenlő.
- A hozzászóláshoz be kell jelentkezni
igen, az rsync kapcsolóval mindenképpen nagyobb lehet hangyányit, mert ugye itt külön blokkokat tömörít össze, nem egyben az egészet, ahol az algoritmusnak nagyobb esélye lenne a jobb tömörítésre.
azért pigz-et és lbzip2-t is meg akarom nézni ilyen szempontból, ha jó rsync-hez, megírom.
- A hozzászóláshoz be kell jelentkezni
leteszteltem, íme az eredmény:
dd if=/dev/urandom of=out bs=1M count=100
cp out in
hexedit in
# valahol 1 byte megvaltoztatas es mentes
rsync -v --progress out masik:
rsync -v --progress in masik:out
rsync -v --progress out.gz masik:
rsync -v --progress in.gz masik:out.gz
stb.
kétszer csináltam meg minden esetben a tesztet, két külön adattal.
speedup is 473.47 / 852.68 (tömörítetlen)
speedup is 28.62 / 102.69 (lbzip2)
speedup is 367.02 / 747.07 (gzip --rsyncable)
speedup is 413.69 / 757.04 (pigz)
wifiről csináltam, azért lehet ekkora a szórás.
a konklúzióm: gzip --rsyncable és pigz is megfelelő az rsync-es tömörítéshez. lbzip2-nél úgy néz ki a blokkok mérete nagy, -1 -es kapcsoló kisebb blokk méretet ad, ott valszeg jobb az arány.
kieg.:
cp out in
pigz in
bsdiff out in.gz diff
ls -ltrh
-rw-r--r-- 1 andras andras 100M Jan 31 17:10 out
-rw-r--r-- 1 andras andras 101M Jan 31 17:10 in.gz
-rw-r--r-- 1 andras andras 9.0K Jan 31 17:14 diff
ebből viszont sajna az jön le, hogy pigz nem nagyon nyúl a bit-ekhez, ha nem tud érdemben összenyomni rajtuk. viszont akkor nem áll egyértelműen a fenti kijelentésem, miszerint pigz jó rsync-hez.
nagyobb jól tömöríthető anyagon kellene letesztelni pigz-et, akár a -i kapcsolóval:
-i, --independent Compress blocks independently for damage recovery
- A hozzászóláshoz be kell jelentkezni
kicsit tovább mentem. írtam egy script-et, ami az angol szótárból dob össze véletlen adatot.
#!/bin/bash
OUT="out"
DICT="/usr/share/dict/american-english"
COUNT=$(grep -c "" "$DICT")
> "$OUT"
for i in {1..300}
do
shuf -n "$COUNT" /usr/share/dict/american-english >> "$OUT"
done
cat "$OUT" | tr "\n" " " | fold | iconv -f latin2 -t utf8 > "$OUT"2
mv "$OUT"2 "$OUT"
echo >> "$OUT"
ezt lefuttatva:
pigz -k out
ls -ltrh
total 403M
-rw-r--r-- 1 andras andras 133M Jan 31 17:33 out.gz
-rw-r--r-- 1 andras andras 271M Jan 31 17:33 out
cp out in
hexedit in > 1 byte atirasa valahol
pigz -k in
rsync -v --progress out masik:
rsync -v --progress in masik:out
speedup is 1401.33
pigz-nél -i kapcsolóval és az nélkül is = speedup is 655
gzip --rsyncable -nél pedig = speedup is 695.21
tehát azt mondom mégis jó pigz az rsync-hez!
- A hozzászóláshoz be kell jelentkezni
A man-ban azért nincs benne, mert ez egy nemhivatalos patch, a készítője lusta volt a man-t is kibővíteni.
A getopt_long() függvény minden egyértelmű prefixet megeszik az opcióknál: próbáld ki, a legtöbb programban menni fog.
- A hozzászóláshoz be kell jelentkezni
Mégsem kellett különvennem két sorba a tar-t és a gzip-et, találtam rá egy számomra eddig idegen megoldást. Így visszatértem a "tar -czf"-es megoldáshoz, ami fele annyi időt vett igénybe, mint a tarolás, majd gzipelés.
Ezt találtam a neten, még sosem láttam ilyet, konzol simán "megeszi" :)
GZIP="--rsyncable" tar -czf valami.tgz /valami
Aztán gondolkodtam kicsit, javítsatok ki, ha tévednék, de úgy értelmeztem, hogy ez így, ebben az esetben egy parancs erejéig a gzipnek ad értéket.
Így gyakorlatilag a már említett tar-os sorokat tartalmazó mentő szkriptem elejére beírtam az
export GZIP="--rsyncable"
sort, majd mindent hagytam a régiben. Tökéletes lett, jó sok próbálkozással, teszttel, eljutottam oda, hogy ezt az egy sort ha beírom, minden úgy megy, ahogy szeretném.
Gondolkodtam még a tömörítési szint emelésén, de időben annyira nyújtotta volna a mentést, hogy nem láttam értelmét.
Gondoltam beszámolok én is, mire jutottam a dologgal.
PS: Az azonban látszik, hogy valamelyest így is tovább tart a mentés ideje, vélhetően időt vesz igénybe az "rsync ready" tömörítés a hagyományoshoz képest.
- A hozzászóláshoz be kell jelentkezni
ahhoz hogy megspórold az I/O-t a külön tar és külön zip futtatásánál, egymás után is pipe-olhatod, pl így:
tar -cf - "/data" | pigz > backup.tgz
így ugyanott vagy :)
- A hozzászóláshoz be kell jelentkezni
Hopp, jogos, erre nem is gondoltam, köszi :)
- A hozzászóláshoz be kell jelentkezni
Lenne még valami, segítsetek értelmezni nekem ezt a dolgot.
sent 2648593 bytes received 347854648 bytes 286475.88 bytes/sec
total size is 6818095852 speedup is 19.45
A sent része most nem számít, az oké.
A received, byte-ban van megadva, ha jól számolom át, akkor az ~30MBájt, ennyit fogadott.
A bytes/sec is oké.
A total size viszont 6,4GB körül kellene hogy legyen, ekkora a foglalt mérete annak a könyvtárnak, amit szinkelek.
Rosszul számol/jelez ki, vagy ez már nem byte-ban értendő, hisz' itt nem írja, hogy bytes, mint fentebb mindenhol igen. Ez hiba, vagy benéztem valamit?
- A hozzászóláshoz be kell jelentkezni
6818095852 bájt == 6,349847 gigabájt.
Mi a gond?
- A hozzászóláshoz be kell jelentkezni
Ja, jogos, tényleg :)
Lusta voltam, betoltam a bitmatek.hu-ra a két számot, átváoltottam, nem volt nagyságrendbeli különbség. Most átszámoltam, tényleg minden rendben van. A bitmatek input mezeje nem bír ennyi digitet fogadni, levágta a végét. Köszi!
Még egy kérdés: pontosan mit jelent itt a speedup?
- A hozzászóláshoz be kell jelentkezni
a speedup az adatátvitel sebességétől függetlenül azt mutatja, hogy arányaiban a szinkronizáció miatt mennyit spóroltál a teljes másoláshoz képest.
tehát a 19.45 azt mutatja, hogy kb. 20x gyorsabb volt így a másolás rsync-kel hogy csak a különbséget vitted át, mintha egy teljes másolást indítottál volna rá.
gyakorlatilag a total / recieved érték ez.
- A hozzászóláshoz be kell jelentkezni
Bocs, hogy így megkésve, de nagyon köszönöm válaszod, ezt nem tudtam.
- A hozzászóláshoz be kell jelentkezni
Végülis hogy néz ki a scripted és hogy mire használod?(Mostanában)
Nekem is valami hasonlóra lenne szükségem és inkább meghívnálak egy sörre,:)
- A hozzászóláshoz be kell jelentkezni