¿Cuál es la forma recomendada de vaciar un SSD?

53

Acabo de recibir mi nuevo SSD desde que murió el anterior. Este SSD Intel 320 es compatible con TRIM. Para fines de prueba, mi distribuidor puso Windows en él, pero quiero deshacerme de esto e instalar Kubuntu en él.

No tiene que ser un "borrado seguro", solo necesito vaciar el disco de la manera más saludable. Creo que dd if=/dev/zero of=/dev/sdasolo llena los bloques con ceros y, por lo tanto, toma otra escritura (corrígeme si me equivoco).

He visto la respuesta Cómo habilitar TRIM , pero parece que es adecuado para limpiar bloques vacíos, no para limpiar el disco.

hdparmparece ser el programa para hacerlo, pero no estoy seguro si limpia el disco O limpia bloques vacíos. De su página de manual:

  --trim-sector-ranges
          For  Solid State Drives (SSDs).  EXCEPTIONALLY DANGEROUS. DO NOT
          USE THIS OPTION!!  Tells the drive firmware to discard  unneeded
          data  sectors,  destroying  any  data that may have been present
          within them.  This makes those sectors available  for  immediate
          use  by  the firmware's garbage collection mechanism, to improve
          scheduling for wear-leveling of the flash  media.   This  option
          expects  one  or  more  sector range pairs immediately after the
          option: an LBA starting address, a colon, and  a  sector  count,
          with no intervening spaces.  EXCEPTIONALLY DANGEROUS. DO NOT USE
          THIS OPTION!!
          E.g.  hdparm --trim-sector-ranges 1000:4 7894:16 /dev/sdz

¿Cómo puedo hacer que todos los bloques aparezcan vacíos con TRIM?

Lekensteyn
fuente
Buena pregunta, ¿tal vez es suficiente simplemente eliminar el sistema de archivos NTFS?
htorque
1
Por lo tanto, es solo un comentario. ;) Sin embargo, primero puede verificar algunos sectores en esa partición sudo dd if=/dev/sda iflag=direct bs=512 skip=<some_sectors> count=32 | hexdump -C, luego eliminar la partición NTFS utilizando una versión reciente de Gparted y volver a verificar con el mismo comando: si los datos se borraron, solo vería ceros.
htorque
1
@htorque: lo acabo de probar pero no funciona, lo he usado hexdump -C /sda1y hexdump -C /sda1para determinar el bloque de inicio. Buena idea sin embargo.
Lekensteyn
1
@Lekensteyn: quise decirlo con un poco de lengua en la mejilla y te hice una respuesta adecuada a continuación. El artículo de Jeff también tiene un poco de rendimiento, por lo que los usa a pesar de la tasa de fallas :-)
Rory Alsop
3
Todavía no entiendo por qué necesitas borrarlo ... ¿por qué no puedes reformatearlo con Ext4 o lo que sea?
Nathan Osman

Respuestas:

52

Borrado seguro ATA

Debe usar la función de borrado de seguridad de la unidad .

  1. Asegúrese de que la unidad de seguridad no esté congelada . Si es así, puede ser útil suspender y reanudar la computadora.

    $ sudo hdparm -I /dev/sdX | grep frozen
           not     frozen 
    

    El resultado del comando (filtrado) significa que esta unidad "no está congelada" y puede continuar.

  2. Establezca una contraseña de usuario (esta contraseña también se borra, la elección exacta no importa).

    sudo hdparm --user-master u --security-set-pass Eins /dev/sdX
    
  3. Emita el comando ATA Secure Erase

    sudo hdparm --user-master u --security-erase Eins /dev/sdX
    

Nota:

  • /dev/sdX es el SSD como un dispositivo de bloque que desea borrar.
  • Eins es la contraseña elegida en este ejemplo.

Consulte el artículo de ATA Secure Erase en la wiki del kernel de Linux para obtener instrucciones completas, incluida la solución de problemas.

psusi
fuente
Gracias por el enlace, se ve bien para aquellos que tienen un BIOS que lo admite, pero el mío no parece admitirlo. (congelado)
Lekensteyn
¡Hurra! Después de leer el artículo nuevamente, leí "Poner mi sistema en" suspensión "(portátil Clevo M865TU) también funcionó --- y esto puede restablecer otras unidades a" no congelado "también". y lo probé ya que el mío también es originalmente de Clevo (pero BTO lo construyó). Funciona, ahora veo "no congelado". ... pero el paso 3 falló con "ERASE_PREPARE: dirección incorrecta" porque reemplacé sudo por tiempo en lugar de anteponer el comando.
Lekensteyn
1
¡Dios mío, funcionó y solo tardó 19 segundos! ¡Gracias un montón! Ojalá pudiera votarte diez veces: D
Lekensteyn
Solo quería informar que la respuesta aceptada arriba tiene un enlace roto. Es bastante inútil sin dicho enlace, ¿alguien quiere publicar un resumen de lo que dijo ese enlace?
Ashimema
@Ashimema: El enlace está actualmente roto porque kernel.org ha sido pirateado y, por lo tanto, está inactivo por mantenimiento. Google Cache está vacío, pero este blog lo copió: peter.membrey.hk/2011/09/11/…
Lekensteyn
30

util-linux 2.23 ofrece blkdiscardqué descarta datos sin borrarlos de forma segura. Probé: funciona sobre SATA y mmcblk pero no USB.

Un extracto de la página del manual de blkdiscard(8):

NOMBRE

blkdiscard: descarta sectores en un dispositivo

SINOPSIS

blkdiscard [-o offset] [-l length] [-s] [-v] device

DESCRIPCIÓN

blkdiscard se usa para descartar sectores del dispositivo. Esto es útil para los controladores de estado sólido (SSD) y el almacenamiento con poco aprovisionamiento. A diferencia de fstrim (8), este comando se usa directamente en el dispositivo de bloque.

Por defecto, blkdiscard descartará todos los bloques en el dispositivo. Las opciones se pueden usar para modificar este comportamiento según el rango o el tamaño, como se explica a continuación.

El argumento del dispositivo es la ruta del dispositivo de bloque.

ADVERTENCIA: ¡Todos los datos en la región descartada en el dispositivo se perderán!

El comando está ahí desde Ubuntu 15.04 y OpenSUSE 13.1 (sí, OpenSUSE lo tiene 2 años por delante de Ubuntu).

Tankman 六四
fuente
Gracias por agregar información a esta publicación desactualizada y bienvenidos a askubuntu.
mondjunge
Arch Linux ya tiene este paquete, ya que util-linux 2.23 se lanzó el 25 de abril de 2013.
Lekensteyn
44
Gracias por la bienvenida ¿Publicación desactualizada? Viejo, pero no desactualizado, siempre que aparezca en la primera página del resultado de búsqueda de Google, siempre hay nuevos tipos que buscan la misma respuesta aquí. Para mí, está desactualizado solo cuando las mejores páginas lo sacan de la primera página de resultados de Google.
Tankman 六四
3
Si se pregunta la diferencia entre blkdiscardy el hdparmcomando, se responde aquí : "Cuando usa blkdiscard, el SSD (suponiendo un SSD SATA) recibirá un comando ATA TRIM, mientras que hdparm --security-erase emitirá un ATA SECURITY ERASE Comando UNIT. Lo que la unidad hace realmente depende de los detalles de implementación del firmware de ese SSD en particular ".
Lekensteyn
2
En realidad no quieres usar blkdiscard. Primero, tiene la intención de informar a la unidad que partes específicas de la misma pueden ser desechadas, no borrar todo. La unidad puede o no borrar los datos. El comando de borrado seguro debe borrar todos los datos, incluidos los datos que se encuentran en partes de la unidad a las que no se puede acceder actualmente. Editar: solo volví a leer la pregunta y me di cuenta de que no necesitaba borrarse, pero aún vale la pena señalar.
psusi
5

Si no necesita un borrado seguro, ¿por qué no simplemente instala kubuntu usando las opciones para 'usar todo el disco' y el equivalente de 'formato rápido' (no puedo recordar la terminología exacta en este momento)

De esa forma, abandona la tabla de asignación de archivos y la unidad se vacía de manera efectiva para sobrescribirse. En realidad no necesitas vaciarlo.

Rory Alsop
fuente
2
Ver anandtech.com/show/2865/2 . Eliminar el bloque no es lo mismo que borrarlo y marcarlo como vacío.
Lekensteyn
@Lekensteyn Eliminar no significa nada para un dispositivo de bloque. El instalador llamará a mkfs.ext4 y descartará todo el dispositivo; esto es tan seguro como un "borrado seguro", en el sentido de que en ambos casos confía en el firmware del SSD.
Tobu
1
@Tobu Right, eso ha cambiado en algún momento. mkfs.ext4(8)dice: descartar: intente descartar bloques en tiempo mkfs (descartar bloques inicialmente es útil en dispositivos de estado sólido y almacenamiento escaso / de aprovisionamiento delgado). Cuando el dispositivo anuncia que el descarte también pone a cero los datos (cualquier lectura posterior después del descarte y antes de la escritura devuelve cero), entonces marque todas las tablas de inodo aún no puestas a cero como puestas a cero. Esto acelera significativamente la inicialización del sistema de archivos. Esto se establece como predeterminado.
Lekensteyn
@Tobu Para mi caso de uso, "Borrado seguro" no tuvo que borrar realmente los datos de sus chips flash, solo debería asegurarse de que no haya efectos negativos en el rendimiento como resultado de tener algunos bloques en uso.
Lekensteyn
1

Si la unidad tiene un archivo de Linux, puede usarla fstrim. Por defecto, Ubuntu reciente se ejecuta fstrimen unidades de los siguientes proveedores:

    if [ -z "$NO_MODEL_CHECK" ]; then
        if ! contains "$HDPARM" "Intel" && \
           ! contains "$HDPARM" "INTEL" && \
           ! contains "$HDPARM" "Samsung" && \
           ! contains "$HDPARM" "SAMSUNG" && \
           ! contains "$HDPARM" "OCZ" && \
           ! contains "$HDPARM" "SanDisk" && \
           ! contains "$HDPARM" "Patriot"; then
            #echo "device $DEV is not a drive that is known-safe for trimming"
            continue

Una vez por semana.

Entonces, una respuesta a su pregunta es iniciar el sistema y esperar una semana.

Bryce
fuente
1
fstrim se menciona en esta publicación de blkdiscard , también puede invocarlo manualmente con sudo fstrim /(donde /hay un punto de montaje de un sistema de archivos que admite la discardopción).
Lekensteyn
-4

Simplemente elimine la partición, no tiene que borrar todo el disco, los datos antiguos se sobrescribirán cuando se necesite el almacenamiento para otra cosa.

Para habilitar TRIM:

gksudo gedit /etc/fstab

Cambie "ext4 errors = remount-ro 0" en "ext4 descarte, errores = remount-ro 0". (Añadir descarte)

Guardar y reiniciar, TRIM ahora debería estar habilitado.

Compruebe si TRIM está habilitado:

sudo -i
dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct
hdparm --fibmap tempfile

Use la primera dirección begin_LBA.

hdparm --read-sector [begin_LBA] /dev/sda

Ahora debería devolver números y caracteres. Elimina el archivo y sincronízalo.

rm tempfile
sync

Ahora, ejecute el siguiente comando nuevamente. Si devuelve ceros, TRIM está habilitado.

hdparm --read-sector [begin_LBA] /dev/sda
Alex
fuente
2
NO desea llenar un SSD con ceros, ya que escribirá en cada bloque de borrado, causando más desgaste y dejando cada bloque de borrado lleno. Además, muchas unidades NO ponen a cero inmediatamente sectores recortados.
psusi
Claro, requiere muchas escrituras, pero no daña el disco. He usado un Corsair F120 durante 10-11 meses y lo he llenado con ceros con frecuencia. . (Si lo hace antes de cada referencia) Así, al cabo de 30-35 veces el rendimiento sigue siendo el mismo (~ 285MB leer, 275MB / escritura) smart dice: el disco es saludable
Alex
99
Alex, cada escritura en un SSD lo daña ligeramente. Escribir en cada bloque de borrado hace que todos se marquen en uso, lo que evitará que el GC del disco funcione correctamente y el rendimiento se verá afectado. Puedes considerarlo como un disco completo sin TRIM.
psusi