Hosszan futó tar processz monitorozása (pv/pipe nélkül)

A klasszikus módszer szerint átkergethetjük az adatfolyamot egy (vagy több) pv-n, és akár párhuzamosan nézhetjük a progressbarokat.

Viszont lehet olyan eset, amikor nem szeretnénk pipe-okat használni (pl. bufferelési vagy blokkméret beállítások miatt), ilyenkor egyszerűen küldhetünk a tar processznek egy SIGUSR1 szignált, akár rendszeresen, mondjuk percenként, crontab-ban időzítve:

* * * * * root pkill -SIGUSR1 tar

A tar-t pedig megkérjük arra, hogy legyen kedves ezeket a SIGUSR1-eket menet közben elkapni, és rá mindig olyan módon reagálni, hogy kiírja a pillanatnyi statisztikáit. 

lxc03:/mnt/ctdev02/sapdata # tar cf /dev/nst0 DISKD0051 --totals=USR1
Total bytes written: 14206033920 (14GiB, 354MiB/s)
Total bytes written: 39681720320 (37GiB, 376MiB/s)
Total bytes written: 65241937920 (61GiB, 394MiB/s)
Total bytes written: 87778324480 (82GiB, 384MiB/s)
Total bytes written: 115248916480 (108GiB, 396MiB/s)

Ha nem adjuk meg a --totals=USR1 kapcsolót, és mégis megkapja a SIGUSR1-et, akkor megáll 138-as returnkóddal, egyébként csak kiírja az adott pillanatban, és a végén rc0-val áll meg (vagy amivel amúgy állt volna meg).

Hozzászólások

Mire kell a tar? Biztos kell a tömörítés 1 fájlba? Nem jobb a fájlokat sync-elni? Akár backup akár másnál?

Én tipikusan az eredeti céljára használom a tar-t: szalagra írok vele. Ott egyértelműen praktikus egy file-ba összefűzni a könyvtárakat/fileokat. Tömöríteni nem tömörítek, azt az LTO hardver megoldja szalagraírás előtt.

De diszkes backupnál is hasznos lehet egy-egy terjengősebb könyvtárszerkezetet egy file-ba menteni/archiválni.

A tar nem tömörítő, hanem archiváló (tape archiver), csak tud tömöríteni is, ha kéred. Ha megnézed a parancssort, amit írt

tar cf /dev/nst0 DISKD0051 --totals=USR1

az valamilyen nem visszacsévélő szalagos egységre menti ki a DISKD0051 könyvtár tartalmát, tömörítés nélkül (cf kapcsolók). Itt hogyan sync-eljen?

Van, amikor nem csak szalagra írásnál hasznos. Pl. ha 12345678 aprócska fájlt egy nem túl mély/széles könyvtárstruktúrában tárolva kell másolni/mozgatni, vagy épp valamilyen mentőszoftvernek odaadni, hogy rakja ki szalagra, akkor nagyon jól tud jönni egy tar-ral egybegyúrt állomány.

SIGUSR1 helyett SIGINFO? Ez a klasszikus szignál erre a célra, pl. a FreeBSD userland összes programja ezt használja (interaktívan Ctrl+T-vel lehet küldeni, de ezt csak a teljesség kedvéért írom ide).

A SIGINFO-val az a baj, hogy azért nem tekinthető hordozhatónak, mert nincs specifikáció (sem a POSIX, sem a SUS), ami előírná és definiálná a működést, ha jól tudom.

 

Szerk: AFAIK, AIX-on például nincs SIGINFO, pedig az UNIX. 

emlékek a status=progress előtt dd-k idejéből