Estoy intentando ejecutar badblocks
en una unidad con una sola partición. La unidad contiene un sistema de archivos FreeBSD.
Arranco usando una unidad USB en vivo de Linux. La unidad está desmontada. La salida de fdisk -l
es:
Device Boot Start End Id System
/dev/sda1 * 63 976773167+ a5 FreeBSD
Entonces corro:
# badblocks -v /dev/sda1
Y dice:
badblocks: invalid last block - /dev/sda1
No puedo encontrar ninguna información útil sobre esto. ¿Estoy usando la badblocks
utilidad correctamente aquí? ¿O es esto una indicación de que algo anda mal con el disco?
Respuesta1
No, esto no es una indicación de que algo anda mal con la unidad. Recibes este error porque badblocks acepta /dev/sda1 como argumento del último bloque en lugar de aceptarlo como dispositivo.
La sintaxis de su pregunta me parece correcta. Intente especificar el argumento del último bloque después del dispositivo:
badblocks -v /dev/sda1 976773167
Si eso no funciona, intente agregarle también el primer bloque:
badblocks -v /dev/sda1 976773167 63
Sólo para asegurarle que esto no indica que algo anda mal con su disco, aquí está el resultado cuando agrego un argumento de último bloque no válido "no":
sudo badblocks -v /dev/sdb1 no
badblocks: último bloque no válido - no
Aquí hay un ejemplo de mi historial de bash de la última vez que usé badblocks (se requiere acceso sudo para acceder a estas unidades en mi sistema):
sudo badblocks -v /dev/sdb1
Producción:
Comprobando bloques 0 a 976751967
Comprobación de bloques defectuosos (prueba de sólo lectura):
Si cancelo el proceso después de un tiempo con Ctrl+C, el resultado es:
Interrumpido en el bloque 7470720
Aquí está la sintaxis para reanudar el proceso (ver man badblocks
):
badblocks -v dispositivo [último bloque] [primer bloque]
El "último bloque" es el último bloque que se leerá en el dispositivo y el "primer bloque" es donde debe comenzar a leer. Ejemplo:
sudo badblocks -v /dev/sdb1 976751967 7470720
Producción:
Comprobando los bloques 7470720 a 976751967 Comprobación de bloques defectuosos (prueba de sólo lectura):
Respuesta2
El comando badblocks en el hardware de unidad de disco moderno no vale la pena hoy en día. Esto se debe a que la placa controladora de la unidad identifica internamente los bloques defectuosos y los sustituye a partir de bloques "de repuesto" inicialmente asignados para el reemplazo automático. Si se ha quedado sin estos bloques de repuesto y tiene problemas con los bloques defectuosos, le sugiero ENCARECIDAMENTE que reemplace el disco ya que el hardware se está estropeando.
Si está buscando conocer el estado de la unidad, la mayoría de las unidades modernas admiten la interfaz de unidad SMART para informar el estado del disco. Existen muchas utilidades que indican el estado y presentan esta información sobre el estado del disco. Pruebe uno de estos.
Respuesta3
Copiaste tu comando de una página web. El guión fue reemplazado por algún carácter de guión diferente en -v. (un poco más largo que el guión normal) Escriba el comando o corríjalo de alguna manera.
Respuesta4
Si recibe este error a pesar de utilizar la sintaxis correcta y está utilizando discos grandes (por ejemplo, varios TB) con un tamaño de bloque pequeño (por ejemplo, 512 bytes), es posible que se encuentre con una badblocks
limitación al usar 32 bits para los números de bloque.
Como solución alternativa, puede utilizar un bloque más grande. Para encontrar el tamaño de bloque mínimo badblocks
con el que puede funcionar, simplemente puede ejecutar badblocks
con diferentes valores para -b
y sin bloque inicial/final. Si recibe un error como este
badblocks: valor demasiado grande para el tipo de datos definido bloque final no válido: debe ser un valor de 32 bits
luego intente aumentar el tamaño del bloque (por ejemplo, -b 512
a -b 1024
o -b 2048
) hasta que funcione. Con esto usas algo de resolución, pero es mejor que nada.
También puede utilizarlo ddrescue
en este punto o ponerse en contacto con el proveedor de mantenimiento badblocks
para solucionar el problema en la próxima versión.