Un SSD NVMe de 128 GB o de 256 GB nuevo cuesta hoy entre 50 y 80 euros si tiras de marca genérica, y se va por encima de los 90 euros en marcas más conocidas o de formato corto. Por eso un SSD NVMe de segunda mano a 24 o 28 euros tiene su interés. El problema es que comprar almacenamiento usado es siempre un poco lotería: nadie te garantiza cuánta vida le queda al disco ni cuántos terabytes ha movido antes de llegar a tus manos. Con suerte algunos vendedores ponen una captura de pantalla de CrystalDiskInfo.
La buena noticia es que esa lotería se puede controlar bastante. Con tres herramientas de Linux y cinco minutos por disco se saca la vida real de la unidad, su desgaste y su velocidad. Hoy he probado tres NVMe comprados en Wallapop usando una Compute Module 5 con su IO Board oficial, que trae ranura M.2 M-key integrada.
Las herramientas: smartmontools, nvme-cli, hdparm y fio
Para diagnosticar un disco usado solo hacen falta cuatro paquetes. El primero es smartmontools, que da acceso a los datos SMART del disco. El segundo es nvme-cli, específico para unidades NVMe y con información más detallada. Los otros dos miden rendimiento: hdparm para una lectura rápida y fio para una prueba seria.
En cualquier sistema basado en Debian o Ubuntu se instalan así:
sudo apt update
sudo apt install smartmontools nvme-cli hdparm fio
Funciona igual en una Raspberry Pi, en una SBC rival o en un PC normal. Todo lo que viene a continuación se ejecuta desde la Terminal.
Identificar el disco y leer su SMART
Lo primero es saber qué tienes delante. El comando de identificación devuelve modelo, número de serie, versión NVMe y capacidad:
sudo smartctl -i /dev/nvme0n1



Después viene lo importante, que es el registro de salud. La orden de nvme-cli saca el log completo con todos los contadores que de verdad importan en un disco usado:
sudo nvme smart-log /dev/nvme0n1
Y para un veredicto rápido de aprobado o suspenso, smartctl resume la autoevaluación del disco en una sola línea:
sudo smartctl -H /dev/nvme0n1
Los datos que delatan a un disco gastado
De toda esa parrafada hay cuatro o cinco cifras que concentran el diagnóstico. La más directa es percentage_used, el desgaste estimado por el propio firmware. Un 0% es prácticamente nuevo; por encima del 80% conviene huir.

El available_spare indica el porcentaje de bloques de reserva que quedan, y debe estar en 100% o muy cerca. Por su parte, media_errors tiene que ser cero sí o sí: cualquier valor positivo es señal de celdas que ya fallan. Las power_on_hours cuentan las horas totales encendido, así que un disco con decenas de miles de horas ha vivido mucho aunque siga sano.
Conviene mirar también data_units_written, que se traduce en los TBW consumidos. Si un disco con 0% de desgaste muestra muchos terabytes escritos, algo no cuadra en sus cuentas. Por último, los unsafe_shutdowns revelan apagados bruscos: no condenan al disco, pero indican una vida accidentada.
Medir la velocidad: hdparm y fio
Con la salud confirmada toca el rendimiento. La prueba rápida es hdparm, que da una lectura secuencial directa en tres segundos:
sudo hdparm -t --direct /dev/nvme0n1
Ahora bien, hdparm es síncrono y de un solo hilo, así que se queda corto para un NVMe moderno. En mis pruebas marcaba siempre cifras parecidas aunque el bus diera para mucho más. La medición seria la da fio con motor asíncrono:
sudo fio --name=test --filename=/dev/nvme0n1 --rw=read --bs=128k \
--numjobs=1 --iodepth=32 --direct=1 --runtime=10 --time_based \
--ioengine=io_uring --group_reporting
Un aviso importante: si usas --ioengine=psync (el de por defecto), fio capa la cola a profundidad 1 y el resultado sale igual de pobre que con hdparm. Hay que pedir io_uring o libaio para que la prueba tenga sentido.
El truco del PCIe Gen 3 en la Compute Module 5


Aquí apareció lo interesante. El primer fio daba 446 MB/s en los tres discos, una cifra sospechosamente plana. La pista estaba en el enlace PCIe negociado, que se consulta así:
cat /sys/bus/pci/devices/*/current_link_speed
Salía 5.0 GT/s, es decir, PCIe Gen 2. La Compute Module 5 usa el mismo BCM2712 que la Pi 5 y arranca el PCIe en Gen 2 por defecto. Subirlo a Gen 3 es un parámetro en el fichero de arranque:
echo "dtparam=pciex1_gen=3" | sudo tee -a /boot/firmware/config.txt
sudo reboot
El cambio fue inmediato. El mismo disco pasó de 446 a 871 MB/s, prácticamente el doble, y la latencia se redujo a la mitad. Eso sí, conviene saber que Gen 3 es no oficial en la Pi 5 y la CM5. Raspberry Pi no lo certifica porque depende de la calidad de las trazas y del disco. En la IO Board oficial, con un NVMe nativo, me ha funcionado estable, pero en datos críticos yo revisaría primero el kernel en busca de errores:
sudo dmesg | grep -i "pcie\|nvme\|error\|aer"
Los tres discos a examen



El primero fue un WD PC SN520 de 256 GB, formato M.2 2280, que me costó 24 euros. Su SMART estaba limpio de errores, pero acumulaba casi 27.000 horas de uso y un 9% de desgaste. Viene claramente de un equipo con muchos años de servicio.
El segundo fue un Micron MTFDKCD256TFK, también de 256 GB, en formato M.2 2242 y por 28 euros. Este venía prácticamente nuevo: 0% de desgaste, 88 horas encendido y controlador Phison PS5019. Además es PCIe Gen 4 x4, así que aprovecha de sobra el Gen 3 de la CM5.
El tercero no era de compra, sino un Samsung PM9A1 de 256 GB en formato M.2 2230 que reciclé de mi propia Steam Deck. Tenía un 1% de desgaste y 79 horas. Su formato corto de 30 mm es justo el que monta la consola de Valve, de ahí que sea tan fácil de reaprovechar al cambiarle el disco a la Deck.
| Modelo | Formato | PCIe | Desgaste | Horas | Origen |
|---|---|---|---|---|---|
| WD SN520 | M.2 2280 | Gen 3 x2 | 9% | 26.960 | Wallapop (24€) |
| Micron MTFDKCD | M.2 2242 | Gen 4 x4 | 0% | 88 | Wallapop (28€) |
| Samsung PM9A1 | M.2 2230 | Gen 4 x4 | 1% | 79 | Steam Deck reciclado |
En velocidad los tres quedaron igualados en torno a los 870 MB/s con Gen 3, porque el límite lo pone el bus PCIe x1 de la CM5 y no el disco. La diferencia real está en la salud y en las horas, no en el rendimiento.

Qué disco me quedo
El WD SN520 queda descartado para nada serio. No por errores, que no los tiene, sino por esas casi 27.000 horas que lo dejan en zona de riesgo. Sirve para datos de usar y tirar con copia de seguridad, poco más.
El Micron es la compra clara. Por 28 euros me llevo un disco a estrenar, Gen 4 y con todos los contadores impecables. Que sea M.2 2242 incluso ayuda en placas pequeñas donde el 2280 estorba.
Comprar almacenamiento de segunda mano es una apuesta, pero con smartctl y nvme-cli dejas de apostar a ciegas. Yo no compro un NVMe usado sin ver antes su percentage_used y sus media_errors. Cinco minutos de Terminal te ahorran el disgusto de un disco moribundo a precio de ganga.
Enlaces útiles
La documentación oficial de smartmontools y la del proyecto nvme-cli en GitHub explican cada contador con detalle. Si te interesa exprimir el almacenamiento en estas placas, en el blog ya conté cómo arrancar una Compute Module 5 desde NVMe para emulación.






