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 ( mballocmencionado na resposta da MMK) faça um trabalho melhor ao encontrar uma área de espaço livre de tamanho apropriado para colocar o arquivo.
Lembre-se de que isso é apenas um recurso do driver ext4 . Agora, eu não sei se muito tecnicamente falando que não poderia montar os fs mais velhos com tal opção (pelo menos parcialmente ). Ainda a partir de agora, o DELALLOC está marcado como somente ext4 .
mirh 25/01
8
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.
Na verdade, existe um utilitário e2defrag, que pode ser necessário (em discos bastante completos com muitos arquivos escritos aleatoriamente). O alocador atrasado do ext4 torna isso ainda menos provável. Mas mesmo o ext2 tinha algum tipo de alocação / gravação atrasada, tornando menos necessário executar um utilitário de desfragmentação do que o alocador primitivo do MS-DOS®.
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).
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.fonte
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)
fonte
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.
fonte