expect hogy megyen?

Sziasztok!

Van egy nagy (kb. 200G) filesystem, amit osszekutyult egy hw hiba.

Egy kisebb eseten az fsck rendberakta annyira, hogy a fajlokat meg lehet talalni, le lehet menteni. A kisebb (kb. 30G) tartott jo 1 napig.

Ez a nagy soka tart. Es alapbol az fsck mindenre megkerdezi, hogy akarom-e.

Szoval azt talaltam ki, hogy expect erre valo, kerdesre valaszol.

De meg sosem hasznaltam. A man alapjan probaltam valamit osszetakolni, de nem sikerult. Az megvolt, hogy ha jon a , akkor toljon egy y-t, de azt mar nem tudom, hogy kellene, hogy ezutan ne lepjen ki.

Szoval vegtelenciklusban varjon a standard inputon, es ha string jon, kuldjon egy y-t, ennyi lenne a feladat.

G

Hozzászólások

Ja, meg még az lenne a kérdés, hogy hogyan tudom egyáltalán az e2fsck-val az expectet összehozni?

Mert mondjuk ha a scriptet ki is sakkozom, akkor is, erre a másikra ötletem sincs.

Illetve ötletem az volt, hogy majd pipe, meg ilyesmi, de ez nem vezetett semmire :-(

G

termeszetesen a -y mar megvolt.

Nem jo semmire.

Hw hiba miatt a teljes hd osszekuszalodott, de mondom megint: a kisebb particion vegigmentem mar igy, valami sulyt tettem az y gombra, es orakon at ment a kerdezz felelek:

deleted inode has 0 dtime fix?
group 42 block 4242 belongs to another fs block fix?
stb.

Egy csomo olyan kerdes, amit nem ertek, es nem is akarok erteni, foleg nem akarok egyesevel elgondolkozni rajta, hogy mi is lehet a jo valasz.

A kisebb particio fsck-ja (mindenre y) utan az lett az eredmeny, hogy az osszes file a lost+found alatt volt megtalalhato. Nem volt idom meg vegignezni, de szamos olyan fajlt talaltam (a nagyobb meretuekkel kezdtem a keresest), ami tokeletes allapotban megvan.

Mivel a hw hiba hirtelen lepett fel, (menet kozben leszakadt az eszkoz. Kikapcsoltam, ujra bekapcs, raneztem, akkor mar a particios tabla sem latszott. Mas kabellel es vezerlovel minden jol latszik, ott a particios tabla, lehet korabban nem hasznalt reszekre irni, olvasni... Csak a korabban hasznalt reszek ossze vannak kuszalva), ezert ugy gondolom, hogy nem volt ideje a teljes diszk teljes tartalmat elpusztitani. Gondolom az fs eppen irt reszet osszekeverte. Journalt, konyvtarstrukturat, esetleg nehany fajlt. De azt remelem, hogy a fajlok (blokkok) nagy resze nem serult. Az mas kerdes, hogy sikerul-e az egy fajlhoz tartozo sok nem serult blokkot egyben kinyernem.

Szoval baromira feleslegesen kerdezget az fsck. Mindenre yes-t akarok mondani, probalja meg, es aztan vagy orulok, vagy nem a vegeredmenyt latva.

Ennyi a feladat.

G

Szia!

Az expect nem erre való.
Az expect, ismétlődő interaktiv folyamatok batch-esítésére való.
pl.: ha naponta/óránként át akarsz jelentkezni egy másik szerverre és ott elindítani egy progit, az expect-el ezt tudod automatizálni.

Neked viszont arra van szükséged, hogy egy (remélhetőleg csak egyszer futó) proginak mindíg ugyanazt a választ add !

Igen?

És hogyan?

Egyébként mi a különbség aközött a két eset között, hogy óránként bejelentkezek egy másik szerverre, és az ogin: kérdésre azt válaszolom, hogy gee, a assword: kérdésre meg azt válaszolom, hogy titok; illetve hogy egy program által feltett kérdésekre ? azt válaszolom, hogy y?

Mellesleg man expect, és az egyik lehetséges felhasználási módnak az fsck automatizálását írja.

Találtam is a neten példát, ami az fsck által feltett kérdésekre válaszol y-t, n-t, vagy interaktív módba lép... ezt megpróbáltam átvaracskolni, de nem tudom egyáltalán összekötni a program kimenetével és bemenetével.

G

Hello!

Szerintem mennie kell, a programok ki és bemenetét kapcsolod az expecthez.

1. spawn-olj
2. indíts egy while ciklust
3. várj a megfelelő kimenetre (timeout-ot állítsd, mert asszem a default 30mp)
4. küld egy a y-t. Ha entert is kell ütni /r-t tedd mögé.

Esetleg egy TCL tutorialt nézz meg.

Üdv

Tudsz írni egy egyszerű példát?

Már elkezdtem tcl-t nézni, de tök kínai :-) Vagy csak nem fogott az agyam hajnal kettőkor.

Kb. eddig jutottam most:

while 1 {
expect {
eof {break}
{send "y"}
}
}

Ezt expect -f fentiscript modon inditva nekem kivaloan valaszolgat.

De nem jottem ra, hogy tudom az e2fsck-val osszedolgozni.

Vagy a scriptbol kellene inditani az fsck-t? Hogyan? exec valami?

G