Solid State drive (Español)
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 | Sí | Sí | |
Ext3 | No | ? | |
Ext4 | Sí | Sí | "discard, nodiscard(*)" en [1] |
F2FS | Sí | Sí | |
JFS | Sí | Sí | [2] |
NILFS2 | Sí | Sí | |
NTFS-3G | No | Sí | Desde la versión 2015.3.14, [3] |
VFAT | Sí | Sí | fstrim es soportado desde la versión 4.19 del kernel |
XFS | Sí | Sí | [4][enlace roto 2021-11-19] |
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)
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
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.
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.Usando la opción de montado discard
en /etc/fstab
habilita TRIM continuo al operar el dispositivo:
/dev/sda1 / ext4 defaults,discard 0 1
/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.
/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.
# 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.
/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.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
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.
- Intel: Use la Intel Memory and Storage (MAS) (Herramienta de Memoria y Almacenamiento de Intel) (intel-mas-cli-toolAUR) con la opción
-set PhysicalSectorSize=4096
.
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]).
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[enlace roto 2021-11-19]) 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).
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®[enlace roto 2021-05-17]» 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[enlace roto 2021-11-19] 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.
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:
- SanDisk Extreme SSD Notas de la versión del firmware y Actualización manual del firmware versión R211
- SanDisk Ultra SSD Notas de la versión del firmware y Actualización manual del firmware versión 365A13F0
- SanDisk Ultra+ SSD Notas de la versión del firmware y Actualización manual del firmware versión X2316RL - use
smartctl -a /dev/sdX
para determinar si esta ocupando un modelo «H2» o «HP».
Véase también
- Discusión en Reddit acerca de instalar Arch Linux en un SSD (en inglés)
- Re: Cambiando el Leafsize y Nodesize en Btrfs
- Re: Alineación del SSD y tamaño del sector en Btrfs (en inglés)
- ¿Información falsa de (el alineado de) Erase Block? (en inglés)
- ¿Se necesita alinear el tamaño de Erase Block en SSDs modernos? (en inglés)
- Soportando la operación eficaz de SSDs en Btrfs (en inglés)
- SSD, tamaño de Erase Block y LVM: PV en un dispositivo en bruto, Alineamiento (en inglés)