Por que ext2 e sucessores não precisam de desfragmentação?

8

A família de sistemas de arquivos ext2 / ext3 / ext4 não precisa de desfragmentação.

Qual design subjacente ajuda esse sistema de arquivos a não se fragmentar?

    
por atur 20.08.2014 / 13:49

3 respostas

9

Uma maneira pela qual o sistema de arquivos ext4 mantém a fragmentação em cheque, é 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 arquivo 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 bloco (o mballoc mencionado na resposta do MMK) faça um trabalho melhor de encontrar uma área apropriadamente dimensionada de espaço livre para colocar o arquivo.

    
por Aaron 20.08.2014 / 14:53
8

No sistema de arquivos ext3, há um alocador de bloco para o disco de cada bloco e, portanto, é bem possível que ocorra fragmentação.

No entanto, no sistema de arquivos ext4 existe um alocador multi-bloco que pode atrasar a gravação de blocos no disco, para que ele possa alocar vários blocos por vez em um único bloco 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)

    
por mmk 20.08.2014 / 14:31
5

Pelo menos para o Ext2 (e para o Ext3, embora eu tenha menos certeza), não há nada no formato / estrutura do disco que impeça a desfragmentação.

A falta de necessidade de desfragmentação vai residir no nível de implementação, que irá variar de sistema operacional para sistema operacional. Ou seja, dependendo da implementação, um arquivo no Ext2 pode ou não ser fragmentado.

Se a fragmentação for evitada, isso provavelmente será 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á por meio do número do bloco lógico) até o momento em que forem 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 contíguos disponíveis para os dados.

Espero que isso ajude.

    
por Sparky 20.08.2014 / 18:00

Tags