Eu quero que todos os meus arquivos em um sistema de arquivos ext4 não sejam fragmentados por motivos. Infelizmente e4defrag
(recomendado 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á possui 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 ideia que tenho é mover os arquivos para outro sistema de arquivos e, em seguida, copiá-los de volta, de alguma forma, dizendo ao sistema de arquivos para armazená-los de forma contígua.
[EDITAR]
Acabei de descobrir que não posso confiar na e4defrag
saída. Ele conta arquivos com mais de uma extensão como fragmentados, enquanto sabe 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.
Embora existam razões legítimas para desfragmentar, nenhuma exige que cada arquivo seja 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 rw.
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.
Essa é a sua opção mais viável. No entanto, a alocação de arquivo específica é determinada pelo driver do sistema de arquivos.
Os desenvolvedores do sistema de arquivos Linux não deram à desfragmentação a mesma prioridade que os desenvolvedores do Windows. Portanto, o problema não é tanto que seja tecnicamente impossível, mas que ninguém se preocupou em escrever nenhum programa para fazê-lo.
Em seguida, use um sistema de arquivos projetado para uso em ro, como o squashfs. Todos os arquivos serão desfragmentados, contíguos e até compactados.
Se alguns de seus arquivos forem grandes, pode ser tecnicamente impossível desfragmentá-los sem reformatar o sistema de arquivos.
Qualquer sistema 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 vários metadados do sistema de arquivos (superbloco, descritor de grupo, bitmaps de alocação e tabelas de inodes) seguidos por blocos de dados reais usados por arquivos pertencentes a esse grupo de blocos. Isso significa que os metadados do sistema de arquivos estão espalhados uniformemente por todo o dispositivo.
No entanto, graças ao
flex_bg
recurso opcional, vários grupos de blocos podem ser agregados em um único grupo maior.mke2fs
tem 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-G
opçã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 certamente 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 muito maior da
-G
opção do que o padrão 16 para fazer o sistema de arquivos usar grupos de blocos flexíveis realmente grandes.Antes do DOS 6, o conselho usual para desfragmentar uma partição FAT era:
Eu nunca tentei isso porque o MS-DOS 6 foi lançado (com seu utilitário de desfragmentação incluído) antes que a desfragmentação se tornasse um problema para mim.