Qual é o caminho mais rápido para remover milhares de arquivos em um sistema de arquivos btrfs?

4

Atualmente, tenho um ponto de montagem btrfs com uma estrutura como esta: #

/mountpoint/month/day/hourAs24/

e cada diretório de folhas contém entre 5.000 a 20.000 arquivos pequenos. Lá guardo os arquivos por dois meses. Todos os dias eu removo o diretório com mais de 60 dias com o comando

rm -R /mountpoint/month/day/

Este comando leva séculos para ser executado e a carga no servidor é extremamente alta enquanto o comando é executado.

Seria melhor criar subvolumes btrfs em /mountpoint/month/ para todos os dias e depois limpar os subvolumes em um único comando?

Existem outras soluções rápidas e leves para se livrar dos arquivos em um diretório btrfs em um único comando?

Editar: Para esclarecer a situação. Na estrutura, as pastas month , day e hourAs24 são variáveis que são substituídas pelos valores correspondentes da data e hora atual.

Editar após a solução: Funciona sem problemas na minha máquina de teste. E todas as seguintes obras vivem com o ponto de montagem montado! Primeiro eu crio diretórios normais para cada mês com

mkdir /mountpoint/month

Em seguida, crie subvolumes btrfs para cada dia do mês com

btrfs subvolume create /mountpoint/month/day

então eu crio os diretórios normais para cada hora do dia com

mkdir /mountpoint/month/day/hourAs24

E depois de 60 dias eu posso facilmente limpar o diretório do dia

btrfs subvolume delete /mountpoint/month/day

(Agora tenho que esperar 60 dias para ver o desempenho no servidor de produção)

    
por mailq 31.07.2011 / 17:27

3 respostas

8

Eu iria na rota dos subvolumes, eu mesmo. Você simplesmente não pode vencê-lo pela velocidade, e se você inclinar a cabeça e fechar os olhos, pode até dizer que parece a maneira "certa" de armazenar os arquivos de qualquer maneira ...

    
por 31.07.2011 / 20:38
2

Instalar e excluir um sistema de arquivos, seguido pela criação de um novo sistema de arquivos e sua montagem, será muito mais rápido do que remover milhares de objetos em um único sistema de arquivos. As operações de metadados necessárias para a exclusão são ordens de grandeza superiores às operações de E / S necessárias para remover em massa e, em seguida, recriar uma nova.

O LVM é flexível o suficiente para lidar com esse tipo de coisa.

Como alternativa, se isso não for possível, você pode seguir a rota de criação de grandes arquivos de loopback no sistema de arquivos BTRFS que você formata como BTRFS e monta em seus diretórios. Não tão rápido quanto o método LVM, mas ainda marcadamente mais rápido (ou deveria ser) do que desvincular todos esses arquivos. O IIRC, BTRFS também suporta arquivos esparsos que podem ser uma boa escolha para esta rota se você for lá.

    
por 31.07.2011 / 17:45
-3

find talvez mais rápido:

find /mountpoint -mtime +60 -delete
    
por 31.07.2011 / 17:49