elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Informática
| |-+  Hardware
| | |-+  Método "infalible" — bajo Linux — para poner a prueba la integridad de un disco.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Método "infalible" — bajo Linux — para poner a prueba la integridad de un disco.  (Leído 376 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.929



Ver Perfil
Método "infalible" — bajo Linux — para poner a prueba la integridad de un disco.
« en: 3 Junio 2025, 09:06 am »

¡Hola! Estaba navegando por eBay buscando un disco duro, y mientras leía las reseñas de un disco en específico, me topé con un comentario bastante interesante. Era de alguien que compartía lo que, según él, es una capa adicional de verificación muy confiable para comprobar la integridad de un disco, especialmente útil para saber si uno recién comprado es perfectamente funcional o por lo contrario será propenso a fallar.

Se trata de una prueba intensiva que DEBE REALIZARSE BAJO LINUX (en Windows podríamos usar WSL con Ubuntu), y, aunque como con cualquier otra prueba no es posible garantizar al 100% que el disco no falle en el futuro por algún motivo, pero en teoría sí proporciona mucha fiabilidad adicional, especialmente como dije para discos recien comprados. Realizando esta prueba podriamos detectar con cierta fiabilidad si es un disco sin fallos de fábrica, o si por lo contrario deberíamos devolverlo lo antes posible durante el plazo de devolución. Si el disco que hemos comprado supera la prueba entonces podríamos asumir que está en excelente estado y que, al menos inicialmente, se puede depositar nuestra confianza en él con menor preocupación.

Lo que acabo de decir solo son las conclusiones que he sacado de dicho comentario.

Yo jamás había escuchado sobre esta prueba intensiva bajo Linux de 4 pasadas usando badblocks. Conozco herramientas para Windows como Victoria y otras tantas que realizan operaciones de escritura similar en el disco, pero le he preguntado a ChatGPT si existe un equivalente a badblocks para Windows y me dijo que no, que lo más confiable es seguir este procedimiento bajo Linux. ¿Qué es badblocks?, bueno, sigan leyendo:

Primeramente les dejo aquí el comentario original en inglés tal cual está redactado:

Citar
What I'm about to tell you will potentially save you from future catastrophic failures including loss of data. Nothing beats having multiple good backup copies.; however, the following information will instruct you on how to test your new drive to make sure it's free from defects. Imagine, you have a spinning disk rotating thousands of times per minute separated by its recording/reading head by less thickness of a human hair. Just one wrong thing and .. "click..click..click". You don't want that. Generally speaking a bad hard drive will make itself known sooner vs later when it's tested fully. Not always. What YOU can do is put the hard drive through its paces to really give it a good solid work out and make sure every space designated by the drive as available/writeable space, is in fact GOOD. Its magnetic/electrical properties strong. This test is a LONG test. What it does is write all 0s, 1s, 0-1s. 1-0s (binary) to the disk. It does this in 4 passes (i.e. writes the disk fully) 4 times. After each write it will read what was just written beginning to end to ensure all bits were written exactly right. If they wern't, the drive's detection mechanism for errors (SMART) will notice (i.e. a bit was not written to a sector correctly) and flag the SMART COUNTER. For example, uncorrectable or reallocated sector count would show a non-0 value. During operation, if the drive encounters a fault with a sector it will swap that sector with another known good sector the drive has in reserve and will log it via SMART. A PERFECTLY WORKING HARD DRIVE WILL SHOW '0' for 'Reallocated Sector Count','Reported Uncorrectable Errors','Current Pending Sector Count','Uncorrectable Sector Count'.IF ANY OF THESE VALUES SHOWS ANYTHING OTHER THAN A 0 (zero), THEN YOU HAVE A FAILING HDD AND SHOULD REPLACE IT ASAP. DO NOT TRUST YOUR DATA ON IT. This command will erase everything on the disk if there is data already on there when you run this test. For a 5TB it took me over 4 days. But I am confident the data will be safe because it worked out the drive hard and pictures above show good numbers. Boot up your computer using a linux distribution boot usb/cd. Debian Ubuntu, any one will do--it doesn't matter. In a terminal type: sudo fdisk -l *Identiy which /dev is your HDD you wish to test. Also note if it says 512 or 4096 where it says "Sector size (logical/physical)". For example, if it's /dev/sde and says 4096 Sector Size (such as this 5tb drive) then type the following command: sudo badblocks -wsv -b 4096 -c 131072 /dev/sde This will 0,1,01,10 write and read/verify the drive back-to-back in 4 passes. On my slow computer via USB 3, this took around 4.5 days to complete. The ' -b ' option is the Block Size. This should match the drive. 512 or 4096. The '-c' option tells badblocks how many blocks to test at time. Changing this number will alter the speed and will either make the process go along faster or slower (dependant on Drive Interface, Ram/Cpu speed, etc.). Instead of '-c 131072' ,try '-c 65536 if it seems the test is taking too long to increment the %'s. In fact try it with '-c 65536' option. Let it run or 30 sec then CTRL-C to cancel it. Then run the command again but with '-c 131072' instead. Run it for 30 sec then CTRL-C to cancel. Compare the 2 and whichever command that had the higher % when you CTRL-C'd would be the number you would choose since that one ran a little bit faster. Google or man page 'badblocks' for more information. Whenever you buy a new hard drive get into the mindset/habit that you will NOT use them for at least a week (or 2) because you have to test them out first. Trust me on this and it's totally worth it. I'd like to think I avoid catastrophic failures because I did this test and it would have presented itself (or at least more likelihood) then vs months/years down the road. That's not a given--any drive can fail anytime or any reason but this is just an additional layer. Like a "shakedown cruise' if you will. Regarding this drive: Seagate Portable 5TB External Hard Drive HDD – USB 3.0, I can say that I am pleased it tested clean and I look forward to using this drive.And I'm confident it will keep my data intact. You are welcome!



Y por último me despido dejándoles la traducción al español y con formato:

Lo que estás a punto de leer podría salvarte de fallos catastróficos en el futuro, incluyendo la pérdida total de datos.
Nada supera tener varias copias de seguridad bien hechas, pero la información que sigue te enseñará cómo probar tu nuevo disco duro para asegurarte de que no tiene defectos.

Imagina esto: un disco girando miles de veces por minuto, separado de su cabezal de lectura/escritura por menos del grosor de un cabello humano. Basta un pequeño fallo para escuchar ese temido sonido: "clic... clic... clic". No quieres que eso pase.

En términos generales, un disco duro defectuoso suele mostrar síntomas más temprano que tarde si se le somete a una prueba exhaustiva. No siempre, pero muchas veces sí.

Lo que TÚ puedes hacer es someter el disco a una prueba intensiva que lo exprima al máximo, asegurándote de que cada espacio declarado como disponible y escribible sea efectivamente funcional, con propiedades magnéticas y eléctricas sólidas.

Esta es una prueba LARGA.
Lo que hace es escribir patrones binarios en el disco (todos 0s, luego 1s, luego 0-1s, y después 1-0s), en 4 pasadas completas.
Después de cada escritura, el programa lee todo el contenido de principio a fin para verificar que los bits escritos estén correctos.

Si algo falla, el sistema SMART del disco detectará errores (por ejemplo, que un bit no fue escrito correctamente en un sector) y marcará los contadores SMART.

Algunos valores clave que deben ser igual a cero en un disco perfectamente funcional:

  • Reallocated Sector Count
  • Reported Uncorrectable Errors
  • Current Pending Sector Count
  • Uncorrectable Sector Count



Si cualquiera de estos valores es distinto de 0, el disco está fallando y deberías reemplazarlo cuanto antes. NO confíes tus datos a él.

⚠️ Advertencia: Este test borra todo lo que haya en el disco. Si tiene información, se perderá.

En mi caso, con un disco de 5 TB, la prueba tomó más de 4 días. Pero ahora tengo confianza de que los datos estarán seguros, porque el disco superó la prueba con éxito.

Pasos para realizar la prueba:

    Arranca tu computadora usando un Live USB/CD con alguna distribución de Linux (Debian, Ubuntu, cualquiera sirve).

    Abre un terminal y escribe:

Código:
sudo fdisk -l

    Identifica cuál es tu disco (por ejemplo, /dev/sde) y fíjate en el tamaño del sector lógico/físico (512 o 4096).

Ejemplo: Si tu disco es /dev/sde y usa sectores de 4096, ejecuta:

Código:
sudo badblocks -wsv -b 4096 -c 131072 /dev/sde

Este comando escribirá los patrones binarios (0,1,01,10), luego los leerá y verificará, durante 4 pasadas completas.
En mi caso, vía USB 3.0 en un equipo lento, tomó aproximadamente 4.5 días.

Explicación de opciones:
Código:
-b
→ Tamaño del bloque. Debe coincidir con el tamaño de bloque del disco (512 o 4096).
Código:
-c
→ Cuántos bloques probar a la vez. Afecta la velocidad de la prueba.

Si ves que va lento con -c 131072, prueba con:

Código:
-c 65536

Puedes comparar la velocidad de ambos con CTRL+C tras 30 segundos y elegir el que haya avanzado más en porcentaje.

Para más información, busca en Google o consulta la man page de badblocks.

Consejo final:
Cada vez que compres un disco nuevo, acostúmbrate a no usarlo por al menos una semana o dos. Primero, ¡ponlo a prueba! Créeme, vale la pena.

Me gusta pensar que evité fallos catastróficos gracias a esta prueba. Es una capa adicional de protección, como un “viaje de prueba” antes de confiarle tus datos.

En cuanto a este modelo específico:
Seagate Portable 5TB External Hard Drive HDD – USB 3.0

Puedo decir que estoy satisfecho. Pasó la prueba sin errores y estoy tranquilo sabiendo que mis datos estarán bien protegidos en él.

¡De nada! 😊


« Última modificación: 3 Junio 2025, 09:39 am por Eleкtro » En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.929



Ver Perfil
Re: Método "infalible" — bajo Linux — para poner a prueba la integridad de un disco.
« Respuesta #1 en: 3 Junio 2025, 09:20 am »

Le pedí a ChatGPT que desarrollase un script en Bash para automatizar la instalación de badblocks:

Código
  1. #!/bin/bash
  2. # Script para instalar badblocks en Ubuntu/Debian
  3.  
  4. # Actualizar repositorios
  5. sudo apt update
  6.  
  7. # Instalar e2fsprogs que incluye badblocks
  8. sudo apt install -y e2fsprogs
  9.  
  10. # Confirmar instalación
  11. if command -v badblocks > /dev/null; then
  12.  echo "badblocks se ha instalado correctamente en Ubuntu/Debian."
  13. else
  14.  echo "Error: badblocks no se pudo instalar."
  15. fi

Y también le pedí otro script que me permitiese elegir la unidad de disco donde usar badblocks, y que los parámetros del tamaño de sector el otro parámetro se ajustasen automáticamente analizando el disco elegido y el sistema en ejecución. Este fue el resultado:

Código
  1. #!/bin/bash
  2.  
  3. # Verificar si se está ejecutando como root
  4. if [ "$EUID" -ne 0 ]; then
  5.  echo "Por favor, ejecuta este script como root (usando sudo)."
  6.  exit 1
  7. fi
  8.  
  9. # Listar todos los discos disponibles
  10. echo "Discos disponibles en el sistema:"
  11. lsblk -d -o NAME,SIZE,MODEL
  12.  
  13. # Solicitar al usuario que seleccione un disco
  14. read -p "Introduce el nombre del disco que deseas probar (por ejemplo, sda): " disk
  15.  
  16. # Verificar si el disco existe
  17. if [ ! -b "/dev/$disk" ]; then
  18.  echo "El disco /dev/$disk no existe. Por favor, verifica e intenta de nuevo."
  19.  exit 1
  20. fi
  21.  
  22. # Determinar el tamaño de sector físico
  23. sector_size=$(cat /sys/block/$disk/queue/physical_block_size)
  24.  
  25. # Determinar el tamaño de bloque para badblocks
  26. if [ "$sector_size" -eq 512 ]; then
  27.  block_size=512
  28. elif [ "$sector_size" -eq 4096 ]; then
  29.  block_size=4096
  30. else
  31.  block_size=1024  # Valor predeterminado si no se puede determinar
  32. fi
  33.  
  34. # Obtener la RAM total en GB (truncada a entero)
  35. ram_total_gb=$(free -g | awk '/^Mem:/{print $2}')
  36.  
  37. # Determinar el valor adecuado para -c en función de la RAM
  38. #
  39. # El parámetro -c de badblocks (que indica cuántos bloques se prueban en cada pasada)
  40. # sí que debería ajustarse en función de la cantidad de RAM disponible,
  41. # especialmente si se ejecuta en modo destructivo (-w)
  42. # porque este modo consume mucha memoria, ya que mantiene múltiples patrones en memoria para comparar.
  43. if [ "$ram_total_gb" -lt 1 ]; then
  44.  block_count=65536      # ~256MB
  45. elif [ "$ram_total_gb" -lt 2 ]; then
  46.  block_count=131072     # ~512MB
  47. elif [ "$ram_total_gb" -lt 3 ]; then
  48.  block_count=262144     # ~1GB
  49. elif [ "$ram_total_gb" -lt 4 ]; then
  50.  block_count=524288     # ~2GB
  51. elif [ "$ram_total_gb" -lt 5 ]; then
  52.  block_count=786432     # ~3GB
  53. elif [ "$ram_total_gb" -lt 6 ]; then
  54.  block_count=1048576    # ~4GB
  55. elif [ "$ram_total_gb" -lt 7 ]; then
  56.  block_count=1310720    # ~5GB
  57. elif [ "$ram_total_gb" -lt 8 ]; then
  58.  block_count=1572864    # ~6GB
  59. elif [ "$ram_total_gb" -lt 9 ]; then
  60.  block_count=1835008    # ~7GB
  61. elif [ "$ram_total_gb" -lt 10 ]; then
  62.  block_count=2097152    # ~8GB
  63. elif [ "$ram_total_gb" -lt 11 ]; then
  64.  block_count=2359296    # ~9GB
  65. else
  66.  block_count=2621440    # ~10GB
  67. fi
  68.  
  69. echo "RAM detectada: $ram_total_gb GB"
  70. echo "Usando block_count para badblocks: $block_count"
  71.  
  72. # Mostrar la información al usuario
  73. echo
  74. echo "Has seleccionado el disco /dev/$disk."
  75. echo "Tamaño de sector físico: $sector_size bytes."
  76. echo "Tamaño de bloque para badblocks: $block_size bytes."
  77. echo "Memoria RAM detectada: $ram_total_gb GB"
  78. echo "Valor calculado para -c (bloques a probar por pasada): $block_count"
  79. echo
  80.  
  81. # Confirmar antes de ejecutar badblocks
  82. read -p "¿Deseas ejecutar badblocks en modo destructivo en /dev/$disk? Esto borrará TODOS los datos del disco. (s/n): " confirm
  83.  
  84. if [[ "$confirm" =~ ^[Ss]$ ]]; then
  85.  echo "Ejecutando badblocks en /dev/$disk..."
  86.  badblocks -wsv -b $block_size -c $block_count /dev/$disk
  87.  echo "Prueba completada."
  88. else
  89.  echo "Operación cancelada por el usuario."
  90.  exit 0
  91. fi

¡Tengo muchísimas ganas de probar este método intensivo con el próximo disco que me compre!

No me hago responsable si el script no funciona correctamente o si causase daños en un disco. Yo no utilizo Linux, así que no tengo ni idea de programar en Bash ni conozco los comandos disponibles ni su modo de empleo, por eso le pedí a ChatGPT que hiciera el script por mi. 👍


« Última modificación: 3 Junio 2025, 09:35 am por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines