Restaurando o desempenho e estimando a vida de uma unidade SSD usada?

70

Minha antiga unidade SSD de 128 GB tem cerca de um ano e meio de idade e, desde então, atualizei para outra unidade.

Gostaria de limpar meu antigo SSD para ...

  • restaurar seu desempenho a níveis quase novos

  • reabilitá-lo e geralmente fazer um exame de saúde

Como faço para fazer isso?

Jeff Atwood
fonte
4
Embora não cubra a restauração, você pode achar este post interessante para impedir que isso aconteça.
Tamara Wijsman
11
Talvez eu tenha esquecido, mas não vi nenhuma das respostas abaixo " marcada ". No caso desta pergunta, estou realmente curioso sobre o que acabou por funcionar "melhor" para você. (Se acontecer de você se lembrar ...)
irracional John

Respostas:

56

No Linux, basta executar

hdparm --trim-sector-ranges start:count /dev/sda

passando o bloco varia você deseja cortar em vez de starte counte o dispositivo SSD no lugar de /dev/sda. Tem a vantagem de ser rápido e não escrever zeros na unidade. Em vez disso, ele simplesmente envia comandos TRIM para o controlador SSD, informando que você não se importa com os dados desses blocos e pode assumir livremente que eles não são usados ​​em seu algoritmo de coleta de lixo.

Você provavelmente precisa executar este comando como root. Como esse comando é extremamente perigoso, pois pode causar imediatamente grandes perdas de dados, você também precisa passar o --please-destroy-my-driveargumento para hdparm(eu não o adicionei à linha de comando para evitar a perda acidental de dados causada por copiar e colar).

Na linha de comando acima, /dev/sdadeve ser substituído pelo dispositivo SSD ao qual você deseja enviar os comandos do TRIM. starté o endereço do primeiro bloco (setor) para TRIM e counté o número de blocos a serem marcados como livres desse endereço inicial. Você pode passar vários intervalos para o comando.

Tendo feito isso pessoalmente com o hdparm v9.32 no Ubuntu 11.04 no meu laptop com um Crucial RealSSD C300 de 128 GB, eu tenho que apontar um problema: não consegui passar o número total de blocos de disco (0: 250069680) como o intervalo . Eu manualmente (essencialmente "procurei binário" à mão) encontrei um valor grande o suficiente para a contagem de blocos que funcionava (40000) e consegui emitir comandos TRIM em uma sequência de 40000 intervalos para liberar todo o disco. É possível fazer isso com um simples shell script como este (testado no Ubuntu 11.04 sob root):

 # fdisk -lu /dev/sda

 Disk /dev/sda: 128.0 GB, 128035676160 bytes
 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
 ...  

para apagar toda a unidade, pegue esse número total de setores e substitua 250069680 na seguinte linha por esse número e execute (adicionar --please-destroy-my-drive):

 # i=0; while [ $i -lt 250069680 ]; do echo $i:40000; i=$(((i+40000))); done \
 | hdparm --trim-sector-ranges-stdin /dev/sda

E pronto! Você pode tentar ler o conteúdo bruto do disco com hexedit /dev/sdaantes e depois e verificar se a unidade descartou os dados.


Obviamente, mesmo se você não quiser usar o Linux como o sistema operacional principal da máquina, poderá aproveitar esse truque inicializando um CD ao vivo e executando-o na unidade.

Mehrdad Afshari
fonte
3
Excelente gravação, mas isso infelizmente não funcionará para SSDs que não sejam da TRIM. Para isso, você precisará ir um pouco mais longe. Veja o wiki do ATA em kernel.org para obter instruções sobre como fazer isso com o hdparm. Seria ainda melhor se você pode modificar sua entrada original para incluir esta informação :)
James
"fstrim" é uma versão fácil das opções acima (veja resposta em separado).
Bryce
@Bryce, incorreto; O TRIM é apenas informativo e destina-se por razões de desempenho, não de segurança, o que significa que a unidade pode ignorar o comando ou atrasar o apagamento até mais tarde, como a maioria das unidades.
Psusi
24

Primeiro, vamos começar entendendo exatamente o que causa a degradação do desempenho. Sem saber disso, muitas pessoas sugerem soluções inadequadas (como eu já vejo acontecendo). O ponto crucial de toda essa situação se resume basicamente ao seguinte fato, conforme citado na Wikipedia . Lembre-se, é importante:

Com a memória flash NAND, as operações de leitura e programação devem ser executadas uma página de cada vez, enquanto o desbloqueio e a exclusão devem ocorrer de maneira bloco.

Os SSDs são compostos de flash NAND e o flash consiste em "blocos". Cada bloco contém muitas "páginas". Por uma questão de simplicidade, vamos imaginar que acabamos de comprar um novo e brilhante SSD que contém um bloco único de memória e esse bloco consiste em 4 páginas vazias.

Por uma questão de clareza, diferencio páginas vazias, páginas usadas e páginas excluídas com ∅, 1 e X. A chave é que existe uma diferença entre cada uma delas na perspectiva dos controladores! Não é tão simples quanto 1 e 0. Portanto, para começar, as páginas em nossa nova unidade têm a seguinte aparência:

∅, ∅, ∅, ∅ (todos vazios)

Agora, vamos gravar alguns dados na unidade e eles acabam sendo armazenados nessa primeira página, assim:

1, ∅, ∅, ∅

Em seguida, escrevemos um pouco mais de dados, apenas desta vez o suficiente para exigir duas páginas e, portanto, acaba sendo armazenado na 2ª e 3ª página:

1, 1, 1, ∅

Estamos ficando sem espaço! Decidimos que realmente não precisamos dos dados iniciais que escrevemos, então vamos excluí-los para liberar espaço .:

X, 1, 1, ∅

Finalmente, temos outro grande conjunto de dados que precisamos armazenar e que consumirão as duas páginas restantes. É ONDE O DESEMPENHO OCORRE EM CONDUTORES SEM APARTAMENTO !! Indo do nosso último estado para isso:

1, 1, 1, 1

... requer mais trabalho do que a maioria das pessoas imagina. Novamente, isso se deve ao fato de que o flash só pode ser apagado em blocos, e não em páginas, exatamente o que a transição final acima exige. O diferenciador entre SSDs TRIM e não baseados em TRIM é quando o trabalho a seguir é realizado!

Como precisamos usar uma página vazia e uma página excluída, o SSD precisa primeiro ler o conteúdo de todo o bloco em algum armazenamento / memória externa, apagar o bloco original, modificar o conteúdo e, em seguida, gravá-lo novamente em o bloco. Não é tão simples como uma "gravação", mas agora se tornou uma "leitura-apagar-gravação". Essa é uma grande mudança e, para que ocorra enquanto escrevemos muitos dados, é provavelmente o momento mais inoportuno para que ocorra. Tudo poderia ser evitado se a página "excluída" fosse recuperada antes do tempo, que é exatamente o que o TRIM pretende fazer. Com o TRIM, o SSD recupera nossas páginas excluídas imediatamente após a exclusão ou em outro momento oportuno que seus algoritmos TRIM considerem apropriado. A parte importante é que, com o TRIM, isso não acontece quando estamos no meio de uma gravação!

Sem o TRIM, não podemos evitar o cenário acima, pois preenchemos nossas unidades com dados. Felizmente, alguns SSDs mais novos vão além do TRIM e efetivamente fazem a mesma coisa que o TRIM em segundo plano no nível do hardware sem os comandos ATA necessários (alguns chamam isso de coleta de lixo). Mas para aqueles de nós que não tiveram o suficiente, é importante saber que gravar zeros em toda a unidade não é suficiente para recuperar o desempenho original !!!!! Gravar todos os zeros na unidade não indica ao controlador que a página em flash está livre para gravação. A única maneira de fazer isso em uma unidade que não oferece suporte ao TRIM é chamar o comando ATA secure erase em sua unidade usando uma ferramenta como HDDErase (via Wayback Machine) .

Eu acredito que houve alguns SSD de início que só suportados TRIM sobre partições apagar ou sobre coisas como o Windows 7 de "diskpart limpo todos", e não sobre a exclusão de arquivos individuais. Esse pode ser um motivo pelo qual uma unidade antiga pareceu recuperar o desempenho ao executar esse comando. Isso me parece um pouco nebuloso ...

Muito do meu conhecimento sobre SSDs e hardware / gadgets em geral vem de anandtech.com . Eu pensei que ele tinha um ótimo artigo explicando tudo isso, mas para a minha vida eu não consigo encontrá-lo!

James
fonte
Aha! Encontrei o artigo original da Anandtech!
James
Apenas passou por isso, com +1, por mencionar a exclusão segura do ATA e a cotação por bloco versus por página.
Christopher Galpin
11
Embora a maior parte desta resposta esteja correta, a parte sobre a coleta de lixo está incorreta. Todos os SSDs têm coleta de lixo. Eles não trabalhariam sem ele. A coleta de lixo não é uma alternativa ao TRIM. Em um estado vazio, uma célula NAND representa um 1 e, em seguida, você pode escrevê-lo para um 0. Mas, para voltar a zero, você deve apagar um bloco inteiro de uma só vez. Portanto, em vez de substituir os dados existentes, quaisquer alterações são gravadas em um novo bloco e os dados antigos são marcados como inválidos. Apagar dados inválidos é Coleta de Lixo. O TRIM diz ao SSD para marcar os dados como inválidos quando você os exclui no sistema operacional.
Alpha
Não é bem o senhor Alpha. O termo "Coleta de Lixo" surgiu de controladores que proativamente executam o processo que você descreve nos momentos ideais, em vez de simplesmente reagir quando eles absolutamente precisam fazê-lo (o que novamente resulta em um desempenho ruim à medida que a unidade é cheia).
James
11
Talvez nunca devêssemos chamá-lo de "Coleta de Lixo" e, em vez disso, apenas apelidar os controladores reativos mais antigos de "acumuladores".
James
17

Aparentemente, a recomendação padrão é fazer uma gravação de unidade completa de todos os zeros. Eu não sou inteiramente certo porque isso ajuda (não um monte de gravações, eventualmente, matar SSDs?), Mas parece ser visado pelas principais fóruns de suporte do fornecedor de SSD.

Então, para fazer isso no Windows:

  • inicie um prompt de comando com privilégios de administrador
  • executar o comando diskpart

Uma vez no utilitário, você verá um DISKPART>prompt e emitirá os seguintes comandos:

DISKPART> list disk
DISKPART> select disk x

Obviamente, verifique se você selecionou o disco SSD correto antes de continuar!

DISKPART> clean all
DISKPART> create partition primary
DISKPART> format quick fs=NTFS 

A mágica aqui é clean allque grava todos os zeros na unidade :

Se você especificar o parâmetro all, todos os setores poderão ser zerados e todos os dados contidos no inversor poderão ser excluídos.

Depois de fazer isso, posso confirmar que o desempenho do disco aumentou substancialmente.

Jeff Atwood
fonte
11
@ Jeff A razão pela qual escrever todos os zeros pode ser útil foi recentemente explicada por David Spillett : alguns controladores assumem que os blocos zerados podem ser descartados e retornados ao pool de espaço livre, simulando o efeito do comando TRIM.
sblair
11
2 pontos - primeiro, geralmente o comando flash erase apaga blocos em todos os 0xffs; portanto, parece melhor escrever isso em vez de 0s. Eu teria que verificar as folhas de dados para ter certeza, no entanto. Segundo - se você está tentando enganar o controlador para APARAR a unidade, não seria uma boa idéia executar algum tipo de utilitário que APARECEU a cada bloco da unidade? Pessoalmente, eu provavelmente faria as duas coisas (0xffs e TRIM), mas provavelmente estou sendo um pouco pedante aqui.
Dennis Munsie 15/05
2
@ Dennis com certeza, se houver tal utilidade - sinta-se à vontade para me indicar uma.
Jeff Atwood 15/05
11
@ Dennis: Se a unidade estiver usando bits "físicos" "em" e estes forem traduzidos para bits lógicos em outros locais, então 0xff pode ser o padrão que você precisa. Eles podem estar usando lógica invertida; portanto, a documentação ou a comunicação com o fabricante é a única maneira de ter certeza antes de prosseguir. Minha sugestão para usar sdelete ou similar é tentar aparar blocos não utilizados em um sistema de arquivos em funcionamento. Obviamente, isso resultará em uma gravação sem corte para todos os blocos no mapeamento do SSD que são uma mistura de usados ​​e não utilizados.
David Spillett 15/05
2
Estou um pouco espantado com o fato de tantas pessoas aparentemente não terem consciência de apagar um SSD com segurança. Não é necessário TRIM a cada bloco. Basta executar um utilitário que envia um comando Secure Erase ATA para o SSD e seu problema é resolvido, independentemente de o SSD suportar ou não o TRIM.
James
16

Eu também encontrei uma ferramenta, SSD Life Pro . Tem más notícias para mim.

SSDLife Pro - a saúde da unidade é ruim!

Sobre como calcula isso, ele usa os indicadores SMART SSD. Aparentemente, ele tenta prever com base nos dados SMART :

  • A vida útil da memória flash, na qual os SSDs se baseiam, é limitada a 10.000 gravações por célula
  • a maioria das unidades também mostra dados sobre informações escritas e / ou lidas em seus parâmetros SMART

Isso é complicado porque também precisa saber quando os dados foram gravados para estimar, mas eis os dados subjacentes:

01 Taxa de erro de leitura 7
09 Horas de inicialização Contagem 7085
Contagem do ciclo de energia 0C 318
B8 Contagem inicial de blocos inválidos 15
Contagem de blocos com falha no programa C3 0
C4 Falha no apagamento Contagem de blocos 0
C5 Contagem de blocos com falha de leitura 0
Setores de leitura C6 5468243171
Setores de gravação C7 41640920876
Comandos de leitura C8 100482453
Comandos de gravação C9 417315851
Bits de erro de CA do Flash 345270
Setores de leitura de CB com erro de bit corrigível 340001
Bandeira cheia de bloco inválido do CC 0
Especificação máxima da contagem de P / E do CD 5000
Contagem de apagamento mínimo CE 3774
Contagem de apagamento máximo de CF 65348
D0 Contagem média de apagamento 4837
D1 Vida útil restante da unidade 4

O número assustador é a vida útil restante da unidade, que é de 4 %.

E os cálculos resultantes:

Modelo: CRUCIAL_CT128M225
Tamanho: 128 GB
Número de série: xxxxxxxxxxxxxxxxxxx456
Firmware: 2030
Ativado vezes: 318    
Suporte TRIM no drive / OS: ativado / ativado
Tempo trabalhado: 9 meses 16 dias 5 horas
Total de dados lidos: 2607,46 GB
escrito: 19855.94 GB

Para que conste, esta unidade foi comprada originalmente em outubro de 2009, por isso tem pouco mais de um ano e meio.

Jeff Atwood
fonte
3
@ Jeff Embora a memória flash tenha melhorado no tamanho do processo, o número de ciclos de programa / apagamento diminuiu . O valor 0xCD sugere que você tenha uma unidade baseada em 34nm com 5.000 ciclos P / E classificados, em vez de 10.000.
Sblair 15/05
11
@sblair bom saber; Eu tentei a ferramenta em um novo OCZ Vertex 2 e ele tem campos e valores SMART totalmente diferentes.
Jeff Atwood 15/05
2
Esses dados parecem um pouco estranhos - diz que você escreveu quase 10 vezes mais dados do que leu. Isso não soa alto? Eu esperaria mais leituras do que isso. Você tem um arquivo de paginação nessa unidade?
Dennis Munsie 15/05
11
Mais pontos de dados - Eu tenho um SSD semelhante instalado no MacBook da minha esposa. Este era anteriormente o meu laptop, usado para fins de desenvolvimento. Acabei de analisar as estatísticas desse SSD e, nos 8 meses mais ou menos da vida útil dessa unidade, ele teve um total de 17 horas de energia em comparação com o 7085 para você (295 dias). Sei que a máquina está em funcionamento há mais de 17 horas, mas parece que o sistema operacional está desligando agressivamente a unidade.
Dennis Munsie
2
20TB gravados em uma unidade de 128GB !? Para que exatamente você está usando esta unidade?
BlueRaja - Danny Pflughoeft
6

Descobri que escrever zero através da unidade não é a melhor abordagem. Embora possa ajudar no curto prazo, achei que definitivamente não restaurava minha unidade para seu desempenho total (eu tenho um Intel-SSD não habilitado para TRIM bastante antigo). Após um ano de uso bastante pesado, eu comecei a ficar congelado em 1-2 segundos quando o SSD tentava gravar em qualquer arquivo, mesmo depois de zerar o SSD.

A única coisa que eu achei que restaura plenamente o desempenho foi um apagamento seguro usando hdparm. Criei o hábito de apagar com segurança o meu SSD a cada 6 a 12 meses, quando ele começa a experimentar alguns soluços menores. Alguém no Macrumors fez um tutorial específico do mac sobre como fazer para dispositivos mac *.

De acordo com todas as alegações que eu vi, uma exclusão segura envia um comando especial ao SSD que faz com que todos os setores sejam zerados em um nível muito mais baixo do que apenas usando ddou algo assim.

Kendall Hopkins
fonte
se a unidade não suporta TRIM, todas as apostas estão fora ..
Jeff Atwood
11
Jeff incorreto, um apagamento seguro é completamente independente do TRIM. É um comando ATA real e é a única coisa que você pode fazer para restaurar completamente unidades não compatíveis com TRIM. Quando um SSD recebe esse comando, todas as células NAND são marcadas como vazias, restaurando o desempenho de gravação original das unidades sem a necessidade de TRIM. Existem inúmeras ferramentas disponíveis que podem fazer isso, incluindo hdparm, que é mencionado na resposta principal até o momento.
James
5

No Mac, confira o digilloydTools DiskTester . Existem também alguns dados interessantes para ver os efeitos do recondicionamento no desempenho da unidade.

jerwood
fonte
Acredito que tudo o que faz é gravar um arquivo muito grande de zero no seu SSD. Você pode obter os resultados salvos fazendo isso cat /dev/zero > /tmp/bigfile.
Kendall Hopkins
4

Os ThinkPads possuem um menu BIOS oculto (ative com http://www-307.ibm.com/pc/support/site.wss/MIGR-68369.html ) que redefine seu SSD.

chx
fonte
provavelmente faz o mesmo que as outras ferramentas recomendadas, gravando zeros em toda a unidade que são interpretados pelo controlador como TRIM limpar comandos em cada bloco.
Jeff Atwood 15/05
talvez? Eu não faço ideia.
chx 15/05
2

Para verificar a vida útil do ssd em um ssd (unidade de estado sólido), você precisará instalar o pacote smartmontools. Ele contém dois programas utilitários (smartctl e smartd) para controlar e monitorar sistemas de armazenamento usando o Sistema de Tecnologia de Auto-Monitoramento, Análise e Relatórios (SMART), incorporado aos mais modernos discos rígidos ATA e SCSI.

Para distribuições baseadas no Ubuntu, Mint ou Debian

# apt-get install smartmontools

For Fedora, Centos, or Red Hat based distributions
# yum install smartmontools

O Media_Wearout_Indicator é o que você está procurando. Para 100 significa que o seu ssd tem 100% de vida útil, o número menor significa menos vida útil restante.

# smartctl -a /dev/sda | grep Media_Wearout_Indicator

Saída do meu laptop

233 Media_Wearout_Indicator 0×0032 100 100 000 Old_age Always – 0

Se você quiser ver mais detalhes e atributos completos de sua unidade, pode executar

# smartctl -data -A /dev/sda

Fonte: namhuy.net/1024/how-to-check-ssd-life-left.html

Victor Sanders
fonte
2

Agora existe uma resposta muito melhor para os sistemas Linux, em comparação com a resposta @LeakyCode:

sudo fstrim -v / boot

O comando "fstrim" de "util-linx" será executado no sistema de arquivos e emitirá comandos TRIM para todo o espaço não utilizado. Em distribuições como o Ubuntu, isso é desativado por padrão, exceto por uma lista selecionada de unidades "conhecidas como seguras" da Intel e Samsung. Mas o comando pode ser executado manualmente em qualquer partição para qualquer unidade.

Bryce
fonte