Hola :) El Miércoles, 27 de Septiembre de 2006 13:18, JeReC escribió:
Rafa Grimán escribió:
No estoy muy de acuerdo con esto. Nosotros tenemos clientes con más de 60 millones de ficheros en un filesystem y, concretamente, tenemos un cliente en España con más de 40 mil ficheros en un directorio y no hemos visto este tipo de limitaciones.
Un ejemplo más casero es el que hice anoche, borrar 22 GB con más de 130 mil ficheros repartidos en 5 directorios. Antes de borrarlo, pude usar el comando find concretamente un find /mnt/xfsdumps -type f -exec chmod 0640 {} \;
(recordemos que hablo de más de 130 mil ficheros) y no tuve problemas de shell, buffers, ... Es un AMD 1333 con 1.5 GB de RAM. También usé otros comandos: ls, rsync, ... y pude usar konqueror (desde KDE ;) y no tuve problemas.
Hay veces que el buffer se te puede llenar y hay comandos que no se ejecutan al 100%, para lo cual necesitarías usar:
comando largo | xargs comando2
Yo creo que es más bien un problema de velocidad de disco duro.
¿Qué filesystem estás usando? Algunos no pueden trabajar con muchos ficheros.
ReiserFS
Esta era la raz�n por la que el "konqueror" me hab�a bloqueado la maquina, queria acceder al "tmp" y tenia problemas para listar o escribir en el. La soluci�n fue borrar el directorio "tmp" y volver a crear otro con los mismos permisos.
Antes has dicho que no podías borrar el contenido, ahora dices que sí ... hacer un:
cd /tmp && rm -Rf YaST-*
es lo mismo (aunque menos peligroso) que:
rm -Rf /tmp
No. Digo que pude borrar el directorio. Me explico
Y tanto que no es lo mismo. rm -rf YasT-* al poner asterisco al comando rm, la bash expande o cambia el asterisco por todo el conjunto de ficheros, el string resultante no lo acepta el comando rm. Hacer un rm /tmp lo unico que se elimina es la entrada de este directorio, fijate que es un momento en borrar-lo. Puedes provarlo si quieres y veras que tengo razon. create un directorio y ejecuta este escript
for i in `seq -f%8g 1 14170|tr -t " " "0"`; do mkdir $i done
esto te creara 14170 directorios de 8 caracteres dentro del directorio que has creado si ejecutas: echo * | wc -c veras que son 127530 bytes prueba desde dentro del directorio de hacer: rm -rf * y obtendras: -bash: /bin/rm: La lista de argumentos es demasiado larga
Pues a mi no me da eso ... copio y pego lo que me da a mi: currotop:/tmp/tmp # df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sda1 ext3 7.9G 4.5G 3.1G 60% / udev tmpfs 503M 160K 502M 1% /dev /dev/sda6 xfs 58G 27G 31G 47% /home /dev/sda2 ext3 7.9G 129M 7.4G 2% /mnt/gentoo currotop:/tmp/tmp # ls -a . .. currotop:/tmp/tmp # time for i in `seq -f%8g 1 14170|tr -t " " "0"`; do mkdir $i ; done real 0m19.759s user 0m4.392s sys 0m12.637s currotop:/tmp/tmp # echo * | wc -c 127530 currotop:/tmp/tmp # time rm -Rf * real 0m0.476s user 0m0.180s sys 0m0.296s currotop:/tmp/tmp # ls -a . .. currotop:/tmp/tmp # Es un sistema de ficehros ext3. Probemos con XFS: currotop:/home # mkdir tmp currotop:/home # chmod 1777 tmp/ currotop:/home # cd tmp/ currotop:/home/tmp # df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sda1 ext3 7.9G 4.5G 3.1G 60% / udev tmpfs 503M 160K 502M 1% /dev /dev/sda6 xfs 58G 27G 31G 47% /home /dev/sda2 ext3 7.9G 129M 7.4G 2% /mnt/gentoo currotop:/home/tmp # ls -a . .. currotop:/home/tmp # time for i in `seq -f%8g 1 14170|tr -t " " "0"`; do mkdir $i ; done real 0m50.752s user 0m7.816s sys 0m12.837s currotop:/home/tmp # echo * | wc -c 127530 currotop:/home/tmp # time rm -Rf * real 0m51.821s user 0m0.208s sys 0m1.428s currotop:/home/tmp #
Eso quiere decir que el comando rm -rf al subtituir el * por los nombres sobrepasa el limite Si tan solo borras un fichero rm -r 00014170/ veras que ya puedes ejecutar el rm -rf *
Pos no me da ... ten en cuenta que si haces un rm -Rf /tmp, también te tienes que deshacer de los ficheros que hay dentro, no puedes borrar directorios que NO estén vacíos.
Puedes provar de aumentar mas el numero de directorios, el rm no puede borrar-los pero si que puedes borrar el directorio principal Ya sabemos que con el find se puede hacer. Pero mira el error que lanza la hacer: find -type d -exec rm -rf {} \; find: ./00014167: No existe el fichero o el directorio find: ./00014168: No existe el fichero o el directorio find: ./00014169: No existe el fichero o el directorio find: ./00014170: No existe el fichero o el directorio Pero los borra todos.
Usa xargs ;) [...] Rafa -- "Even paranoids have enemies." Rafa Grimán Systems Engineer Silicon Graphics Spain Santa Engracia, 120 - Planta Baja 28003 Madrid Spain Tel: +34 91 3984200 Tel: +34 91 3984201 Móvil: +34 628 117 940 http://www.sgi.com OpenWengo: rgriman Skype: rgriman