Newsgroup: it.comp.os.linux.sys
Titolo: tanti file: quando il troppo e' troppo

salve a tutti
ho avuto la buona idea di riempire una directory con troppi file (100,
di cui conosco i nomi) e credo di aver toccato qualche limite di 2.1GB,
infatti non riesco piu' a sapere cosa c'e' dentro: "ls" muore li,
rm nomefile segue la stessa sorte, rm -rf della directory non ha miglior
fortuna. ho anche provato a fare il furbo con "echo "" >myfile " ma
niente da fare, il processo si blocca li.
Adesso ho una serie di processi di cron (updatedb) appesi, immagino,
mentre tentano di operare li dentro e, dopo averle provate tutte e
cercato in giro, chiedo aiuto:
come faccio per cancellare quella dannata directory?
La distribuzione e' una Debian/testing e il filesystem dove vive la
directory e' ext2.
Se la soluzione (come temo) sara' riformattare /home e recuperare i
backup, credete che un altro filesystem (reiserfs, ext3 o xfs) sia in
grado di evitare problemi simili?
devo dire che mi ero convinto che con le  ultime libc questi tipi di
problemi si fossero risolti, quindi, dove ho sbagliato? Non voglio
ricascarci, perche' ho spesso bisogno di creare tanti e grandi file.
Grazie a tutti
-- 
Giancarlo de Gasperis
Dipartimento di Fisica -- Universita' di Roma "Tor Vergata"
Via della Ricerca Scientifica 1, I-00133 ROMA RM
Tel.: 
+39 06 7259 4761
        Fax: 
+39 06 202 3507

 problemi simili?
Io credo che il tuo sia un problema strano... il limite dei 2GB è stato
eliminato ed è solo delle applicazioni che non sono compilate con una
determinata opzione del compilatore, ma il limite non è per una directory ma
per un singolo file...
Anche io ho una dir con centinaia di files e non ho problemi... prova a usare
il cd di rescue e fare un check del filesystem.o prova a usare il vecchio mc 
-- 
| /
| \Byte - Andrea Briganti - 
kbyt...@freemail.it
http://www.kbytesystem.fasturl.it
 ICQ: 40872731
*** Chi non ha rispetto non merita considerazione

 ricascarci, perche' ho spesso bisogno di creare tanti e grandi file.
1. ti ci vuole una macchina a 64 b
2. ti serve un sistema RAID per il mirroring degli HD
3. hai bisogno di una unita' di backup adeguata, unica vera sicurezza
contro i disastri
Ciao,
// Umberto Salsi
//
// 
http://digilander.libero.it/salsi
  --  GnuPG Key ID = BE2C F6CD 77E9 29AE

 *** Chi non ha rispetto non merita considerazione
-- 


 // 
http://digilander.libero.it/salsi
  --  GnuPG Key ID = BE2C F6CD 77E9 29AE
1. ce l'ho
2. ce l'ho (da tre giorni, devo configurarlo, ALLA SVELTA)
3. mi manca... :-( pero' spero che chi lavora su quella macchina mi
abbia dato retta e sparpagliato le cose importanti su altri dischi...
Riassunto:
dopo aver spento la macchina (a forza, visto che con i processi appesi
non smontava /home) e forzato un fsck la directory incriminata e' andata
via con un soffio... voto per il filesystem incasinato (e perche'
potrebbe succedere?) ma temo che il disco (4 mesi di vita) stia tirando
le cuoia. devo prendere provvedimenti!
Grazie a tutti per l'aiuto!
saluti


 qualche giorno... per curiosita', quanto occupano i tuoi file in tutto?
Sono file di vario tipo tra cui alcune iso.. in totale un 150 files per un
totale di 4 gb...
Prova a usare l'ultimo kernel... 2.4.18 


 ok, fare anche il check dei bad blocks.
OK, ma ancora non mi spiego che garanzie ci sono che un comando come
ls ./miadir/*
o
echo ./miadir/*
in una dir di 10000 files funzioni. l' asterisco viene espanso dalla
bash nella lista dei nomi di file contenuti. la linea di comando
a ls o a echo sara' file1 file2 file3 ..... file9999 file10000.
Qual' e' il limite? e sopraggiunto tale limite come si gestisce una
dir??
Credo che con il seguente codice autoprodotto si possa, ma possibile
che non esista niente di standard??
------------- leggigir.c ----------------
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char * argv[])
{
  int i;
  DIR * dd;
  struct dirent * entry;
  if (argc < 2) { fprintf(stderr,"nessun argomento passato\n"); return
1; }
  for (i=1;i<argc;i++)
    if ((dd = opendir(argv[i]))==NULL) {
          fprintf(stderr,"errore aprendo %s\n",argv[i]); return 1;
      }
    else while ((entry = readdir(dd))!= NULL)
printf("%s\n",entry->d_name);
  return 0;
}
 
---- fine legidir.c -------------------
cc -O2 -o leggidir leggidir.c
strip leggidir
./leggidir tuavoluminosadir1 tuavoluminosadir2 ....
ciao
Roberto

Rettifico: Basta non usare il glob di bash:
anziche'
ls /dir/*.txt
si puo'
ls /dir/ | grep *.txt$
Ciao
Roberto

 in una dir di 10000 files funzioni.
Procedo con il metodo sperimentale su di una partizione ext2:
$ mkdir bigdir
$ cd bigdir
$ n=10000                 
$ while [ $n -gt 0 ]; do touch $RANDOM.txt; n=$((n-1)); 
$ ls ==> tutto ok
Ho usato $RANDOM in modo da vedere in azione anche l'algoritmo di ordinamento.
