Restaurar o desempenho e estimar a vida de uma unidade SSD usada?

69

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

Gostaria de limpar meu antigo SSD para ...

  • restaure seu desempenho para níveis quase novos

  • reabilite-o e, em geral, faça um exame de saúde

Como faço para fazer isso?

    
por Jeff Atwood 15.05.2011 / 02:27

9 respostas

55

No Linux, simplesmente execute

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

passando os intervalos de bloco que você deseja TRIM em vez de start e count e 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 nesses blocos e pode assumir que eles não são utilizados em seu algoritmo de coleta de lixo.

Você provavelmente precisará executar este comando como root. Como esse comando é extremamente perigoso, já que pode causar perda imediata de dados, você também precisa passar o argumento --please-destroy-my-drive para hdparm (não adicionei isso à linha de comando para evitar perda acidental de dados causada por copiar e colar .)

Na linha de comando acima, /dev/sda deve ser substituído pelo dispositivo SSD para o qual você deseja enviar comandos TRIM. start é o endereço do primeiro bloco (setor) para TRIM, e count é o número de blocos para marcar como livre daquele endereço inicial. Você pode passar vários intervalos para o comando.

Ter feito pessoalmente com hdparm v9.32 no Ubuntu 11.04 no meu laptop com um 128GB Crucial RealSSD C300, eu tenho que apontar um problema: eu não era capaz de passar o número total de blocos de disco (0: 250069680) como o intervalo. Eu manualmente (essencialmente "binário pesquisado" à mão) encontrou um valor grande o suficiente para a contagem de blocos que funcionou (40000) e foi capaz de emitir comandos TRIM em uma seqüência de 40000 intervalos para liberar todo o disco. É possível fazer isso com um script de shell simples como este (testado no Ubuntu 11.04 em 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 a unidade inteira, pegue o número total de setores e substitua 250069680 na linha seguinte por esse número e execute (adicione --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/sda antes e depois e verificar se a unidade descartou os dados.

É claro que, mesmo que você não queira usar o Linux como o sistema operacional principal da máquina, você pode aproveitar esse truque ao inicializar um CD ao vivo e executá-lo na unidade.

    
por 15.05.2011 / 03:23
23

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

With NAND flash memory, read and programming operations must be performed page-at-a-time while unlocking and erasing must happen in block-wise fashion.

Os SSDs são feitos 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 SSD brilhante que contém um bloco único de memória, e esse bloco consiste em 4 páginas vazias.

Por questão de clareza, eu diferencio entre páginas vazias, páginas usadas e páginas deletadas com ∅, 1 e X. A chave é que existe uma diferença entre cada uma delas da perspectiva dos controladores! / strong> Não é tão simples como 1 e 0. Então, para começar, as páginas da nossa nova unidade parecem assim:

∅, ∅, ∅, ∅ (todos vazios)

Agora, vamos escrever alguns dados no disco e ele acaba sendo armazenado na primeira página, assim:

1, ∅, ∅, ∅

Em seguida, escrevemos um pouco mais de dados, só que desta vez o suficiente para que sejam necessárias duas páginas e, por isso, elas sejam armazenadas na segunda e terceira página:

1, 1, 1, ∅

Estamos ficando sem espaço! Decidimos que não precisamos realmente dos dados iniciais que escrevemos, portanto, vamos excluí-lo para criar espaço:

X, 1, 1, ∅

Por fim, temos outro grande conjunto de dados que precisamos armazenar, o que consumirá as duas páginas restantes. ESTE É ONDE O HIT DE DESEMPENHO OCORRE EM UNIDADES SEM TRIM !! Indo do nosso último estado para este:

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 bloco, não na forma de página, o que é precisamente o que a transição final acima exige. O diferenciador entre os SSD TRIM e os não baseados em TRIM é quando o seguinte trabalho é executado!

Como precisamos usar uma página vazia e uma página excluída, o SSD precisa primeiro ler o conteúdo do bloco inteiro em algum armazenamento / memória externa, apagar o bloco original, modificar o conteúdo e então escreva o conteúdo de volta no bloco . Não é tão simples como um "escrever", ao invés disso, agora ele se torna um "read-erase-write". Esta é uma grande mudança, e para que isso aconteça enquanto estamos escrevendo muitos dados é provavelmente o momento mais inoportuno para que isso ocorra. Tudo poderia ser evitado se essa página "excluída" fosse recuperada antes do tempo, o que é precisamente o que o TRIM deve fazer. Com o TRIM, o SSD recupera nossas páginas excluídas imediatamente após a exclusão ou em algum outro momento oportuno que os algoritmos TRIM considerem apropriado. A parte importante é que com TRIM isso não acontece quando estamos no meio de uma gravação!

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

Acredito que houve alguns SSDs antigos que apenas suportavam TRIM ao excluir partições ou coisas como "diskpart clean all" do Windows 7, e não à exclusão de arquivos individuais. Isso pode ser um motivo pelo qual uma unidade antiga pareceu recuperar o desempenho ao executar esse comando. Isso parece um pouco confuso para mim ...

Grande parte 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 pela minha vida eu não consigo encontrar!

    
por 15.05.2011 / 09:54
16

Aparentemente, a recomendação padrão é fazer uma gravação completa de todos os zeros. Eu não tenho certeza porque isso ajuda (muitas gravações acabam não matando SSDs?), Mas parece ser endossado pelos principais fóruns de suporte SSD.

Então, para fazer isso no Windows:

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

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

DISKPART> list disk
DISKPART> select disk x

Obviamente, CERTIFIQUE-SE DE QUE SELECIONOU O SSD DRIVE CORRETO antes de continuar!

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

A mágica aqui é clean all , que escreve todos os zeros na unidade :

If you specify the all parameter, each and every sector can be zeroed, and all data that is contained on the drive can be deleted.

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

    
por 15.05.2011 / 02:32
15

Também encontrei uma ferramenta, SSD Life Pro . Tem uma má notícia para mim.

Quantoaomodocomocalculaisso,eleusaosindicadoresSMARTSSD.Aparentemente,ele tenta prever com base em S.M.A.R.T. dados :

  • A vida útil da memória flash, na qual os SSDs são baseados, é 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 seu S.M.A.R.T. parâmetros

Isso é complicado porque também precisa saber quando os dados foram gravados para estimar, mas aqui estão os dados subjacentes:

01 Read Error Rate   7
09 Power-on Hours Count  7085
0C Power Cycle Count   318
B8 Initial Bad Block Count   15
C3 Program Failure Block Count   0
C4 Erase Failure Block Count   0
C5 Read Failure Block Count  0
C6 Read Sectors   5468243171
C7 Write Sectors  41640920876
C8 Read Commands  100482453
C9 Write Commands   417315851
CA Error Bits from Flash  345270
CB Read Sectors with Correctable Bit Error  340001
CC Bad Block Full Flag   0
CD Maximum P/E Count Specification   5000
CE Minimum Erase Count   3774
CF Maximum Erase Count   65348
D0 Average Erase Count   4837
D1 Remaining Drive Life  4

O número assustador é Tempo de Vida restante , que é 4 .. por cento!

E os cálculos resultantes:

Model: CRUCIAL_CT128M225
Size: 128 GB
Serial number: xxxxxxxxxxxxxxxxx456
Firmware: 2030
Powered on times: 318    
TRIM support in drive/OS: enabled/enabled
Worked time: 9 months 16 days 5 hours
Total data read: 2607.46 GB
written: 19855.94 GB

Para registro, essa unidade foi originalmente comprada em outubro de 2009, então tem pouco mais de um ano e meio.

    
por 15.05.2011 / 02:48
5

Descobri que escrever zero através da unidade não é a melhor abordagem. Embora possa ajudar no curto prazo, descobri que ele definitivamente não restaurava minha unidade para seu desempenho total (tenho um Intel-SSD não compatível com TRIM antigo). Depois de um ano ou mais de uso bastante pesado, comecei a rodar em 1-2 segundos quando o SSD tentava gravar em qualquer arquivo , mesmo depois de zerar o SSD.

A única coisa que eu descobri que restaura totalmente o desempenho foi um apagamento seguro usando hdparm . Eu criei o hábito de apagar meu SSD a cada 6-12 meses quando ele começa a passar por alguns pequenos contratempos. Alguém no Macrumors fez um tutorial específico do mac sobre como fazer para dispositivos mac *.

De acordo com todas as afirmações que vi, um apagamento seguro envia um comando especial para o SSD que faz com que ele defina todos os setores para zero em um nível muito mais baixo, usando apenas dd ou algo assim.

    
por 15.05.2011 / 06:50
4

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

    
por 15.05.2011 / 02:59
3

Os ThinkPads têm um menu de BIOS oculto (ativado com link ) que redefine seu SSD.

    
por 15.05.2011 / 03:02
1

Para verificar a vida útil do ssd deixada em um ssd (drive 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ório (S.M.A.R.T.) incorporado nos discos rígidos ATA e SCSI mais modernos.

Para distribuições baseadas em 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. Por 100 significa que seu ssd tem 100% de vida, o menor número significa menos vida 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 da sua unidade, você pode executar

# smartctl -data -A /dev/sda

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

    
por 28.11.2013 / 16:52
1

Agora há uma resposta muito melhor para os sistemas Linux, em comparação à resposta @LeakyCode:

sudo fstrim -v /boot

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

    
por 01.03.2015 / 07:30