Aqui estão alguns pontos de referência para várias operações e sistemas de arquivos para sua referência. (Em um sistema ocupado, é claro, você teria resultados diferentes, mas esperamos que isso lhe dê uma idéia do que esperar).
Se eu estivesse na sua cadeira, tentaria obter uma referência básica do cenário:
- estabeleça por quanto tempo a operação levará em hardware nu isolado de todo o resto (e sim, deve demorar muito, muito menos de 7 a 8 horas, mesmo em hardware bem antigo).
- tente adicionar outras operações que normalmente ocorrem de maneira controlada e veja o que realmente faz com que ele seja executado por tanto tempo
Alguns números.
Em um notebook de 5 anos ext3 montado rw, noatime, em execução no topo e nada muito mais crie diretórios 10k com script shell create10kdirs.sh
#!/bin/bash
for i in $(seq 10000)
do
mkdir $i
done
tempo de sudo ./create10kdirs.sh
24.59usuário
20.70system
0: 47.04desenvolvido
96% da CPU (0avgtext + 0avgdata 0maxresident) k80inputs + 8outputs (1major + 2735150minor) pagefaults 0swaps
delete 10k diretórios com
sudo time rm -rf
0.10user
19.75system
0: 20.71 encapsulado
95% da CPU (0avgtext + 0avgdata 0maxresident) k0inputs + 8outputs (0major + 222minor) pagefaults 0swaps
mesmo hardware, ext4 montado rw, noatime
criar diretórios 10k com script de shell
sudo time create10kdirs.sh
23.96user
22.31sistema
0: 49,26 encapuçado
93% da CPU (0avgtext + 0avgdata0maxresident) k1896inputs + 8outputs (20major + 2715174minor) pagefaults 0swaps
delete 10k diretórios com
sudo time rm -rf
0.13user
16.96system
0: 28.21 encapsulado
60% da CPU (0avgtext + 0avgdata0maxresident) k10160inputs + 0outputs (1major + 219minor) pagefaults0swaps
Notebook de 4 anos, xfs montado em rw, relatime, nobarrier em USB
sudo time create10kdirs.sh
14.19user
13.86sistema
0: 29.75 encapsulado
94% da CPU (0avgtext + 0avgdata0maxresident) k432inputs + 0outputs (1major + 2735243minor) pagefaults 0swaps
delete 10k diretórios com o
sudo time rm -rf
0.13user
2.65system
0: 08.20elapsed
33% CPU (0avgtext + 0avgdata 0maxresident) k120inputs + 0outputs (1major + 222minor) pagefaults 0swaps
Conclusão: Este hardware antigo apagaria 400k arquivos pequenos + pastas no ext3 em aproximadamente 21s * 40 = 12m40s. No xfs (sem barreiras) ele faria isso em aproximadamente 5m20s. Concedida em ambos os casos de teste, a máquina de teste não estava sob carga pesada, mas para mim parece que seus problemas não estão estritamente relacionados à sua escolha do sistema de arquivos.
EDIT2 Além disso, depois de correr acima de benchmarks fui tentar o delete com encontrar . -mindepth 1 -maxdepth 1 -delete
e os resultados!:
ext3
excluir diretórios de 10k com
sudo tempo encontrar. -mindepth 1 -maxdepth 1 -delete
0.04user
0.44system
0: 00.88elapsed
55% da CPU (0avgtext + 0avgdata 0maxresident) k516inputs + 8outputs (1major + 688minor) pagefaults0swaps
ext4
excluir diretórios 10k com o
sudo tempo encontrar. -mindepth 1 -maxdepth 1 -delete
0.05user
0.66system
0: 01.02elapsed
70% da CPU (0avgtext + 0avgdata 0maxresident) k568inputs + 0outputs (1major + 689minor) swaps de pagefaults
xfs
excluir diretórios 10k com o
sudo tempo encontrar. -mindepth 1 -maxdepth 1 -delete
0.06user
Sistema 0.84system
0: 04.55 encapsulado
19% CPU (0avgtext + 0avgdata 0maxresident) k416inputs + 0outputs (3major + 685minor) pagefaults 0swaps
A conclusão real é que rm -rf não é muito inteligente e que vai ter baixo desempenho para árvores grandes. (desde que meu caso de teste seja realmente representativo).
Nota: Eu também testei a variante xargs e é rápido, mas não tão rápido quanto o acima.