O maior problema com a fragmentação é fragmentação do espaço livre , o que significa que quando o sistema de arquivos fica cheio e não há mais grandes partes livres do espaço livre, o desempenho do seu sistema de arquivos cai. Cada novo arquivo pode alocar apenas pequenos trechos de espaço de cada vez, por isso é muito fragmentado. Mesmo quando outros arquivos são excluídos, os arquivos gravados anteriormente são espalhados por todo o disco, fazendo com que novos arquivos sejam fragmentados novamente.
No caso de uso que você descreve acima (~ 500MB de arquivos, relativamente poucos sobrescritos ou novos arquivos sendo gravados, arquivos antigos de ~ 500MB sendo excluídos periodicamente, estou assumindo algum tipo de sistema de armazenamento de vídeo) você terá relativamente pouca fragmentação - supondo que o tamanho do seu arquivo permaneça relativamente constante. Isso é especialmente verdadeiro se suas gravações forem de thread único, já que vários segmentos de gravação não estarão competindo pela pequena quantidade de espaço livre e intercalando suas alocações de bloco. Para cada arquivo antigo excluído do disco, você terá algumas centenas de MB de espaço contíguo (supondo que o arquivo não tenha sido fragmentado para começar) e ele seria preenchido novamente.
Se você tiver vários gravadores simultâneos, usar fallocate()
para reservar grandes blocos de espaço para cada arquivo (e truncate()
no final para liberar espaço restante) evitará a fragmentação também. Mesmo sem isso, o ext4 tentará reservar (na memória) cerca de 8MB de espaço para um arquivo enquanto ele está sendo gravado, para evitar a pior fragmentação.
Eu recomendo que você mantenha pelo menos um múltiplo decente do seu tamanho de arquivo livre (por exemplo, 16GB ou mais) para que você nunca consiga consumir todos os dribs e drabs de blocos livres e introduzindo permanente fragmentação do espaço livre.