Como posso desfragmentar meu SSD no linux?

5

Esta página demonstra que a desfragmentação é benéfica para SSDs. Eu suponho que este tipo de desfragmentação tem que ser trim-aware, de modo a preservar o tempo de vida do disco. Como posso fazer isso no linux?

EDIT : Comentários apontaram que o conteúdo deste artigo é questionável.

    
por qdii 27.05.2013 / 19:40

7 respostas

12

Em geral, você pode ignorar completamente a fragmentação. Mais ainda para SSD que não sofrem de tempos de busca como HDD. A desfragmentação de um SSD não fará nada, exceto os ciclos de gravação de resíduos.

Embora possa haver casos extremos em que a fragmentação tem um efeito perceptível, como um arquivo esparso gravado em ordem aleatória (como fazem alguns clientes BitTorrent) ou quando o disco fica sem espaço livre, quando o último arquivo que foi escrito para ser dividido em milhares de fragmentos como não havia outro espaço consecutivo disponível para atender às necessidades.

Mas essa é a exceção. Isso não acontece normalmente. A maioria dos sistemas de arquivos é muito boa para evitar a fragmentação, e o kernel do Linux é bom para evitar efeitos nocivos causados pela fragmentação. Uma vez que mais de um processo lida / grava arquivos simultaneamente, o disco terá que estar em todos os lugares ao mesmo tempo.

Não há muitas soluções de desfragmentação para o Linux. O XFS tem xfs_fsr , o que funciona muito bem, então, se você quiser usar a desfragmentação, o XFS é uma boa escolha.

Você pode verificar a fragmentação de arquivos usando filefrag ou hdparm :

# filefrag debian-6.0.6-amd64-netinst.iso 
debian-6.0.6-amd64-netinst.iso: 4 extents found

# hdparm --fibmap debian-6.0.6-amd64-netinst.iso

debian-6.0.6-amd64-netinst.iso:
 filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors.
 byte_offset  begin_LBA    end_LBA    sectors
           0    3003928    3072407      68480
    35061760    2872856    2938391      65536
    68616192    2171576    2302647     131072
   135725056   56259072   56338047      78976

Se isso não lhe der centenas ou milhares de extensões (fragmentos), não é nada para se preocupar.

Um método genérico de desfragmentação é fazer uma cópia do arquivo e depois substituir o original por ele, como:

cp -a yourfile yourfile.defrag
mv yourfile.defrag yourfile

Seu sistema de arquivos deve ter uma boa quantidade de espaço livre, caso contrário, a probabilidade é alta de que o novo arquivo seja tão fragmentado quanto o antigo. (Verifique se o novo arquivo é melhor que o antigo antes de substituir).

Mas, como eu disse, geralmente não há necessidade de fazer isso, a menos que um arquivo tenha um caso muito ruim de fragmentação de alguma forma.

    
por 27.05.2013 / 20:09
11

Outros mencionaram que a defragmentação pode não ter efeito no SSD. (Eu percebo que esta é uma pergunta antiga, mas gostaria de adicionar contexto.)

Eu gostaria de avançar uma versão mais strong do mesmo argumento: o conceito de desfragmentação não faz nenhum sentido para o SSD. O SSD não grava blocos lógicos sequenciais em blocos sequenciais em flash; a fim de maximizar o rendimento, o controlador SSD irá espalhar os blocos em vários chips NAND (como um mini-RAID).

Veja: link

O controlador SSD descobre onde escrever blocos para melhor velocidade e também usar uniformemente cada célula flash. Portanto, mesmo os blocos lógicos que aparecem (no sistema operacional) em ordem sequencial são realmente armazenados em uma ordem completamente diferente em NAND - e isso é uma coisa boa. A ideia de desfragmentar algo que é suposto fragmentada não faz sentido.

    
por 11.09.2013 / 15:13
6

O autor do artigo está vendendo snakeoil. Embora seja verdade que você verá uma diminuição no desempenho em um SSD se fizer um IO totalmente aleatório de bloco pequeno (4k), isso nunca acontece na prática, mesmo em sistemas de arquivos do Windows que são notoriamente fragmentados. O efeito da fragmentação em um SSD é algo na ordem de 100 a 1.000 vezes menos que um HDD. Uma busca introduzida até mesmo a cada 64k tem impacto insignificante na taxa de transferência em um SSD. Quando você considera que os sistemas de arquivos Linux não se fragmentam o suficiente na prática para precisar desfragmentar mesmo em um HD, e o fato de que as gravações introduzidas por qualquer tentativa de desfragmentar reduzem a vida útil do disco, isso deve ser claramente evitado.

Se você insistir em desfragmentar o ext [234], poderá fazê-lo com o antigo programa e2defrag .

    
por 28.05.2013 / 05:21
6

Para ext4 , o defragger é chamado e4defrag . (Agora é parte do oficial e2fsprogs).

Há também um comando fstrim , que deve funcionar em ext4 e (eu acho) xfs . Ele envia solicitações de descarte para espaço não utilizado no sistema de arquivos. Pode ser particularmente útil se o seu sistema de arquivos não estiver montado com -o discard (ou seja, enviando descartes para arquivos excluídos imediatamente).

Nada disso é configurado automaticamente. A menos que você seja muito incomum, você não precisa de e4defrag .

O material TRIM é mais relevante. Ele foi desativado por padrão porque a história de desempenho na época não era clara (ou seja, a ativação às vezes causava grandes lentidões). Desculpe, este é o linux com novo hardware :). Eu tenho a tendência de ativar a opção discard mount no momento da instalação, e não vi problemas horríveis ao excluir arquivos. (Crucial m500 SSD).

Se você ler revisões de SSD, a maioria delas funcionará melhor se você não as manter 100% cheias :). Não é obrigatório, mas uma maneira de reservar o espaço (por exemplo, 10%) e impedir que ele seja usado é simplesmente não alocar todo o dispositivo quando você o particiona.

    
por 27.05.2013 / 20:44
0

A fragmentação é ruim para SSDs porque causa amplificação de gravação (os SSDs precisam copiar blocos inteiros de apagamento para gravações muito menores; SSDs recentes de baixa qualidade podem ir até 2 MB para apagar blocos). A desfragmentação também não é uma boa ideia, já que ela apenas agita as células para fazer com que a próxima gravação seja um pouco mais rápida (o link faz esse ponto: só porque a fragmentação é ruim, não significa que desfragmentar é melhor).

Em vez disso, você deve se concentrar em usar um sistema de arquivos que não cause fragmentação. XFS / ext4 / Btrfs pré-aloca extensões inteiras. Sistemas de arquivos estruturados em log (nilfs2, f2fs) também são bons. Se você configurá-lo com o tamanho de bloco correto, o bcache também se comportará como um sistema de arquivos estruturado em log.

    
por 21.09.2013 / 01:18
0

A ferramenta que você está procurando é fstrim . Pode ser agendado diariamente, semanalmente ou durante a noite, se você não desligar o seu laptop / servidor:

cat /etc/cron.weekly/01-fstrim
#!/bin/sh
fstrim /
fstrim /home

chmod +x /etc/cron.weekly/01-fstrim

Tente executar o script agora. Ele não deve imprimir nenhuma mensagem de erro. Se vocês mudou a configuração do LUKS, você pode precisar reiniciar antes de fazer isso.

link

    
por 14.11.2013 / 20:35
0

Existe um guia do usuário de todos os fabricantes de HDDs, e eu li um desses. Isso não é uma boa idéia para desfragmentar SSD. Não há peças mecânicas em SSD como em HDD-s e a organização de DATA é outro tipo. A busca de dados no SSD é diferente e não precisa ser desfragmentada. O live do SSD será mais curto, se-desfragmentar frequentemente.   Por exemplo: link Se o link não funcionar, você deve tentar no google "SSD USER GUIDE". O guia do usuário é óbvio, não há necessidade de desfragmentar. Não importa qual seja o sistema operacional, a unidade SSD funcionando da mesma maneira, é assim que esse hardware está funcionando.

    
por 28.07.2014 / 17:48