Jak smazat deset milionů adresářů?

Re: Jak smazat deset milionů adresářů?
« Odpověď #30 kdy: 12. 02. 2011, 03:27:12 »
Mozna to by pomohlo?

find /path/to/files* -maxdepth 1 -ctime -3 -exec rm {} \;

Smaze veskere soubory a slozky ktere jsou max 3*24hodiny stari
Opatrne z cestou!

Zkuste

find /path/to/files* -maxdepth 1 -ctime -3 | head

Kdy bude v pohode - spustit ve screen.


Re: Jak smazat deset milionů adresářů?
« Odpověď #31 kdy: 12. 02. 2011, 17:21:16 »
Přijde mi teda trochu divné, že by tohle systém neustál, ale možné je všechno... (zuřivé swapování z nějakého důvodu apod.)

Pro začátek by se ještě dalo zkusit, jestli je problém v samotném procházení adresáře, nebo až v té operaci mazání.

Takže zkusit něco, co sice pročte celý adresář s miliony položek, ale pak udělá jenom nějakou jednoduchou operaci. Třeba tohle:

# echo test-1?
(měl by vypsat všechny adresáře, jejichž jméno má jenom dva znaky a první je jednička)

Pokud to projde v pohodě, tak bych tímhle způsobem postupně mazal:

# rmdir test-??
(sto položek snad zvládne)

# rmdir test-???
(tohle snad taky)

...a od n2jak0 hranice už třeba nějak po částech:
# rmdir test-1?????
# rmdir test-2?????
# rmdir test-3?????

atd.

Je to teda hooodně divnej postup, ale vzhledem k divně položené otázce ("někdy to padá") asi adekvátní ;)

Re: Jak smazat deset milionů adresářů?
« Odpověď #32 kdy: 12. 02. 2011, 17:23:49 »
...místo toho smajlíka byly dva otazníky...

Mordae

Re: Jak smazat deset milionů adresářů?
« Odpověď #33 kdy: 12. 02. 2011, 18:37:09 »
Ahoj, urcite se vyhni spravcum souboru, s oblibou by si to pred mazanim vylistovali. Zkusil bych normalne znovu tutez smycku (opravdu asi radeji pozpatku) + echo a kouknul bych, jak rychle to jde. Pokud by to nebylo ono, da se mazat po vice kusech per spusteni rm, pripadne se da napsat vlastni cckovy programek, ktery udela tutez smycku, ale nemusi se porad dokola spoustet.

Kód: [Vybrat]
#include <stdio.h>
#include <unistd.h>

int main()
{
        char name[64];
        int i;

        for (i = 100000000; i >= 0; i--) {
                sprintf(name, "test-%i", i);
                rmdir(name);
        }

        return 0;
}

blb

Re: Jak smazat deset milionů adresářů?
« Odpověď #34 kdy: 12. 02. 2011, 19:23:21 »
Pokud mate pristup jako administrator a moznost svazek premountovat, zkuste ho pripojit s velkou write cache (dle pouziteho FS), s noatime, s pripadnymi dalsimi parametry optimalizujici sekvencni pristup k datum.

Mozna mi neco uslo, ale nenapadlo vas  samotne mazani provest tim samym skriptem co adresare vytvoril (jen namisto mkdri pouzit rm? Nebo si tim skriptem muzete vytvorit skript, ktery bude mazat jeden adresar po druhem.


David Sauer

Re: Jak smazat deset milionů adresářů?
« Odpověď #35 kdy: 12. 02. 2011, 19:49:04 »
No, prave pri kontrole bych nedal vratit do lost+found, ale dat ty data zahodit.

Co zkusit ext2ed (pripadne jiny editor). Proste hlavni adresar te hiearchie (pokud to jde) odlinkovat s fs, pustit fsck a dat zahodit ? Kdysi to na unixech slo ..
To by ale nejspíš zase ty adresáře vrátilo do lost+founds.

Já bych spustil rm -rf nadslozka (hlavně se vyhnout bash rozkladu *) a nechal běžet. Kdyby to dělalo psí kusy (i/o lock nebo je rm napsaný fakt nějak blbě), tak postupně pomocí findu s nízkou i/o prioritou.

Možná i ionice -c 3 rm -rf nadslozka