tar ssh blokkméret

Fórumok

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.

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.

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."

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 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."

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.

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

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."

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).

szerintem az atiranyitassal lesz a problema, inkabb pipe-ot kellene hasznalni

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

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 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?