Solid State drive (Español)

From ArchWiki
Esta traducción de Solid state drive fue revisada el 2021-02-23. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Este articulo abarca temas espaciales para operar Unidades de estado sólido (en inglés: SSDs) y otros tipos de almacenamiento de datos basados en flash. Si quiere particionar un SSD para algún objetivo en especifico, puede que le sea útil ver la Lista de sistemas de archivos optimizados para memoria flash (en inglés). Para uso general, simplemente elija su Sistema de archivos preferido.

Uso

TRIM

La mayoría de los SSD soportan el comando ATA_TRIM para mantener el rendimiento a largo plazo y nivelar el desgaste. Un articulo de TechSpot compara el rendimiento de un disco antes y después de ser llenado de datos.

Desde la versión 3.8 del kernel de Linux, el soporte para TRIM se ha añadido a los distintos sistemas de archivos de manera continua. Vea la siguiente tabla para un resumen indicativo:

Sistema de archivos TRIM continuo
(opción discard)
TRIM periódico
(fstrim)
Referencias
y notas
Btrfs
Ext3 No ?
Ext4 "discard, nodiscard(*)" en [1]
F2FS
JFS [2]
NILFS2
NTFS-3G No Desde la versión 2015.3.14, [3]
VFAT fstrim es soportado desde la versión 4.19 del kernel
XFS [4][enlace roto 2024-03-03]
Advertencia: Los usuarios deben estar seguros que sus SSD soporten TRIM antes de intentar usarlo, si no, puede provocar una perdida de datos.

Para verificar que su disco soporte TRIM, ejecute:

$ lsblk --discard

Y vea los valores de las columnas DISC-GRAN (granlaridad de descarte) y DISC-MAX (bytes maximos por descarte). Los valores que no sean cero indican soporte para TRIM.

Alternativamente, instale el paquete hdparm y ejecute:

# hdparm -I /dev/sda | grep TRIM
    *  Data Set Management TRIM supported (limit 1 block)
Nota: Hay distintos tipos de soporte para TRIM definidos por la especificación. Por lo tanto, la salida puede variar dependiendo de lo que soporte el disco. Vea Wikipedia:TRIM#ATA (en inglés) para más información.

TRIM periódico

El paquete util-linux provee los archivos de unidad de systemd fstrim.service y fstrim.timer. Al habilitar el temporizador, el servicio se va a ejecutar una vez a la semana. El servicio ejecuta fstrim(8) en todos los sistemas de archivos de los dispositivos que soporten la operación discard.

El temporizador depende en la marca de tiempo de /var/lib/systemd/timers/stamp-fstrim.timer (el cual va a ser creado en la primera invocación) para saber si es que ha pasado una semana desde la ultima invocación. Así que no hay que preocuparse si se va a ejecutar muy frecuentemente, como de una manera anacron.

Para averiguar el comportamiento y estatus de las unidades, vea journalctl. Par cambiar la periodicidad del temporizador o el comando a ejecutar, edite los archivos de unidad proveídos.

TRIM continuo

Nota: No hay necesidad de habilitar TRIM continuo si ejecuta fstrim periódicamente. Si quiere usar TRIM, use TRIM periódico o TRIM continuo.

En vez de ejecutar los comandos TRIM cada tanto (por defecto es una vez por semana si usa fstrim.timer), también es posible emitirlos cada vez que un archivo es borrado. Eso ultimo se conoce como TRIM continuo.

Advertencia: Antes de SATA 3.1, los comandos TRIM no eran ejecutados en cola, lo que provocaba que el sistema se congelara frecuentemente. En este caso, aplicar #TRIM periódico menos frecuentemente era una mejor alternativa. Se producía el mismo problema en un numero de dispositivos, vea ata_device_blacklist en el código fuente de Linux, donde la ejecución en cola de comandos TRIM esta prohibida por causar corrupción seria de datos. En ese caso, dependiendo de el dispositivo, el sistema puede estar forzado a enviar comandos TRIM fuera de cola en vez de en cola. Vea Wikipedia:Trim_(computing)#Disadvantages (en inglés) para más detalles.
Nota: El TRIM continuo no es la manera preferida para emitir comandos TRIM en la comunidad de Linux. Por ejemplo, en Ubuntu el TRIM periódico esta activado por defecto [5], Debian no recomienda usar TRIM continuo [6] y Red Hat recomienda usar TRIM periódico en vez de TRIM continuo si es posible. [7]

Usando la opción de montado discard en /etc/fstab habilita TRIM continuo al operar el dispositivo:

/dev/sda1 /      ext4 defaults,discard  0 1
Nota: Especificar la opción de montado discard en /etc/fstab con una particion / con XFS. Según este hilo, la opción debe ser especificada con el parámetro del kernel rootflags=discard.

En un sistema de archivos ext4, el parámetro discard puede ser establecido como la opción de montado por defecto usando tune2fs:

# tune2fs -o discard /dev/sdXY

Usar las opciones de montado por defecto en vez de una entrada en /etc/fstab es particularmente útil para discos externos, por que esa particion será montada con las opciones por defecto también en otras maquinas. De esta manera, no se tendrá que editar /etc/fstab en cada maquina.

Nota: Las opciones de montado por defecto no están listadas en /proc/mounts.

TRIM un dispositivo completo

Si quiere hacerle TRIM a un dispositivo completo de una sola vez, p.ej. para una nueva instalación, o si quiere vender su SSD, puede usar el comando blkdiscard, el cual va a descartar todos los bloques instantáneamente en un dispositivo.

Advertencia: !Va a perder todos los datos de su dispositivo!
# blkdiscard /dev/sdX

LVM (Gestor de Volúmenes Lógicos)

Las peticiones TRIM que son enviadas desde el sistema de archivos al volumen lógico son enviadas automáticamente a o los volúmenes físicos. No se necesita configuración adicional.

Ninguna de las operaciones LVM (lvremove, lvreduce, y todas las otras) envían peticiones TRIM a o los volúmenes físicos por defecto. Esto para permitir restaurar la configuración previa del grupo de volúmenes con vgcfgrestore(8). El valor de issue_discards en /etc/lvm/lvm.conf controla si los descartes son enviados a los volúmenes físicos subyacentes del volumen lógico cuando este ya no esta ocupando el espacio del volumen físico.

Nota: Lea con atención el comentario en /etc/lvm/lvm.conf antes de cambiar la configuración de issue_discards. No se afecta en lo absoluto a las peticiones TRIM que son pasadas desde el sistema de archivos hacia el disco (p.ej. al eliminar archivos dentro del sistema de archivos) como tampoco afecta al manejo de espacio en un thin pool.
Advertencia: Al habilitar issue_discards no se podrán restaurar los metadatos de los grupos de volúmenes con vgcfgrestore. No habrán opciones de recuperacion en caso de ejecutar un comando de LVM erróneo.

dm-crypt

Advertencia: La opción de descarte permite que las peticiones de descarte sean pasada a través de dispositivos de bloques encriptados. Esto puede o no puede [8] [9] mejorar el rendimiento en un almacenamiento SSD, pero tiene implicaciones de seguridad. Vea dm-crypt (Español)/Specialties (Español)#Soporte Discard/TRIM para unidades de estado sólido (SSD) para más información.

Para los sistemas de archivos que no sean raíz, configure /etc/crypttab para que incluya discard en la lista de opciones para dispositivos de bloques encriptados (vea dm-crypt/System configuration#crypttab).

Para el sistema de archivos raíz, siga las instrucciones de dm-crypt (Español)/Specialties (Español)#Soporte Discard/TRIM para unidades de estado sólido (SSD) para añadir el parámetro del kernel apropiado a la configuración del gestor de arranque.

Maximizar el rendimiento

Siga los consejos en Improving performance (Español)#Dispositivos de almacenamiento par maximizar en rendimiento de sus discos.

Tamaño nativo del sector

La mayoría de SSDs reportan que el tamaño de sus sectores es de 512 bytes a pesar de usar sectores de un tamaño mayor (tipicamente de 4 kB, 8 kB, o algunas veces mas). Al reportarse como dispositivos de 512 bytes, los sistemas de archivos no pueden optimizarse automáticamente para el tamaño nativo de sus sectores, y esto debe ser especificado manualmente al crearlo para evitar un rendimiento menos optimo.

Como alternativa a definir el tamaño de sector detectado automáticamente, a algunos SSDs se les puede cambiar el tamaño de sus sectores en el formato para que reporten un tamaño más parecido al que tienen.

NVMe

Para ver si un dispositivo NVMe lo soporta, use el comando Identificar «Namespace».

# nvme id-ns /dev/nvme0n1
nlbaf  : 0
[...]
lbaf 0 : ms:0  lbads:9 rp:0 (in use)

nlbaf es la cantidad de formatos LBA menos 1, para que así haya solo un formato soportado. La lista de formatos esta al final de la salida. lbaf 0 significa formato LBA #0. Tiene un lbads (Tamaño de Datos LBA: LBA data size) de 9, lo que significa que los sectores son de 29 o 512 bytes. Si el dispositivo puede ocupar sectores de 4 kB, habrá otra entrada con 12 lbads. El valor de rp (Rendimiento Relativo: Relative Performance) indica que formato va a dar el mejor rendimiento, siendo 0 el mejor. ms es (probablemente) el numero de bytes de metadatos extra por sector, y esto no esta soportado muy bien en Linux, así que lo mejor es seleccionar un formato con un valor de 0 aquí.

Para cambiar el tamaño del sector, use nvme format y especifique el valor preferido con el parámetro --lbaf.

SATA

Para dispositivos SATA, debe usar los programas proveídos por el manufacturador. No todos los dispositivos SATA soportan que el tamaño de sus sectores sea cambiado.

Seguridad

Hdparm muestra un estado de "frozen" «congelado»

El BIOS de algunas placas madre dan un comando de «congelado de seguridad» a los dispositivos de almacenamiento conectados al iniciarse. Como también el BIOS de algunos SSDs (y HDDs) están puestos con «congelado de seguridad» de fabrica. Ambos resultan en que la contraseña de los ajustes de seguridad del dispositivo este congelada (frozen), como se muestra en la salida siguiente:

# hdparm -I /dev/sda
Security: 
 	Master password revision code = 65534
 		supported
 	not	enabled
 	not	locked
 		frozen
 	not	expired: security count
 		supported: enhanced erase
 	4min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.

Las operaciones como hacerle formato al dispositivo o instalar un sistema operativo no son afectadas por el «congelado de seguridad».

La salida anterior muestra que el dispositivo no esta bloqueado (not locked) por la contraseña al iniciar del HDD o la protección anti malware del estado congelado (frozen) (el que evita que el dispositivo sea bloqueado con una contraseña durante la ejecución de un malware).

Si lo que pretende es ponerle contraseña a un dispositivo «congelado», va a requerir un BIOS de una placa madre que lo soporte. Muchos portátiles lo soportan por que es un requisito para las unidades con autocifrado, el puede que el soporte no sea trivial para la placa de un servidor o computador de escritorio. Para la placa Intel DH67CL/BL, esta tiene que ponerse en «modo de mantenimiento» con un jumper para acceder a la configuración (vea [10], [11][enlace roto 2023-07-30]).

Advertencia: No intente cambiar el estado «bloqueado» con hdparm a menos que sepa lo que esta haciendo.

Si lo que quiere es borrar los datos del SSD, vea Securely wipe disk (Español)#hdparm y #Limpiado de células de memoria en SSDs.

Limpiado de células de memoria en SSDs

En alguna ocasión, el usuario puede querer restaurar las células de un SSD al estado virginal que tenia cuando fue instalado, por lo tanto, restaurándolo a su velocidad de escritura de fabrica por defecto. La velocidad de escritura tiende a degradarse a través del tiempo incluso en SSDs con soporte nativo para TRIM. TRIM solo protege contra el borrado de archivos, no contra el reemplazo de estos con, p.ej., guardado incremental.

Esa restauración se puede hacer fácilmente con los tres pasos mencionados en el articulo SSD memory cell clearing. Si la razón para restaurar su estado es para sacarle los datos al disco, puede que no quiera utilizar el BIOS para realizarlo de manera segura. Vea Securely wipe disk (Español)#Memoria flash para más información y ejemplos de como limpiar los datos del disco.

Unidades con autocifrado

Como se muestra en #Hdparm muestra un estado de "frozen" «congelado», ponerle una contraseña un dispositivo de almacenamiento (SSD/HDD) en el BIOS puede también inicializar la encriptación por hardware de los dispositivos que lo soporten. Si el dispositivo se rige por el estándar OPAL, esto se puede hacer sin la capacidad d respectiva el BIOS de poner una contraseña, vea unidades con autocifrado.

Solución de problemas

Es posible que el problema que esta experimentando sea un bug del firmware que no sea especifico de Linux, así que antes de intentar solucionar el problema que afecte al SSD, debe ver si hay actualizaciones disponibles para:

Incluso si es un bug en el firmware, puede que sea posible evitarlo. Así que si no hay actualizaciones para el firmware o si se siente vacilante al actualizarlo, lo siguiente puede ayudarlo.

Solucionando errores de NCQ

Algunos SSDs y chipsets SATA no funcionan correctamente con Linux Native Command Queueing (NCQ) (Cola de Comandos Nativa de Linux). Algunos errores comunes en dmesg se parecen a esto:

[ 9.115544] ata9: exception Emask 0x0 SAct 0xf SErr 0x0 action 0x10 frozen
[ 9.115550] ata9.00: failed command: READ FPDMA QUEUED
[ 9.115556] ata9.00: cmd 60/04:00:d4:82:85/00:00:1f:00:00/40 tag 0 ncq 2048 in
[ 9.115557] res 40/00:18:d3:82:85/00:00:1f:00:00/40 Emask 0x4 (timeout)

Para deshabilitar NCQ al inicio, añada libata.force=noncq a la consola del kernel en la configuración del gestor de arranque. Para deshabilitar NCQ en el disco 0 en el puerto 9, use libata.force=9.00:noncq

Alternativamente, puede deshabilitar NCQ para un disco en especifico sin tener que reiniciar con sysfs:

# echo 1 > /sys/block/sdX/device/queue_depth

Si esto (y ademas de actualizar el firmware) no resuelve el problema o causa otros mas, entonces, haga un reporte de errores.

Solucionando problemas relacionados a la gestión de energía de SATA

Algunos SSDs (p.ej. Transcend MTS400) fallan cuando cuando SATA Active Link Power Management, ALPM, esta habilitado. ALPM esta deshabilitado por defecto, y es habilitado por un demonio de ahorro de energía (p.ej. TLP, Laptop Mode Tools).

Si empieza a tener problemas relacionados con SATA al ocupar esa clase de demonios, puede intentar deshabilitar ALPM estableciendo su estado a max_performance tanto para la batería como los perfiles alimentados por CA.

SSD externo con soporte TRIM

Varios chips puente de USB-a-SATA (como VL715, VL716 etc.) y de USB-a-PCIe (como el JMicron JMS583 usados en carcasas para NVMe como IB-1817M-C31) soportan que comandos parecidos a los de TRIM sean enviados a través del controlador de USB Attached SCSI (llamado «uas» en Linux).

Pero el kernel puede que no detecte esta característica automáticamente, y no usarla. Asumiendo que que el dispositivo de bloques es /dev/sdX, usted puede ver si la soporta usando el comando:

sg_readcap -l /dev/sdX

Si en la salida encuentra una linea que diga «Logical block provisioning: lbpme=0», entonces ya sabe que el kernel asume que el dispositivo no soporta «Logical Block Provisioning Management (Gestión de Aprovisionamiento de Bloques Lógicos)» porque el bit (LBPME) no esta puesto.

Si ese es el caso, entonces puede ver si la pagina de «Vital Product Data» (VPD) (Datos Vitales del Producto) en «Logical Block Provisioning» de su dispositivo dice los métodos soportados para desmapear datos. Puede hacer esto con el comando:

sg_vpd -a /dev/sdX

Busque lineas como estas en la salida:

Unmap command supported (LBPU): 1
Write same (16) with unmap bit supported (LBPWS): 0
Write same (10) with unmap bit supported (LBPWS10): 0

Este ejemplo le muestra que su dispositivo soporta el comando «UNMAP».

Vea la salida de:

cat /sys/block/sdX/device/scsi_disk/*/provisioning_mode

Si el kernel no detecto la capacidad de desmapear datos en su dispositivo, entonces esto va a retornar probablemente «full» (lleno). Aparte del «full», el controlador de almacenamiento SCSI del kernel puede usar los siguientes valores para el «provisioning_mode»:

unmap
writesame_16
writesame_10
writesame_zero
disabled

Para el ejemplo anterior, puede establecer «provisioning_mode» a «unmap» para pedirle al kernel que lo use:

echo "unmap" >/sys/block/sdX/device/scsi_disk/*/provisioning_mode

Esto debería permitirle usar inmediatamente herramientas como «blkdiscard» en /dev/sdX o «fstrim» en los sistemas de archivos montados en /dev/sdX.

Si quiere habilitar automáticamente «provisioning_mode» cuando un dispositivo de cierto proveedor/producto sea conectado, puede ser automatizado con el mecanismo «udev». Primero, encuentre el Proveedor USB y las Ids del Producto:

cat /sys/block/sdX/../../../../../../idVendor
cat /sys/block/sdX/../../../../../../idProduct

Y entonces, cree o añada a un archivo de reglas udev (Por ejemplo usando un idVendor de 152d e idProduct de 0583):

echo 'ACTION=="add|change", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="0583", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"' >>/etc/udev/rules.d/10-uas-discard.rules

(Usted también puede usar el comando lsusb para buscar el idVendor/idProduct.)

Firmware

ADATA

ADATA tiene una utilidad disponible para linux (i686) en su pagina de soporte. El enlace para el firmware más reciente va a aparecer después de seleccionar el modelo. La utilidad de actualizado para Linux viene con el firmware y tiene que ser ejecutada como root. Puede que necesite darle los permisos correctos al archivo binario primero.

Crucial

Crucial provee la opción de actualizar el firmware con una imagen ISO. Estas imágenes pueden ser encontradas después de seleccionar el producto en su SSD pagina de soporte y descargando el «Manual Boot File» (Archivo de Inicio Manual).

Nota: Las imágenes ISO que provee Crucial no parecen ser híbridas. Si simplemente usa el comando dd para copiar la imagen a un dispositivo, el MBR no va a estar presente, haciendo imposible iniciar desde la imagen.

Los que posean un modelo M4 Crucial pueden ver si una actualización para el firmware es necesaria con smartctl.

$ smartctl --all /dev/sdX
==> WARNING: This drive may hang after 5184 hours of power-on time:
https://www.tomshardware.com/news/Crucial-m4-Firmware-BSOD,14544.html
See the following web page for firmware updates:
https://www.crucial.com/usa/en/support-ssd

A los usuarios que obtengan esta advertencia se les recomienda respaldar todos sus datos importantes y considerar actualizar inmediatamente. Vea estas instrucciones para actualizar el firmware del Crucial MX100 usando la imagen ISO y Grub.

Intel

Intel tiene una Herramienta de Actualizado de Firmware basada en un sistema Linux para sistemas operativos que no sean compatibles con el software «Caja de herramientas para Unidades de estado solido de Intel®» para Windows.

También esta una nueva herramienta de consola para Linux que puede reinstalar el firmware llamada Intel Memory and Storage (MAS) Tool (Herramienta de Memoria y Almacenado de Intel) disponible en el AUR como intel-mas-cli-toolAUR. También hay una guiá para el usuario en PDF disponible.

Un ejemplo de como revisar e estado del firmware es:

# intelmas show -intelssd 0
DevicePath : /dev/nvme0n1
DeviceStatus : Healthy
Firmware : 002C
FirmwareUpdateAvailable : The selected Intel SSD contains current firmware as of this tool release.

-intelssd 0 puede ser omitido si solo hay un solo SSD Intel en el sistema, o puede pasar 1 para el segundo SSD, y así sucesivamente.

Si hay una actualización disponible, esta puede ser instalada ejecutando intelmas load -intelssd 0. La guiá de usuario sugiere que este procedimiento debe ser realizado dos veces en Linux, con un reinicio entremedio. El firmware más reciente es distribuido como parte de la herramienta MAS, así que no es necesario descargarlo de manera separada.

Kingston

La herramienta KFU esta disponible en el AUR para los discos basados en Sandforce, kingston_fw_updaterAUR.

Mushkin

Los discos de una marca menos conocida, Mushkin, también ocupan los controladores de Sandforce, y tienen una utilidad para Linux (casi idéntica a la de Kingstone) para actualizar su firmware.

OCZ

OCZ tiene una Command Line Online Update Tool (CLOUT) (Herramienta de Actualización por Internet Para Consola) disponible para Linux. El AUR provee ocz-ssd-utilityAUR, ocztoolboxAUR y oczcloutAUR.

Samsung

Samsung señala que otros métodos de actualización aparte de usar su Magician Software «no están soportados», pero es posible actualizar. El Magician Software puede ser usado para hacer un USB del que se pueda iniciar con la actualización del firmware. Samsung provee imágenes ISO arrancables que se pueden usar para actualizar el firmware. Otra opción es usar el samsung_magician-consumer-ssdAUR de Samsung, que esta disponible en el AUR. Magician solo soporta SSDs de marca Samsung; los que son manufacturados por Samsung para los OEM (p.ej. Lenovo) no son soportados.

Nota: Samsung no hace que sea obvio que proveen esos métodos. Parecen tener 4 paginas de actualización de firmware, en las cuales se referencian maneras distintas de hacerlo.

Los usuarios que prefieran hacer la actualización de firmware desde el live USB creado en Linux (sin ocupar el software «Magician» de Sansung en Microsoft Windows) pueden referirse a este articulo por referencia.

Actualizando en Linux

Alternativamente, el firmware puede actualizarse de manera nativa, sin tener que hacer un USB arrancable, como se muestra más abajo. Primero visite la pagina de descargas de Samsung y descargue el firmware más reciente para Windows, el que esta disponible como una imagen de disco. Desde aquí en adelante, Samsung_SSD_840_EVO_EXT0DB6Q.iso se usa como nombre de archivo de ejemplo, así que cámbielo debidamente.

Configure la imagen del disco:

$ udisksctl loop-setup -r -f Samsung_SSD_840_EVO_EXT0DB6Q.iso

Esto va a hacer que la imagen ISO este disponible como un loop device, y va a mostrar su ubicación. Asumiendo que esa es /dev/loop0:

$ udisksctl mount -b /dev/loop0

Obtenga el contenido del disco:

$ mkdir Samsung_SSD_840_EVO_EXT0DB6Q
$ cp -r /run/media/$USER/CDROM/isolinux/ Samsung_SSD_840_EVO_EXT0DB6Q

Desmonte el disco:

$ udisksctl unmount -b /dev/loop0
$ cd Samsung_SSD_840_EVO_EXT0DB6Q/isolinux

Hay una imagen de FreeDOS que contiene el firmware. Monte la imagen como antes:

$ udisksctl loop-setup -r -f btdsk.img
$ udisksctl mount -b /dev/loop1
$ cp -r /run/media/$USER/C04D-1342/ Samsung_SSD_840_EVO_EXT0DB6Q
$ cd Samsung_SSD_840_EVO_EXT0DB6Q/C04D-1342/samsung

Obtenga el numero de disco con magician:

# magician -L

Asumiendo que es 0:

# magician --disk 0 -F -p DSRD

Verifique que el firmware más reciente este instalado:

# magician -L

Finalmente, reinicie.

SanDisk

SanDisk hace imágenes ISO del firmware para permitir actualizar el firmware en sistemas operativos que no son soportados por su «SanDisk SSD Toolkit».

Uno debe elegir el firmware para el modelo del SSD correcto, y la capacidad correcta que tiene (p.ej. 60GB, o 256GB). Después de aplicar la imagen ISO con el firmware, simplemente reinicie el PC para iniciar desde el CD/DVD arrancable (puede que funcione desde un USB).

Las imágenes ISO solo contienen un kernel de Linux y un initrd. Extraigalos a la partición /boot e inicie con ellos con GRUB o Syslinux para actualizar el firmware.

Vea también:

Véase también