A família de sistema de arquivos ext2 / ext3 / ext4 não precisa de desfragmentação.
Que design subjacente ajuda esse sistema de arquivos a não ficar fragmentado?
A família de sistema de arquivos ext2 / ext3 / ext4 não precisa de desfragmentação.
Que design subjacente ajuda esse sistema de arquivos a não ficar fragmentado?
Respostas:
Uma maneira pela qual o sistema de arquivos ext4 mantém a fragmentação sob controle é com o processo de alocação atrasada (modo de alocação padrão do ext4).
A alocação atrasada funciona adiando o mapeamento de blocos de dados de arquivos recém-gravados para blocos de disco no sistema de arquivos até o tempo de write-back.
Isso funciona alocando a maioria dos blocos para um arquivo ao mesmo tempo, quando o número total de blocos (ou pelo menos um estádio) em cada arquivo é conhecido. Isso permite que o alocador de blocos ( mballoc
mencionado na resposta da MMK) faça um trabalho melhor ao encontrar uma área de espaço livre de tamanho apropriado para colocar o arquivo.
No sistema de arquivos ext3, existe um alocador de blocos para o disco para cada bloco e, portanto, é bem possível que a fragmentação possa ocorrer.
No entanto, no sistema de arquivos ext4, existe um alocador de vários blocos que pode atrasar a gravação de blocos no disco, para que ele possa alocar vários blocos ao mesmo tempo em um único pedaço de disco para permitir uma gravação contígua - e assim, é menos provável que a fragmentação possa ocorrer (ainda é possível, apenas menos provável)
Pelo menos para o Ext2 (e o Ext3, embora eu tenha menos certeza), não há nada no formato / estrutura em disco que impeça a desfragmentação.
A falta de necessidade de desfragmentação vai residir no nível de implementação, que variará de SO para SO. Ou seja, dependendo da implementação, um arquivo no Ext2 pode ou não ser fragmentado.
Se a fragmentação for evitada, isso provavelmente ocorrerá devido à alocação atrasada de blocos físicos. Ou seja, em algum nível da implementação, o sistema de arquivos armazenará em cache os dados (e os acessará através do número lógico do bloco) até que sejam gravados / confirmados no disco. Quando os dados são finalmente gravados no disco, os blocos físicos devem ser alocados. O algoritmo de alocação pode (ou não) alocar um número de blocos físicos disponíveis contíguos para os dados.
Espero que isto ajude.