Eu tenho um servidor de correio bastante antigo (CentOS 6) com mais de 4 TB de correio em maildirs (então você pode imaginar um número de arquivos). É VM (VMware 7) no armazenamento SSD.
Eu me pergunto se devo me importar com a fragmentação do FS? Posso sincronizar todo o armazenamento com o novo disco da VM (efetivamente tornar a fragmentação quase no nível zero) ou executar a ferramenta de desfragmentação online (já que é XFS), mas devo me importar? O armazenamento com backup em SSD parece perdoar alguma coisa?
Como a desfragmentação ajuda?
Ao armazenar dados em um HDD com um disco giratório, a desfragmentação reduz significativamente a penalidade de tempo de busca mecânica. Sistemas de arquivos altamente fragmentados nesses dispositivos podem se tornar extremamente lentos. Os dispositivos de estado sólido não têm nenhuma penalidade de busca. No entanto, os SSDs modernos de alta velocidade geralmente têm IOPS limitado, o que significa que a taxa na qual os comandos podem ser enviados pelo barramento é o gargalo, não a capacidade do dispositivo de acessar os dados reais e atender a essas solicitações.
A desfragmentação de um sistema de arquivos aumenta o número de setores lógicos contíguos em um determinado arquivo. Isso pode melhorar o desempenho, mesmo para um SSD, porque a leitura de uma pequena parte de um arquivo pode ser feita com uma única solicitação de E/S. Se essa mesma parte foi fragmentada, pode levar várias solicitações. Isso pode facilmente saturar o barramento ao usar um SSD extremamente rápido com um sistema de arquivos altamente fragmentado.
No entanto, existem maneiras melhores de melhorar o desempenho.
Em vez disso, use TRIM
Se você deseja melhorar o desempenho de um SSD, precisa ajudar o SSD a saber quais blocos podem ser apagados usando TRIM . Um comando TRIM permite que o sistema de arquivos informe ao SSD quais setores estão vazios e podem ser entregues ao coletor de lixo, mesmo que ainda tenham dados (não alocados) neles. Isso melhora muito a capacidade do dispositivo de gerenciar o armazenamento. No Linux, você pode executar o comando
fstrim /var/mail
(ou onde quer que esteja sua partição) para fornecer ao SSD uma lista de setores não alocados que podem ser descartados. Consultefstrim(8)
para obter mais detalhes sobre o uso de comandos.O TRIM melhora muito a capacidade do SSD de neutralizar a amplificação de gravação e permite um melhor nivelamento de desgaste. Isso não acelerará as leituras do dispositivo, mas acelerará as gravações. Se sua unidade tiver muito pouco espaço livre, o benefício será menor (afinal, você não teria muitos setores livres).
As unidades de estado sólido têm sua própria forma de desfragmentação
Como a FTL (camada de tradução flash, uma parte do controlador flash) de um SSD é responsável por mapear setores lógicos para setores físicos, não há necessidade séria de desfragmentar um sistema de arquivos na maioria das situações. O tempo que leva para desfragmentar e o desgaste geralmente não valem a pena.
Os SSDs tentarão automaticamente otimizar o armazenamento de arquivos. Essa otimização está sujeita às limitações do flash NAND. Para entender as limitações, temos que descrever alguma terminologia:
As células são a menor unidade física que armazena dados em um dispositivo flash. Nos dispositivos SLC, cada célula armazena um único bit. Dispositivos MLC, cada célula armazena dois (mantendo quatro níveis de tensão diferentes). Os dispositivos TLC armazenam três (retendo 8) e QLC, quatro (retendo 16). Múltiplas células, mais algumas extras para conter códigos de correção de erros que ajudam na recuperação de falhas de células individuais, compõem uma página .
As páginas são uma coleção de células que podem ser lidas ou gravadas de uma só vez. Uma página é como os dispositivos flash NAND implementam setores físicos, e a maioria das páginas tem entre 512 bytes e 4 KiB de tamanho. As páginas só podem ser gravadas se tiverem sido apagadas (todos os bits inicializados em 1). Se uma página contiver dados, ela não poderá ser substituída sem primeiro ser apagada. Isso se deve ao fato de que um único bit só pode ser alterado de 1 para 0. O contrário só pode ser feito apagando uma página inteira. No entanto, não é possível apagar páginas individuais. Para apagar uma página, você deve apagar o bloco inteiro .
Os blocos são uma coleção de páginas e são medidos em dezenas ou centenas de kilobytes. 128 páginas individuais de 4 KiB podem constituir um único bloco de 512 KiB. A única ação que pode ser executada em um bloco individual é apagar. Isso apagará todas as páginas que ele contém. Quaisquer dados em qualquer uma dessas páginas que precisem ser preservados devem ser movidos para outro bloco que já tenha algumas páginas apagadas. Isso é feito pelo controlador de flash de forma transparente. Se você tiver poucos blocos livres, o controlador pode precisar mover alguns dados para gravar qualquer coisa, o que diminui a velocidade das gravações continuamente.
Isso representa um problema: para otimizar as gravações com mais eficiência, o SSD precisa saber quais setores o sistema de arquivos não precisa mais. No entanto, os dispositivos de armazenamento em bloco nem sequer têm um conceito de sistema de arquivos. Eles não conseguem distinguir entre um setor que não está mais alocado para nenhum arquivo, mas ainda contém dados restantes e um setor que ainda faz parte de um arquivo e deve ser preservado. Como tornar os SSDs cientes dos sistemas de arquivos seria uma tarefa de Sísifo, é melhor simplesmente informar ao SSD quais setores o sistema de arquivos não precisa mais. Os SSDs modernos suportam isso via TRIM.
Você não deve tentar desfragmentar um arquivo/pasta em um SSD. A desfragmentação não fará nada útil para armazenamento de estado sólido e não deve ser usada. "Fragmentação" realmente não se aplica à organização de células em um SSD.
Se você precisar Shrink (reduzir o espaço ocupado pela máquina), poderá fazer isso no VMware usando o comando shrink.
Eu uso muito encolher, mas você teria que tentar a máquina mais antiga. Deve funcionar.
Abra uma sessão de terminal, a partir daí execute:
Deixe o psiquiatra terminar. Há um componente de terminal que atingirá 100% e, em seguida, uma janela GUI do VMware que reduzirá a máquina.
A redução recuperará o espaço e removerá o espaço não utilizado na máquina, mas com pouco ou nenhum impacto no desempenho
SSDs não custam tempo extra para procurar entre partes distantes do disco, então os ganhos potenciais são muito pequenos. Como, na melhor das hipóteses, apenas uma pequena redução no uso da CPU para o servidor, talvez frações de uma porcentagem como um palpite.
Mas é uma pergunta válida; se as leituras de vários arquivos pequenos puderem ser combinadas no nível do bloco em uma leitura maior, menos comandos serão enviados ao SSD, portanto, você obterá mais largura de banda disponível. Pelo menos é uma coisa razoável esperar ou questionar. O mesmo para ler um arquivo maior.
Mas provavelmente ainda não justifica fazer nada, especialmente porque o XFS só pode desfragmentar arquivos individuais , não o AFAIK agrupar vários arquivos pequenos em armazenamento contíguo (em ordem de nome de arquivo ou não).
Seus arquivos são em sua maioria pequenos e cada arquivo individual provavelmente foi escrito de uma só vez, não anexado posteriormente. Você diz que tem maildir, um arquivo por mensagem de e-mail. Diferente
mbox
do tradicional/var/mail
, em que há um arquivo por caixa de correio com as mensagens anexadas à medida que chegam. Nesse caso, pode haver fragmentação, embora a exclusão de uma mensagem envolva reescrever pelo menos a parte final do arquivo a partir desse ponto.Portanto, sendo esse o caso, você provavelmente não tem muita fragmentação do tipo que o XFS pode fazer; a maioria dos arquivos provavelmente tem apenas uma extensão. Você pode verificar com
filefrag /var/mail/**/* | grep -v '1 extent found'
.Para obter mais detalhes, você pode usar
filefrag -e
para ver as extensões individuais de um arquivo ou, como está no XFS, pode usarxfs_bmap
para obter as mesmas informações. Veja uma resposta unix.SE para exemplo output .Como comenta @Roger Lipscombe, as células flash físicas que armazenam os dados de um arquivo podem não ser contíguas, mesmo que os endereços do bloco lógico sejam; a camada de remapeamento flash dentro do SSD pode fragmentar nesse nível. Mas tudo bem; o firmware do SSD deve ser capaz de ler as partes necessárias do flash com sobrecarga mínima; ao contrário do kernel ter que enviar comandos em algum protocolo (SATA, SAS ou NVMe), o firmware está conectado diretamente ao flash bruto e provavelmente não é mais lento ler 2 regiões separadas do que uma região mais longa.
A desfragmentação de unidades de estado sólido não aumenta o desempenho do disco, pois os tempos de movimento de busca/cabeça não existem como em unidades com partes móveis. Também aumentará o desgaste dos chips, que têm um número limitado de ciclos de gravação, resultando em vida útil reduzida.
Se você precisar reduzir uma partição, poderá fazer isso com a unidade desmontada.