¿Restaurar el rendimiento y estimar la vida útil de una unidad SSD usada?

70

Mi viejo disco SSD de 128 GB tiene aproximadamente un año y medio de antigüedad, y desde entonces he actualizado a otro disco.

Me gustaría limpiar mi viejo SSD para ...

  • restaurar su rendimiento a niveles casi nuevos

  • rehabilitarlo y, en general, darle un chequeo de salud

¿Cómo voy a hacer esto?

Jeff Atwood
fuente
44
Aunque no cubre la restauración, puede encontrar esta publicación de blog interesante para evitar que esto suceda.
Tamara Wijsman
1
Es posible que lo haya pasado por alto, pero no vi que ninguna de las respuestas a continuación estaba " marcada ". En el caso de esta pregunta, realmente tengo curiosidad por saber qué fue lo que finalmente funcionó "mejor" para usted. (Si recuerdas ...)
irracional John

Respuestas:

56

En Linux, simplemente ejecute

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

pasando el bloque oscila desea recortar en lugar de starty county el dispositivo SSD en lugar de /dev/sda. Tiene la ventaja de ser rápido y no escribir ceros en el disco. Por el contrario, simplemente envía comandos TRIM al controlador SSD para informarle que no le importan los datos en esos bloques y puede asumir libremente que no se utilizan en su algoritmo de recolección de basura.

Probablemente necesite ejecutar este comando como root. Dado que este comando es extremadamente peligroso, ya que puede causar una pérdida de datos importante de inmediato, también debe pasar un --please-destroy-my-driveargumento a hdparm(no lo he agregado a la línea de comandos para evitar la pérdida accidental de datos causada por copiar y pegar).

En la línea de comandos anterior, /dev/sdadebe reemplazarse con el dispositivo SSD al que desea enviar comandos TRIM. startes la dirección del primer bloque (sector) a TRIM, y countes el número de bloques que se marcarán como libres de esa dirección inicial. Puede pasar varios rangos al comando.

Habiéndolo hecho personalmente con hdparm v9.32 en Ubuntu 11.04 en mi computadora portátil con un Crucial RealSSD C300 de 128GB, tengo que señalar un problema: no pude pasar el número total de bloques de disco (0: 250069680) como el rango . Manualmente (esencialmente "búsqueda binaria" a mano) encontré un valor lo suficientemente grande para el conteo de bloques que funcionó (40000) y pude emitir comandos TRIM en una secuencia de rangos 40000 para liberar todo el disco. Es posible hacerlo con un script de shell simple como este (probado en Ubuntu 11.04 bajo root):

 # fdisk -lu /dev/sda

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

para borrar toda la unidad, tome ese número total de sectores y reemplace 250069680 en la siguiente línea con ese número y ejecute (agregar --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

¡Y tu estas listo! Puede intentar leer el contenido sin formato del disco hexedit /dev/sdaantes y después y verificar que la unidad haya descartado los datos.


Por supuesto, incluso si no desea utilizar Linux como el sistema operativo principal de la máquina, puede aprovechar este truco arrancando un CD en vivo y ejecutándolo en la unidad.

Mehrdad Afshari
fuente
3
Gran redacción, pero desafortunadamente esto no funcionará para SSD que no admitan TRIM. Para eso tendrás que ir un poco más allá. Consulte el wiki de ATA en kernel.org para obtener instrucciones sobre cómo hacerlo con hdparm. Sería aún mejor si pudieras modificar tu entrada original para incluir esta información :)
James
"fstrim" es una versión fácil de lo anterior (ver respuesta por separado).
Bryce
@Bryce, incorrecto; TRIM es solo de asesoramiento y está diseñado por razones de rendimiento, no de seguridad, lo que significa que la unidad es libre de ignorar el comando o retrasar el borrado hasta un momento posterior, como lo hacen la mayoría de las unidades.
psusi
24

En primer lugar, comencemos por comprender qué es lo que causa la degradación del rendimiento. Sin saber esto, muchas personas sugerirán soluciones inadecuadas (como ya veo que sucede). El quid de toda esta situación básicamente se reduce al siguiente hecho, como se cita de Wikipedia . Recuérdalo, es importante:

Con la memoria flash NAND, las operaciones de lectura y programación deben realizarse página por página, mientras que el desbloqueo y el borrado deben realizarse en bloque.

Los SSD están formados por flash NAND, y el flash consiste en "bloques". Cada bloque contiene muchas "páginas". En aras de la simplicidad, imaginemos que acabamos de comprar un nuevo SSD brillante que contiene un enorme bloque de memoria, y ese bloque consta de 4 páginas vacías.

En aras de la claridad, distingo entre páginas vacías, páginas usadas y páginas eliminadas con ∅, 1 y X. ¡La clave es que hay una diferencia entre cada una de ellas desde la perspectiva de los controladores! No es tan simple como 1 y 0. Entonces, para comenzar, las páginas de nuestro nuevo disco se ven así:

∅, ∅, ∅, ∅ (todo vacío)

Ahora, vamos a escribir algunos datos en el disco, y termina siendo almacenado en esa primera página, por lo tanto:

1, ∅, ∅, ∅

A continuación, escribimos un poco más de datos, solo que esta vez requiere dos páginas y, por lo tanto, se almacena en la segunda y tercera página:

1, 1, 1, ∅

¡Nos estamos quedando sin espacio! Decidimos que realmente no necesitamos los datos iniciales que escribimos, así que eliminemos para hacer espacio .:

X, 1, 1, ∅

Finalmente, tenemos otro gran conjunto de datos que necesitamos almacenar que consumirá las dos páginas restantes. ¡ESTO ES DONDE EL GOLPE DE RENDIMIENTO OCURRE EN CONDUCCIONES SIN RECORTAR! Pasando de nuestro último estado a este:

1, 1, 1, 1

... requiere más trabajo del que la mayoría de la gente piensa. Nuevamente, esto se debe al hecho de que el flash solo puede borrarse en forma de bloque, no de página, que es precisamente lo que requiere la transición final anterior. ¡El diferenciador entre los SSD TRIM y los no basados ​​en TRIM es cuando se realiza el siguiente trabajo!

Dado que necesitamos utilizar una página vacía y una página eliminada, el SSD primero debe leer el contenido del bloque completo en alguna memoria / almacenamiento externo, borrar el bloque original, modificar el contenido y luego volver a escribir ese contenido en el bloque. No es tan simple como una "escritura", sino que ahora se ha convertido en una "lectura-borrado-escritura". Este es un gran cambio, y que ocurra mientras escribimos muchos datos es probablemente el momento más inoportuno para que ocurra. Todo podría evitarse si esa página "eliminada" se recuperara antes de tiempo, que es precisamente lo que TRIM pretende hacer. Con TRIM, el SSD recupera nuestras páginas eliminadas inmediatamente después de la eliminación o en algún otro momento oportuno que sus algoritmos TRIM consideren apropiado. Sin embargo, la parte importante es que con TRIM no sucede cuando estamos en medio de una escritura.

Sin TRIM, en última instancia, no podemos evitar el escenario anterior mientras llenamos nuestras unidades con datos. Afortunadamente, algunos SSD más nuevos van más allá de TRIM y efectivamente hacen lo mismo que TRIM en segundo plano a nivel de hardware sin los comandos ATA necesarios (algunos llaman a esto recolección de basura). ¡Pero para aquellos de nosotros que tenemos la mala suerte de no tener ninguno, es importante saber que escribir ceros en toda la unidad no es suficiente para recuperar el rendimiento original! Escribir todos los ceros en la unidad no indica al controlador que la página en flash es libre para escribir. La única forma de hacerlo en una unidad que no admite TRIM es invocar el comando de borrado seguro ATA en su unidad utilizando una herramienta como HDDErase (a través de Wayback Machine) .

Creo que hubo algunos SSD tempranos que solo admitían TRIM al eliminar particiones o sobre cosas tales como "diskpart clean all" de Windows 7, y no sobre la eliminación de archivos individuales. Esta puede ser una razón por la cual un disco antiguo parecía recuperar el rendimiento al ejecutar ese comando. Sin embargo, esto me parece un poco confuso ...

Gran parte de mi conocimiento de SSD y hardware / gadgets en general proviene de anandtech.com . ¡Pensé que tenía una gran crítica explicando todo esto, pero por mi vida no puedo encontrarla!

James
fuente
¡Ajá! ¡Encontré el artículo original de Anandtech!
James
Solo pasé por alto esto pero +1 por mencionar el borrado seguro de ATA y la cotización por bloque vs por página.
Christopher Galpin
1
Si bien la mayor parte de esta respuesta es correcta, la parte sobre la recolección de basura es incorrecta. Todos los SSD tienen recolección de basura. No funcionarían sin eso. La recolección de basura no es una alternativa a TRIM. En un estado vacío, una celda NAND representa un 1 y luego puede escribirla en un 0. Pero para que vuelva a cero, debe borrar un bloque completo de una vez. Entonces, en lugar de sobrescribir los datos existentes, cualquier cambio se escribe en un nuevo bloque y los datos antiguos se marcan como no válidos. Borrar datos no válidos es la recolección de basura. TRIM le dice a la SSD que marque los datos como no válidos cuando los elimina en el sistema operativo.
Sr. Alpha
No del todo, señor Alpha. El término "Recolección de basura" surgió de los controladores que realizan de manera proactiva el proceso que usted describe en los momentos óptimos en lugar de simplemente reaccionar cuando es absolutamente necesario hacerlo (lo que nuevamente resulta en un mal rendimiento a medida que la unidad se llena).
James
1
Tal vez nunca deberíamos haberlo llamado "Recolección de basura" y en su lugar simplemente apodar a los controladores reactivos más antiguos "acumuladores".
James
17

Aparentemente, la recomendación estándar es hacer una escritura de unidad completa de todos los ceros. No estoy completamente seguro de por qué esto ayuda (¿muchas escrituras finalmente no eliminan las SSD?), Pero parece estar respaldado por los principales foros de soporte de SSD de proveedores.

Entonces, para hacer eso en Windows:

  • iniciar un símbolo del sistema con privilegios de administrador
  • ejecutar el comando diskpart

Una vez en la utilidad, verá un DISKPART>mensaje y emitirá los siguientes comandos:

DISKPART> list disk
DISKPART> select disk x

Obviamente, ¡ ASEGÚRESE DE HABER SELECCIONADO LA UNIDAD SSD CORRECTA antes de continuar!

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

La magia aquí es clean allque escribe todos los ceros en la unidad :

Si especifica el parámetro all, todos y cada uno de los sectores se pueden poner a cero y todos los datos contenidos en la unidad se pueden eliminar.

Después de hacer esto, puedo confirmar que el rendimiento del disco aumentó sustancialmente.

Jeff Atwood
fuente
11
@Jeff David Spillett explicó recientemente la razón por la que escribir todos los ceros puede ser útil : algunos controladores suponen que los bloques puestos a cero se pueden descartar y devolver al grupo de espacio libre, emulando el efecto del comando TRIM.
sblair
1
2 puntos: primero, por lo general, el comando de borrado flash borra los bloques de todos los 0xffs, por lo que sería mejor escribir eso en lugar de 0s. Sin embargo, tendría que consultar las hojas de datos para estar seguro. Segundo: si está tratando de engañar al controlador para que RECORTE la unidad, ¿no sería una buena idea ejecutar algún tipo de utilidad que simplemente RECORTAR cada bloque de la unidad? Personalmente, probablemente haría ambas cosas (0xffs y TRIM), pero probablemente estoy siendo un poco pedante aquí.
Dennis Munsie
2
@dennis seguro, si existe tal utilidad, siéntase libre de señalarme una.
Jeff Atwood
1
@Dennis: Si la unidad está usando bits "físicos" "en" y estos se traducen a lógicos en bits en otro lugar, entonces 0xff podría ser el patrón que necesita. Sin embargo, podrían estar utilizando lógica invertida, por lo que la documentación o la comunicación con el fabricante es la única forma de estar seguro antes de continuar. Mi sugerencia para usar sdelete o similar es intentar recortar bloques no utilizados en un sistema de archivos que funcione. Por supuesto, dará como resultado una escritura sin recortar para todos los bloques en la asignación de SSD que son una mezcla de usados ​​y no usados.
David Spillett
2
Estoy un poco asombrado de que tanta gente aparentemente no sea consciente de borrar de forma segura un SSD. No es necesario RECORTAR cada bloque individual. Simplemente ejecute una utilidad que envíe un comando Secure Erase ATA al SSD y su problema se resolverá, independientemente de si el SSD admite o no TRIM.
James
16

También encontré una herramienta, SSD Life Pro . Tiene algunas malas noticias para mí.

SSDLife Pro: ¡la salud del disco es mala!

En cuanto a cómo calcula eso, utiliza los indicadores SMART SSD. Aparentemente trata de predecir basándose en datos SMART :

  • La vida útil de la memoria flash, en la que se basan los SSD, está limitada a 10,000 escrituras por celda
  • la mayoría de las unidades también muestran datos sobre información escrita y / o leída en sus parámetros SMART

Esto es complicado porque también necesita saber cuándo se escribieron los datos para estimar, pero aquí están los datos subyacentes:

01 Leer tasa de error 7
09 Horas de encendido Cuenta 7085
0C Power Cycle Count 318
B8 Inicial Bad Block Count 15
Programa C3 Fallo Bloque Recuento 0
Recuento de bloqueos de falla de borrado C4 0
C5 Error de lectura Bloque Recuento 0
Sectores de lectura C6 5468243171
Sectores de escritura C7 41640920876
Comandos de lectura C8 100482453
Comandos de escritura C9 417315851
Bits de error de CA desde Flash 345270
Sectores de lectura CB con error de bit corregible 340001
CC Bad Block Full Flag 0
CD Máximo P / E Recuento Especificación 5000
Recuento de borrado mínimo CE 3774
Cuenta máxima de borrado CF 65348
D0 Cuenta de borrado promedio 4837
D1 Vida restante de la unidad 4

El número aterrador que hay es la vida restante de la unidad, que es 4 .. ¡por ciento!

Y los cálculos resultantes:

Modelo: CRUCIAL_CT128M225
Tamaño: 128 GB
Número de serie: xxxxxxxxxxxxxxxxx456
Firmware: 2030
Potencia en horarios: 318    
Soporte TRIM en unidad / SO: habilitado / habilitado
Tiempo trabajado: 9 meses 16 días 5 horas
Datos totales leídos: 2607.46 GB
escrito: 19855.94 GB

Para el registro, esta unidad se compró originalmente en octubre de 2009, por lo que tiene poco más de un año y medio.

Jeff Atwood
fuente
3
@Jeff Aunque la memoria flash ha mejorado en el tamaño del proceso, la cantidad de ciclos de programa / borrado ha disminuido . El valor 0xCD sugiere que tiene una unidad basada en 34nm con 5,000 ciclos de P / E clasificados, en lugar de 10,000.
sblair
1
@sblair es bueno saberlo; Probé la herramienta en un nuevo OCZ Vertex 2 y tiene valores y campos SMART totalmente diferentes.
Jeff Atwood
2
Esa información parece un poco desviada: dice que ha escrito casi 10 veces más datos de los que ha leído. ¿Eso no suena alto? Esperaría más lecturas que eso. ¿Tiene un archivo de paginación en esa unidad?
Dennis Munsie
1
Más puntos de datos: tengo un SSD similar instalado en el MacBook de mi esposa. Anteriormente era mi computadora portátil, que se usaba para fines de desarrollo. Acabo de mirar las estadísticas de ese SSD, y en los 8 meses más o menos de la vida útil de esa unidad, ha tenido un total de 17 horas de encendido en comparación con 7085 para usted (295 días). Sé con certeza que la máquina ha estado funcionando durante más de 17 horas en total, pero parece que el sistema operativo está apagando agresivamente la unidad.
Dennis Munsie
2
¿20 TB escritos en una unidad de 128 GB? ¿Para qué estás usando exactamente este disco?
BlueRaja - Danny Pflughoeft
6

Descubrí que escribir ceros a través del disco no es el mejor enfoque. Si bien podría ayudar a corto plazo, descubrí que definitivamente no restauró mi unidad a su rendimiento completo (tengo una Intel-SSD no habilitada para TRIM bastante antigua). Después de un año de uso bastante pesado, comencé a tener congelaciones de 1-2 segundos cuando el SSD intentaba escribir en cualquier archivo, incluso después de poner a cero el SSD.

La única cosa que he encontrado que restablece plenamente el rendimiento fue un borrado seguro utilizando hdparm. Me he acostumbrado a borrar de forma segura mi SSD cada 6-12 meses cuando comienza a experimentar algunos problemas menores. Alguien en Macrumors hizo un tutorial específico para mac sobre cómo hacerlo para dispositivos mac *.

De acuerdo con todas las afirmaciones que he visto, un borrado seguro envía un comando especial al SSD que hace que establezca todos los sectores a cero en un nivel mucho más bajo que simplemente usar ddo algo así.

Kendall Hopkins
fuente
si la unidad no soporta TRIM, todas las apuestas están apagadas ..
Jeff Atwood
1
Jeff incorrecto, un borrado seguro es completamente independiente de TRIM. Es un comando ATA real, y es lo único que puede hacer para restaurar completamente las unidades que no son compatibles con TRIM. Cuando un SSD recibe este comando, todas las celdas NAND se marcan como vacías, restaurando el rendimiento de escritura original de las unidades sin la necesidad de TRIM. Existen numerosas herramientas disponibles que pueden hacer esto, incluido hdparm al que se hace referencia en la respuesta principal hasta el momento.
James
5

En Mac, echa un vistazo a DigilloydTools DiskTester . También hay algunos puntos de datos interesantes para ver los efectos del reacondicionamiento en el rendimiento del disco.

jerwood
fuente
Creo que todo lo que hace es escribir un archivo muy grande de cero en su SSD. Puede lograr los resultados de guardar haciendo cat /dev/zero > /tmp/bigfile.
Kendall Hopkins
4

Los ThinkPads tienen un menú de BIOS oculto (habilítelo con http://www-307.ibm.com/pc/support/site.wss/MIGR-68369.html ) que restablece su SSD.

chx
fuente
probablemente hace lo mismo que las otras herramientas recomendadas, escribiendo ceros en toda la unidad que el controlador interpreta como comandos TRIM clear en cada bloque.
Jeff Atwood
¿tal vez? No tengo idea.
chx
2

Para verificar la vida útil de un SSD en un SSD (unidad de estado sólido), deberá instalar el paquete de Smartmontools. Contiene dos programas de utilidad (smartctl y smartd) para controlar y monitorear los sistemas de almacenamiento utilizando el Sistema de Tecnología de Auto Monitoreo, Análisis e Informes (SMART) integrado en los discos duros ATA y SCSI más modernos.

Para distribuciones basadas en Ubuntu, Mint o Debian

# apt-get install smartmontools

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

Media_Wearout_Indicator es lo que estás buscando. Por 100 significa que su SSD tiene 100% de vida, el número más bajo significa que queda menos vida.

# smartctl -a /dev/sda | grep Media_Wearout_Indicator

Salida de mi laptop

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

Si desea ver más detalles y atributos completos de su unidad, puede ejecutar

# smartctl -data -A /dev/sda

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

Victor Sanders
fuente
2

Ahora hay una respuesta mucho mejor para los sistemas Linux, en comparación con la respuesta @LeakyCode:

sudo fstrim -v / boot

El comando "fstrim" de "util-linx" se ejecutará a través del sistema de archivos y emitirá comandos TRIM para todo el espacio no utilizado. En distribuciones como Ubuntu, esto está deshabilitado de manera predeterminada, excepto por una lista selecta de unidades "conocidas seguras" de Intel y Samsung. Pero el comando se puede ejecutar manualmente en cualquier partición para cualquier unidad.

Bryce
fuente