Hi!
Már 3X végigolvastam tar manját, de nem találtam erre megoldást.
Ezt a parancsot szeretném használni:
ssh user@host "tar cj DIR" > valami.tar.bz2
, ami jól is működik, de
valami.tar.bz2
mérete állandóan 10K többszöröse lesz, még akkor is 10K lesz, ha DIR mérete mindössze pár byte.
Van valakinek ötlete arra nézve, hogy hogy tudom ezt kijavítani, mármint hogy rendes méretet írjon ki?
Köszi.
- 967 megtekintés
Hozzászólások
Szerintem itt lesz a kutya elásva, hogy "rendes méretet írjon ki". Nem lehet, hogy amivel megnzéed az hazudja ezt a méretet? Mivel nézed?
Gondolom az a válasz, hogy "nálam jól működik, most próbáltam ki" nem nyugtat meg... De szinte biztos, hogy valamit elnéztél.
- A hozzászóláshoz be kell jelentkezni
ls -l - lel nézem meg a méretét ... , de ezek szerint Neked a fenti parancs nem 512 többszörös fájlméretet ad vissza?
- A hozzászóláshoz be kell jelentkezni
man tar:
"
....
-b Blocks
Specifies the number of 512 bytes blocks per record. Both the default and the maximum is 20, which is appropriate for tape records. Due to the size of interrecord gaps, tapes written with large blocking factors can hold much more data than tapes with only one block per record.
....
"
Tehát default block méret az pont 10K.
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
No, igen, de amint írtam, azt szeretném, ha pontos méretet adna vissza, tehát ha a távoli gépen ezt kiadom, hogy
tar cjfv alma.tar.bz2 /tmp/bb
és a méretére visszakapom, hogy 211 byte, akkor az
ssh user@host "tar cj /tmp/bb" > alma2.tar.bz2
hatására alma 2 mérete is 211 byte legyen, és ne 512 többszöröse.
- A hozzászóláshoz be kell jelentkezni
A tar egy arhiválás céljára szolgáló program. Az adattartalmon kívül tárolja a fájl attributumait is (név, méret, jogok, stb).
Úgy érzem nem tudod mit szeretnél csinálni. Ha simán másolni akkor ott az scp. (Vagy a fenti formátumban jó a dd vagy a cat parancs is.)
(Az már csak kötözködés, hogy attól, h bz2 a fájl neve, attól az még nem lesz tömörített, de ez más téma.)
Ha a fenti módszerrel létrehozott tar archiv fájl tartalmáról szeretnél infot, akkor pl. tar -tvf alma2.tar.bz2
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
scp sajnos nem jó nekem, symlinkeket nem igazán tud másolni. Persze, nem attól lesz tömörített, hogy bz2 a fájlnév vége, hanem mondjuk attól, hogy megadom a j kapcsolót, hogy tömörítsen. Egyszerűen azt szeretném elérni, hogy egy paranccsal át tudjak menteni egy tömörített állományba egy könyvtárat úgy, mintha a távoli gépen csinálnám meg az állományt, és azt másolnám át.
- A hozzászóláshoz be kell jelentkezni
Bocs, nem figyeltem a j-t.
Ha kibontod a "nagyobb" méretű fájlt, akkor mit mond? Simán ki tudod csomagolni?
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
Igen, simán ki tudom csomagolni, a tartalma is ugyanaz, jogok, meg minden megegyezik, az egyetlen különbség a fájlméret. Itt egy példa:
user@gep1:/tmp$ tar cj alma.tar.bz2 /tmp/bb
user@gep1:/tmp$ ls -l alma.tar.bz2
-rw-r--r-- 1 user user 211 2007-03-14 12:39 alma.tar.bz2
user@gep1:/tmp/$
user@gep2:/tmp$ ssh user@helyigep "tar cj /tmp/bb" > alma2.tar.bz2
user@gep2:/tmp$ ls -l alma2.tar.bz2
-rw-r--r-- 1 user user 10240 2007-03-14 12:40 alma2.tar.bz2
user@gep2:/tmp$
Amúgy most mc- vel nyomtam a nagyobb méretű fájlon egy entert, s simán "bele is lépett", csak előtte kaptam egy ilyet:
bzip2: (stdin): trailing garbage after EOF ignored
- A hozzászóláshoz be kell jelentkezni
Ugyanolyan fájlrendszer van mindkét gépen? (Pl. ha egyszerűen átmásolod valahogy a helyi gépről a távolira a fájlt akkor jó a méret?)
Ha igen, akkor lehet, hogy keresni kell valamilyen alternatív megoldást, mert lehet, h "teleszemeteli" a végét az átirányítás, illetve a tar úgy kezeli, hogy ez block-os eszköz, és a 10K mérettel hozza létre a fájlt. (Pl. a tar fájlt dd be irányítod a lokális gépen és dd-vel is fogadod el.)
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
Ugyanolyan teljesen a fájlrendszer, a disztró, még a verzió is egyezik :- ). Ha a tar.bz2 filet simán átmásolom, akkor "kis" méretet kapok. Ha ráeresztek egy wc- t, az is 10240- t ad vissza, és ezt nem írtam az előbb, de a fájl vége tele van 0 karakterekkel, szóval biztos, hogy a tar "rontja" el. Persze, nyílván okkal írták így meg, csak nekem nem felel itt most meg. Erre a dd- be irányításra írnál egy próbát? Fontos lenne, hogy a távoli gépen ne jöjjenek létre ideiglenesen sem fájlok, és lehetőleg egy ssh kapcsolódással átjöhessen az egész könyvtár. Akár az is jó lenne, ha előbb tarral áthoznám, és utána tömöríteném be, ezzel viszont az attribútumok vesznek el (rootként meg nem szeretném használni).
- A hozzászóláshoz be kell jelentkezni
mert nem atiranyitast kell hasznalni...
- A hozzászóláshoz be kell jelentkezni
Kifejtenéd egy kicsit, hogy hogyan lehet ezt pipe- olni? Igazából csak úgy tudnám megoldani, hogy ha arról a gépről futtatom a progit, ahol maga a könyvtár van, de az sajnos most nem jó.
- A hozzászóláshoz be kell jelentkezni
kb. legegyszerűbben ilyesmi:
ssh user@host "tar cjf - DIR" | dd of=valami.tar.bz2
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
illetve ezzel is érdemes próbálkozni (tar után tömörít):
ssh user@host "tar cvf - DIR | bzip2 - -" | dd of=valami.tar.bz2
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
Ez működik, köszi, viszont nem a felső (
ssh user@host "tar cjf - DIR" | dd of=valami.tar.bz2
) annyira nem, az még mindig 10240 bytet ad vissza.
Köszi.
- A hozzászóláshoz be kell jelentkezni
szerintem az atiranyitassal lesz a problema, inkabb pipe-ot kellene hasznalni
- A hozzászóláshoz be kell jelentkezni
A tar viselkedik így, ha az outputot nem ő írja fájlba, hanem stdout-on továbbadja. A történetnek tehát semmi köze az ssh-hoz. Ez is ugyanúgy felkerekíti a hosszt:
tar cj DIR > valami.tar.bz2
Írtam egyszer a tar fejlesztőinek, mire a válaszban megpróbáltak meggyőzni arról, hogy ez feature, nem bug. Valami olyasmi, hogy ilyen esetben fene tudja hogy miért azt feltételezi hogy szalagos egységre fog kerülni az output. Szerintem is hülyeség, persze.
Workaround: a bzip-et külön hívd meg, hogy a tar ne tudjon róla.
ssh user@host "tar c DIR | bzip2" > valami.tar.bz2
- A hozzászóláshoz be kell jelentkezni
azert a legjobb meg mindig a /dev/null check a tarban :D
- A hozzászóláshoz be kell jelentkezni
No igen, ezt a megoldást ajánlotta Helios is, bár az tény, hogy más lesz, mintha csak simán helyben tömöríteném, aminek ugye az az oka, hogy itt a végén lévő 0- kat is letömöríti. Ebből a minimális különbségből adódóan nem tudok md5sumot használni, szóval a kérdésem az lenne, hogy kibontás nélkül össze lehet hasonlítani valahogy 2 tar filet? Néztem a
tardiff
- et (freshmeat.net), de csak a 2 tar fájlban lévő fájlokat nézi, úgy értem csak azok meglétét/ nem létét, tartalmát nem. tarnak van egy -compare opciója is, de az egy könyvtárat (pontosabban fájlrendszer[rész]t) vet össze egy tar fájllal.
A kérdés végülis az, hogy össze lehet- e hasonlítani valahogy 2 tar fájlt kibontás nélkül úgy, hogy a fájlok tartalmát is vizsgálja. Csak annyi kellene, hogy igaz/ hamis... .
- A hozzászóláshoz be kell jelentkezni
A sima tar, ha nem kérsz tömörítést, mindenképp 10240 byte többszörösére kerekíti a fájlhosszt. Ha tőle kéred a gzip/bzip-elést, akkor is a tömörítés előtti hosszt felkerekíti, tehát mindenképp van a végén nullásokból álló "szemét", aminek hatékony tárolása a gzip/bzip feladata.
Kipróbáltam: a helyi megoldásként szokásos "tar cjf valami.tar.bz2 DIR", valamint az általam javasolt "tar c DIR | bzip2 > valami.tar.bz2" azonos fájlt ad eredményül. Mindössze a "tar cj DIR > valami.tar.bz2" ad mást, mint ahogy arra a topiknyitó bejegyzésedben rávilágítottál.
Le tudnád írni, hogy pontosan melyik az a két felállás és két parancs, ami különböző md5-höz vezet nálad?
- A hozzászóláshoz be kell jelentkezni