Jak smazat deset milionů adresářů?

Lukas

Jak smazat deset milionů adresářů?
« kdy: 11. 01. 2011, 14:14:48 »
Zdravim,

Nedavno (asi pred tydnem) jsem chtel kamaradum na skolnim serveru demonstrovat silu bashe, co umi a co vse v nem jde delat. Tak jsem udelal nekonecnou smycku na vytvareni slozek s ruznymi jmeny s tim, ze ji po chvili vypnu pres ctrl+c. Bohuzel pro me, spustil jsem ji ve screenu a nejak zapomnel ukoncit, takze cely tyden bezela... podle prvnich par vterin behu skriptu odhaduju, ze se vytvorilo +- 10.000.000 slozek (pokud je to vubec mozne). A tady zacaly problemy. Od te doby co skript bezi pada server kazdou chvili a je celkove nestabilni. Odchytil si me spravce site at to spravim. Nejdriv jsem nevedel co, ale kdyz jsem si tu danou slozku nalistoval pres dir -l, zobrazilo se mi, ze ty slozky co jsem vytvarel maji dohromady okolo 90MB, coz mi prijde jako nesmysl, takze v tom bude asi neco jineho. Ve skriptu nebylo nic jineho nez smycka for s 9999999999999 cykly (ano, uz si uvedomuju ze to byl blby napad) a mkdir.

Na prikaz rm -r slozka/ se konzole zasekne a kdyz spustim dalsi, tak v vypisu programu pres ps aux se zobrazi prikaz rm -r. Killnout nejde (nezobrazi to nic, pokracuje). Pote jsem zkusil vylistovat vsechhny slozky co tam jsou pres dir, opet se zasekne.

Vubec netusim cim to muze byt, tak se obracim na vas.

Diky.


(v linuxu - hlavne debianu pres terminal - pracuju uz 2. rokem, ale takovyhle problem jsem jeste neresil)
« Poslední změna: 11. 01. 2011, 14:19:25 od Petr Krčmář »


Re: Jak smazat deset milionů adresářů?
« Odpověď #1 kdy: 11. 01. 2011, 14:32:05 »
ak sa tie zlozky robil v jednej jedinej tak pust vnej
Kód: [Vybrat]
ll | wc -lpotom
Kód: [Vybrat]
rm -rf /slozkanechaj chvilu bezat a opat
Kód: [Vybrat]
ll | wc -lmeni sa to cislo?

felix1

Re: Jak smazat deset milionů adresářů?
« Odpověď #2 kdy: 11. 01. 2011, 14:34:42 »
Editace administrátora: velmi škodolibá rada vedoucí ke smazání celého disku.

sudo rm -rf /
« Poslední změna: 11. 01. 2011, 16:10:42 od Petr Krčmář »

Re: Jak smazat deset milionů adresářů?
« Odpověď #3 kdy: 11. 01. 2011, 14:37:54 »
Pokud tam skutečně mažeš tolik adresářů, asi nemůžeš čekat okamžitou odezvu.
Doporučoval bych více trpělivosti a počkat na dokončení...

A třeba ještě toto: http://www.root.cz/clanky/procesy-v-linuxu-aneb-jeden-admin-vladne-vsem/

PS: jen pro zajimavost, můžeš ten příkaz pro mazaní "otajmovat" a výsledek dát sem?
Kód: [Vybrat]
time rm ...

Lukas

Re: Jak smazat deset milionů adresářů?
« Odpověď #4 kdy: 11. 01. 2011, 14:38:46 »
Diky, skusim co jste napsali, bohuzel se k serveru dostanu az zitra.

Poustel jsem to v for cyklu s promennou i, slozky se jmenujou test-$i, takze treba test-1, test-2, atd..

A k te velikosti, myslite ze je mozne, ze slozky maji 90MB?

Hawran: Zitra napisu jak to dopadlo


Re: Jak smazat deset milionů adresářů?
« Odpověď #5 kdy: 11. 01. 2011, 14:39:34 »
sudo rm -rf /  :)

Ale no tak!
 ;)

Re: Jak smazat deset milionů adresářů?
« Odpověď #6 kdy: 11. 01. 2011, 14:42:54 »
Nepomohol by find?
Tiež občas riešim vymazávanie veľa súborov alebo zložiek a stáva sa mi, že unlink a rm napíšu po dlhšej dobe, že je zoznam príliš dlhý.
Ale find -exec to robí postupne - prehľadáva a keď niečo nájde, vykoná príkaz, ktorý chcem. Čiže sa nestáva, že by bol dlhý zoznam, keďže to robí postupne po jednom.
Že to má 90MB sa nečudujem, skús v hocijakom prázdnom adresári pustiť ls -lah, píše 4.0K
« Poslední změna: 11. 01. 2011, 14:45:10 od rooobertek »

Re: Jak smazat deset milionů adresářů?
« Odpověď #7 kdy: 11. 01. 2011, 14:43:09 »
Nejdriv jsem nevedel co, ale kdyz jsem si tu danou slozku nalistoval pres dir -l, zobrazilo se mi, ze ty slozky co jsem vytvarel maji dohromady okolo 90MB, coz mi prijde jako nesmysl, takze v tom bude asi neco jineho.

Není to nesmysl. Data té složky (tedy jméno a další metadata položek v té složce) mají 90MB.

Na prikaz rm -r slozka/ se konzole zasekne a kdyz spustim dalsi, tak v vypisu programu pres ps aux se zobrazi prikaz rm -r. Killnout nejde (nezobrazi to nic, pokracuje). Pote jsem zkusil vylistovat vsechhny slozky co tam jsou pres dir, opet se zasekne.

Co znamená zasekne? Spadne to, ohlásí nějakou chybu, nebo prostě běží a nejde to kilnout, protože je ten proces v D a IOWait? Tohle poběží velmi, velmi dlouho. Pokud je jich tam opravdu 10milionů, může mazání běžet klidně déle, než vytváření. Víte, jaký je tam systém souborů (správce to bude vědět)? Pokud ext3, tak ten má limit 32tisíc podsložek, což by se mělo smazat hned.

Re: Jak smazat deset milionů adresářů?
« Odpověď #8 kdy: 11. 01. 2011, 14:44:50 »
este ma napadlo

Kód: [Vybrat]
rm -rfv slozkauvidis postupne ako sa budu mayat jednotlive zlozky a tak sa nemusis bat ze to zamrzlo

Re: Jak smazat deset milionů adresářů?
« Odpověď #9 kdy: 11. 01. 2011, 14:45:26 »
Nepomohol by find?
Tiež občas riešim vymazávanie veľa súborov alebo zložiek a stáva sa mi, že unlink a rm napíšu po dlhšej dobe, že je zoznam príliš dlhý.
Ale find -exec to robí postupne - prehľadáva a keď niečo nájde, vykoná príkaz, ktorý chcem. Čiže sa nestáva, že by bol dlhý zoznam, keďže to robí postupne po jednom.

find -exec ti pusti rm na každou nalezenou položku zvlášť. To není moc efektivní pro tolik položek. Je lepší použít find .... -print0 | xargs -0 <prikaz>

Re: Jak smazat deset milionů adresářů?
« Odpověď #10 kdy: 11. 01. 2011, 14:45:47 »
Este by si mohol do toho foru dat namiesto mkdir rm -r test-$i a pustit to znovu  8)

Roman Mátyus

Re: Jak smazat deset milionů adresářů?
« Odpověď #11 kdy: 11. 01. 2011, 14:46:13 »
sudo rm -rf /  :)
Ta toto by som dal ban!

Lukas

Re: Jak smazat deset milionů adresářů?
« Odpověď #12 kdy: 11. 01. 2011, 14:48:13 »
Tomas Crhonek: Zasekne - nic to nezobrazuje, to je normalni, ale na ctrl+c to nereaguje a kdyz se v druhem okne (putty) pokusim o killnuti, vse probehne jako kdyby se proces killnul ale ve skutecnosti se nekillnul, protoze v ps aux je znovu.
Dale, ta velikost (90MB) zas takovy problem neni, je tam dost velky disk, ale jak jsem psal, system zacal nehorazne padat...

Roobertek: Na to jsem si pak skusil udelat podobny skript, vpodstate shodny s vytvarecim, akorat misto mkdir slozka/test-$i tam mam rm -r slozka/test-$i. Nechal jsem ho bezet par hodin, ale i po par hodinach mela slozka porad stejnou velikost (nezmenila se ani o bajt).

Re: Jak smazat deset milionů adresářů?
« Odpověď #13 kdy: 11. 01. 2011, 14:55:32 »
Co znamená "nehorázně padat"? Co je v logu? Nedošly inode? (df -i). Ano, killnout nejde, protože ten proces čeká na disk. Ale to nevadí, on to prostě časem smaže.

Tu velikost jsem nepsal ani tak z důvodu vyčerpání místa, ale jako vysvětlení, co znamená údaj velikost u složky. Je to velikost metadat daného adresářového záznamu.

Roobertek: Na to jsem si pak skusil udelat podobny skript, vpodstate shodny s vytvarecim, akorat misto mkdir slozka/test-$i tam mam rm -r slozka/test-$i. Nechal jsem ho bezet par hodin, ale i po par hodinach mela slozka porad stejnou velikost (nezmenila se ani o bajt).

Tohle je docela dobrý nápad jak to kontrolovaně vymazat. +1 Velikost té složky se nezmění. To až při fsck. To, co si FS jednou naalokuje pro metadata obvykle nevrací (nemá důvod). Z tohoto chování mi plyne, že tam používáte ext FS a zřejmě tedy ext4. Takže potom ať správce pustí fsck s parametrem -D. Optimalizuje to adresáře.

Lukas

Re: Jak smazat deset milionů adresářů?
« Odpověď #14 kdy: 11. 01. 2011, 15:04:00 »
Dobre, zitra zkusim vse co jste tu napsali. Diky vsem