Como posso desfragmentar completamente o sistema de arquivos ext4?

Como posso desfragmentar completamente o sistema de arquivos ext4?

Eu querotodosmeus arquivos em um sistema de arquivos ext4 não estão fragmentados por alguns motivos. Infelizmente e4defrag(aconselhado aqui:Como desfragmentar um sistema de arquivos ext4) não consegue desfragmentar vários arquivos. Quais são minhas alternativas?

O sistema de arquivos já contém todos os arquivos (eles não devem ser alterados de forma alguma) e está quase cheio. Existem vários blocos livres (de acordo com df -h: 434M disponíveis de 85G e 80G usados) que podem ser usados ​​como buffer. Não preciso do sistema de arquivos montado durante a desfragmentação. Além disso, tenho outro sistema de arquivos disponível com espaço suficiente para usar como buffer.

Uma idéia que tenho é mover os arquivos para outro sistema de arquivos e copiá-los de alguma forma, informando ao sistema de arquivos para armazená-los de forma contígua.

[EDITAR]

Acabei de descobrir que não posso confiar na e4defragprodução. Ele conta arquivos com mais de uma extensão como fragmentados, embora saiba que as extensões são contíguas:

$ sudo filefrag file.file
file.file: 1 extent found
$ sudo e4defrag -vc file.file
e4defrag 1.45.5 (07-Jan-2020)
<File>
[ext 1]: start 22388736: logical 0: len 32768
[ext 2]: start 22421504: logical 32768: len 32768
[ext 3]: start 22454272: logical 65536: len 32768
[ext 4]: start 22487040: logical 98304: len 27962

 Total/best extents 4/1
 Average size per extent 126266 KB
 Fragmentation score 0
 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
 This file (file.file) does not need defragmentation.
 Done.

Responder1

Quero que todos os meus arquivos em um sistema de arquivos ext4 não sejam fragmentados por alguns motivos.

Embora existam razões legítimas para desfragmentar, nenhuma exigecada umarquivo a ser desfragmentado e contíguo. Os principais motivos pelos quais alguém pode querer que todos os arquivos sejam desfragmentados estão relacionados ao OCPD, o que é uma completa perda de tempo porque o sistema de arquivos ficará "fragmentado" novamente logo após ser montado no rw.

O sistema de arquivos... está quase cheio...

Nesse cenário, você provavelmente não conseguirá desfragmentar todos os arquivos porque os programas de desfragmentação do Linux tendem a funcionar no nível do arquivo e você não tem necessariamente espaço livre contíguo suficiente para desfragmentar todos os arquivos.

Uma idéia que tenho é mover os arquivos para outro sistema de arquivos e copiá-los de volta...

Essa é a sua opção mais viável. Entretanto, a alocação específica de arquivos é determinada pelo driver do sistema de arquivos.


Para reordenar os blocos basta ter um bloco livre como buffer.

Os desenvolvedores de sistemas de arquivos Linux não deram à desfragmentação a mesma prioridade que os desenvolvedores do Windows têm. Portanto, o problema não é tanto que seja tecnicamente impossível, mas que ninguém se preocupou em escrever programas para fazê-lo.

O fs pode ser definido como ro após a desfragmentação.

Em seguida, use um sistema de arquivos projetado para uso pessoal, como squashfs. Todos os arquivos serão desfragmentados, contíguos e até compactados.

Responder2

Se alguns dos seus arquivos forem grandes, pode ser tecnicamente impossível desfragmentá-los todos sem reformatar o sistema de arquivos.

Qualquersistema de arquivos ext4é composto por uma sequência de grupos de blocos. Por padrão, cada grupo de blocos tem 128 MiB de comprimento.

Cada grupo de blocos começa com um monte de metadados do sistema de arquivos (superbloco, descritor de grupo, bitmaps de alocação e tabelas de inode) seguidos por blocos de dados reais usados ​​por arquivos pertencentes a esse grupo de blocos. Isso significa que os metadados do sistema de arquivos são espalhados de maneira mais uniforme por todo o dispositivo.

No entanto, graças ao flex_bgrecurso opcional, vários grupos de blocos podem ser agregados em um único grupo maior. mke2fstem criado sistemas de arquivos por padrão com 16 grupos de blocos agrupados desde 2008. Supondo que você não tenha alterado isso ao criar o sistema de arquivos usando a -Gopção mkfs, seu sistema de arquivos provavelmente será dividido em grupos flexíveis de 2 GiB.

A menos que todos os seus arquivos sejam significativamente menores que 2 GiB, você inevitavelmente se depararia com uma situação em que o próximo arquivo a ser armazenado teria que ser fragmentado em dois ou mais grupos de blocos (flexíveis). É claro que isso acontecerá se algum de seus arquivos for maior que os blocos de dados utilizáveis ​​em um grupo de blocos (flex).

Para atingir seu objetivo, você provavelmente terá que reformatar o sistema de arquivos com uma configuração de -Gopção muito mais alta do que o padrão 16 para fazer com que o sistema de arquivos use grupos de blocos flexíveis realmente grandes.

Responder3

Antes do DOS 6, o conselho usual para desfragmentar uma partição FAT era:

  1. Copie os arquivos da partição para outra coisa;
  2. Limpe a partição;
  3. Recrie a estrutura de diretórios na partição vazia; e
  4. Copie os arquivos de volta.

Nunca tentei isso porque o MS-DOS 6 foi lançado (com seu utilitário de desfragmentação incluído) antes de a desfragmentação se tornar um problema para mim.

informação relacionada