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 ...
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)
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á.
find
talvez mais rápido:
find /mountpoint -mtime +60 -delete
Tags btrfs filesystems remove