Opções de desfragmentação no sistema de arquivos Ext4

1

Eu tenho os seguintes dispositivos com Linux Mint 18.1 em laptops e GNU/Linux Debian 9 no servidor.

(todos são de 64 bits e com desktop Cinnamon.)

Todos os dispositivos de drive são formatados com o sistema de arquivos ext4 ; O RAID 1 é feito utilizando mdadm .

  1. Laptop com 1 SSHD (não deve ser confundido com o HDD).

  2. Laptop com 3 unidades: 2 x HDDs de consumo em RAID 1 e 1 x SSD.

  3. Servidor com 5 unidades: 4 x HDDs empresariais em duas vezes RAID 1 e 1 x SSD .

Eu tenho o sistema nesses SSDs e nunca desfragmentaria um SSD.

A pergunta é sobre HHDs e um SSHD.

Eu encontrei um antigo PDF delineando mais alguns recursos para e4defrag .

  1. Por que o sistema de arquivos deve ser montado, de acordo com essa mensagem de erro ao tentar desfragmentar um sistema de arquivos desmontado? Eu quero entender por que isso é:

    Filesystem is not mounted
    
  2. Eu gostaria de ter implementado a desfragmentação de espaço livre. AFAIK está agora sob revisão. É possível para mim, por exemplo? compilar e4defrag da fonte com essas opções disponíveis ou de qualquer forma?

    e4defrag -f /deviceOrDirectory
    
  3. Eu também gostaria de usar o recurso de dados relevantes:

    e4defrag -r /deviceOrDirectory
    

Tenho muitas razões relevantes para acreditar que a fragmentação dessas máquinas está diminuindo a velocidade de leitura, por exemplo:

  1. Extraído do servidor com os HDDs RAID 1 :

    [2556/30987]/raid1a/bitcoind/blocks/rev00820.dat: 100%  extents: 16 -> 1  [ OK ]
    
  2. Extraído do laptop com os HDs RAID 1 :

    [29405/50810]/raid1/movies/SGA-HEVC/S04E01 - Adrift.mp4:  100%  extents: 31 -> 6  [ OK ]
    

Como você pode ver, a desfragmentação não foi capaz de colocar o arquivo de 31 blocos em 1 peça. Claro que você pode argumentar que é um arquivo de filme, então não importa. É verdade, mas apenas neste caso.

O comando que uso para iniciar a desfragmentação:

  1. No servidor:

    sudo e4defrag -v /dev/md1
    
  2. No laptop:

    sudo e4defrag -v /raid1/
    

Não parece importar se invoco o comando usando o nome do dispositivo ou um diretório.

Você pode me apontar na direção certa?

    
por Vlastimil 03.04.2017 / 05:04

1 resposta

2

e4defrag precisa que o sistema de arquivos seja montado porque solicita ao driver do sistema de arquivos do kernel que execute a desfragmentação, mas não faz isso sozinho.

Quanto à desfragmentação de espaço livre e à desfragmentação de arquivos relevante, as correções nunca foram concluídas; a última menção na lista de discussão relevante data de 2014 :

The e4defrag is in e2fsprogs, and the code is still getting maintained and improved. Dmitry Monakhov has in particular added a lot of “torture tests”, and found a number of race conditions in the underlying kernel code. He recently also sent a code refactor of the kernel code which significantly improved it and (shrank the size of ext4 by 550 lines of code).

That being said, there hasn't been any real feature development for e4defrag in quite some time. There has been some discussion about what the kernel APIs might be to support this feature, but there has never been a finalized API proposal, let alone an implementation.

Então, duvido que exista algo que valha a pena testar atualmente.

    
por 03.04.2017 / 16:38