find comando travando o sistema

3

Eu tinha uma pasta com mais de 4 milhões de arquivos. Eu consegui deletar todos os arquivos, no decorrer de uma semana, usando "find. -Delete" e "kill -9" depois de um minuto, pois isso trava o sistema de outra forma.

agora a pasta está vazia. Quando eu vou para essa pasta e faço "ls", está tudo bem. Acabei de ver que a pasta está vazia.

Mas quando eu faço "find foo /", ele bloqueia o sistema novamente, assim como quando eu costumava apagar aqueles milhões de arquivos.

Qual pode ser o motivo?

    
por kommradHomer 13.10.2014 / 11:26

3 respostas

1

Encontrei a resposta compartilhando esta pergunta no Google Plus. A resposta de Axel Engeland :

That really depends on the file system used. Directories are supposed to store inode tables. If inode tables grow too large, another one is created and the tables are linked. So even if you removed all the files, there may still be a big amout of interlinked inode tables. if you rmdir and mkdir the directory again, performance should be better.

As you may have deleted all files but the last, the inode tables are still in place. ls -ld foo should show you the size of directory meta information. Consider:

# mkdir some_dir
# ls -ld some_dir
drwxr-xr-x 2 root root 4096 Oct 14 21:16 some_dir

So, the directory has 4096 bytes for meta data. ok. Let's make some files.

# pushd some_dir ; for i in {1..1000} ; do mktemp test.XXXXXXXXXXXXXX ; done ; popd

We just created 1000 files in some_dir.

# ls -ld some_dir
drwxr-xr-x 2 root root 49152 Oct 14 21:16 some_dir

Oh wow, the directory now needs 49k für meta data. Let's remove the files.

# find some_dir/ -type f -delete
# ls -ld some_dir
drwxr-xr-x 2 root root 49152 Oct 14 21:19 some_dir

The files are gone. But still 48k meta data. A find will still have to go through all the meta data in the directory to... well... find something.

    
por 15.10.2014 / 09:15
2

Seu sistema de arquivos pode ter algum dano nele. Tente executar fsck -f sobre ele (quando ele for desmontado), veja se ele encontra algum problema.

    
por 14.10.2014 / 16:43
1

Curioso por você não ter excluído todo o diretório e, em seguida, recriá-lo:

rm -rf foo_dir
mkdir foo_dir

Ou exclua os arquivos sem usar:

cd [path]/foo_dir
rm -rf *

Talvez a exclusão e a recriação do diretório ainda ajudem você.

    
por 14.10.2014 / 17:15

Tags