En corto

1
2
3
badblocks -b 4096 -sv /dev/sdX          # solo lectura: no toca datos
badblocks -b 4096 -nsv /dev/sdX         # lectura + escritura no destructiva (el doble de lento)
badblocks -b 4096 -wsv /dev/sdX         # DESTRUCTIVO: escribe patrones y borra todo el disco

-b 4096 sube el techo de 4 TiB a 16 TiB. Para discos de más de 16 TiB, -b 8192.

El error

1
badblocks: Value too large for defined data type invalid end block (7814026584): must be 32-bit value

Sale antes de leer un solo sector. El número es la cantidad de bloques del disco con el tamaño de bloque por defecto (1 KiB): 7 814 026 584 bloques son 8 TB.

Por qué pasa

badblocks numera los bloques con un entero de 32 bits: como mucho 4 294 967 295. Con el bloque por defecto de 1 KiB eso son 4 TiB (unos 4.4 TB comerciales); cualquier disco mayor desborda el contador. Subir el tamaño de bloque multiplica el techo:

-bTecho
1024 (por defecto)4 TiB
409616 TiB
819232 TiB
1638464 TiB

4096 es además el tamaño natural: coincide con el sector físico de los discos actuales (blockdev --getpbsz /dev/sdX lo confirma) y con el bloque por defecto de ext4, que es lo que importa si vas a pasarle la lista a e2fsck.

Qué modo usar

ModoQué haceCuándo
-sv (por defecto)Lee todo el disco una vezDisco con datos; chequeo rápido
-nsvLee, escribe un patrón, restaura el original, bloque a bloqueDisco con datos que quieres probar en escritura. Desmontado; un corte de luz a medias pierde el bloque en curso
-wsvCuatro pasadas de escritura (0xaa, 0x55, 0xff, 0x00) con verificaciónDisco nuevo o de segunda mano antes de meterle datos (burn-in)

Tiempo: una pasada de lectura tarda capacidad ÷ velocidad (un disco de 8 TB a 180 MB/s, unas 13 horas); -w son ocho pasadas (cuatro de escritura y cuatro de lectura), varios días en discos grandes. Lánzalo dentro de tmux o screen.

Opciones útiles:

1
2
3
badblocks -b 4096 -c 1024 -wsv /dev/sdX          # -c: bloques por pasada (más memoria, algo más rápido)
badblocks -b 4096 -sv -o /root/sdX-bad.txt /dev/sdX   # -o: lista de bloques malos
e2fsck -f -l /root/sdX-bad.txt /dev/sdX1              # marcarlos en un ext4 (mismo -b que el bloque del fs)

Lo que un disco moderno no te dice con badblocks

Los discos remapean sectores defectuosos por su cuenta: si badblocks llega a encontrar alguno, es que el disco ya agotó o está agotando la reserva. Antes y después de cualquier pasada, mira SMART:

1
2
3
smartctl -A /dev/sdX | grep -E 'Reallocated_Sector|Current_Pending|Offline_Uncorrectable'
smartctl -t long /dev/sdX          # test largo dentro del propio disco, sin tráfico por el bus
smartctl -l selftest /dev/sdX      # resultado cuando termine (horas)

Para decidir si un disco de segunda mano entra al pool, smartctl -t long más los atributos 5, 197 y 198 dicen más que badblocks en una fracción del tiempo. badblocks -w sigue teniendo sentido como burn-in de un disco nuevo, porque fuerza escritura en toda la superficie.

Trampas

  • -w sobre el dispositivo equivocado borra el disco equivocado. lsblk -o NAME,SIZE,MODEL,SERIAL antes de escribir la orden, y nunca sobre uno montado.
  • Puentes USB-SATA que se reinician a mitad de una pasada de días: si puedes, conecta el disco a SATA directo. Un reinicio del puente aborta el test y no deja resultado parcial.
  • mkfs.ext4 -c ejecuta badblocks por ti con el bloque del sistema de archivos (4 KiB), así que no desborda; pero es un mkfs, destructivo por definición.
  • Controladoras HPE Smart Array: los discos detrás de la controladora se consultan por SMART con smartctl -d cciss,N /dev/sda; badblocks ve el volumen lógico, no cada disco.
  • En ZFS no uses badblocks sobre un miembro del pool: zpool scrub hace la comprobación con checksums reales de los datos.

Referencias: badblocks en la ArchWiki y man 8 badblocks.