¿Cómo creo una imagen un poco idéntica de un dispositivo USB?

21

Tengo un dispositivo USB que es ilegible por alguna razón. Quiero hacer una imagen de él con fines de almacenamiento para poder intentar recuperar los datos de la imagen en una fecha posterior.

¿Cómo haría para crear una imagen tan idéntica de un dispositivo USB?


Este es el error que obtengo al usar dd:

oshirowanen@desktop:~$ sudo dd if=/dev/sdd of=/USB_image
[sudo] password for oshirowanen: 
dd: reading `/dev/sdd': Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.00783 s, 0.0 kB/s
oshirowanen@desktop:~$ 
oshirowanen
fuente
¿Qué editor hexadecimal utiliza?
AJMansfield
Cuando no puede leer desde el dispositivo /dev/sdxapuntando a la memoria USB, hay un problema grave, y creo que no hay herramientas disponibles para los usuarios normales, eso funcionará. Vea este enlace para más detalles, askubuntu.com/questions/144852/… ; No te rindas de inmediato. Intente de acuerdo con la lista de cosas que pueden hacer que la lectura funcione. Tal vez pueda separar el pendrive USB y encontrar una tarjeta micro SD, que todavía funciona de acuerdo con el comentario de @ ubfan1 (en la respuesta vinculada).
sudodus
tiene 2 opciones para manejar su problema: primero fácil: ejecute sudo su y luego como root ejecute su comando dd 2.a versión más experta ejecute dd con estado y '' sudo bash -c 'dd status = progreso si = / dev / sd * | gzip> ~ / Backup-USB.img.gz '
WiKrIe

Respuestas:

39

dd ¡eso!

Uso sería algo así como sudo dd if=/dev/sdb of=~/USB_imageen / dev / sdb es la unidad de USB según el listado de sudo fdisk -le ~ / USB_image es el archivo de imagen en la que se hizo la copia (una ruta en la que se creó el archivo de imagen).

Para restaurar la imagen a otra unidad USB, simplemente invierta el proceso: sudo dd if=~/USB_image of=/dev/sdbrestaurará ~ / USB_image al dispositivo sdb . Solo asegúrese de que la nueva unidad USB sea tan grande o más grande que la original.

También puede montar el archivo de imagen que acaba de crear en una ruta sin necesidad de restaurarlo primero en otra unidad USB con mount ~/USB_image /mnt/USB_image -o loop.

Bruno Pereira
fuente
¿Qué pasa si fdisk -lno puedo ver la unidad usb? Sin embargo, puedo verlo desde el programa Utilidad de Discos como / dev / sdd, pero cuando trato de usar su comando, parece fallar.
oshirowanen
¿Fallar con qué culpa?
Bruno Pereira
Se agregó el error a la pregunta original, ya que era demasiado para un comentario.
oshirowanen
1
Si fdisk no muestra el dispositivo, use dmesg para ver lo que sucede cuando el dispositivo está enchufado. Dmesg es una lista de interacciones del núcleo, por lo que, básicamente, si el hardware hace algo en su computadora, hay un mensaje al respecto en dmesg.
j0h
2
@Alex use status='progress'con dd en Ubuntu, o descubra el PID de su ddcomando y envíele la SIGUSR1señal. Sin embargo, no estoy seguro acerca de otras implementaciones.
Sergiy Kolodyazhnyy
7

Uso ddrescue. Continuará después de los errores, donde ddsimplemente fallará.

Además, ddrescueestá en los repositorios. El 13.04, escribí sudo apt-get install gddrescue para instalar.

Use sudo fdisk -lo dmesgpara averiguar la ubicación del dispositivo, por ejemplo:, /dev/sdbluego ejecute un comando como

ddrescue /dev/sdb /home/user/desktop/bkp.img

Hay muchas opciones para ddrescue, y es posible que desee leer las manpáginas. Además, no estoy seguro de por qué su hardware está fallando y volcando dd. Un bloqueo defectuoso podría dejar de ddfumar, pero también podrían fallas intermitentes. dmesgpuede darle más información sobre fallas de hardware que pueda estar experimentando.

¡ASEGÚRESE de que el dispositivo no esté montado! cuando intenta hacer recuperación de datos, imágenes, etc. Esto puede causar problemas.

Hay muchas cosas que pueden salir mal en la recuperación de datos. Publica de nuevo si tienes problemas. testdiskes una buena utilidad para recuperar datos una vez que tienes una imagen.

Solo por claridad, ¿se trata de un disco duro USB o un dispositivo USB (memoria de estado sólido)?

Los errores de E / S son típicamente indicativos de mal funcionamiento del hardware en lugar de daños en el sistema de archivos.

Intente también obtener el análisis de datos SMART del dispositivo, si está disponible. Esto puede decirle cosas como si el dispositivo ha estado sobrecalentado, encendido durante mucho tiempo, tiene sectores defectuosos y está expuesto a más de X no. de Gs etc.

j0h
fuente
Memoria USB, no hay datos INTELIGENTES para analizar ... También creo que debe usar sudopara ddrescue, * donde dd simplemente fallará * no es cierto, ya que puede configurarlo ddpara ignorar los errores de lectura. testdiskEs increíble cuando puedes leer los sectores de datos perdidos , no cuando la unidad está muerta.
Bruno Pereira
# es el símbolo de la raíz, así que no, no se requiere sudo. si fuera $ entonces sí.
j0h
También quiero señalar que si ddrescue, o incluso dd falla, pero puede generar una imagen, aún puede intentar recuperar datos en esa imagen.
j0h
Sugeriría el uso de gddrescuecontra ddrescueya que gddrescuees más nuevo y más capaz de hacer el trabajo que ddrescuehace.
Bruno Pereira
1
Ni siquiera sé hombre, lee mi publicación. gddrescue es el paquete y ddrescue es el comando.
j0h
2

Puede crear una imagen de una memoria USB (u otro dispositivo) mediante dd.

P.ej

dd if=<usb device> of=usb.img

Puede agregar más parámetros ddpara optimizar el comando (por ejemplo bs).

Uwe Plonus
fuente
2

dd, como se mencionó en un póster anterior, es la forma nativa de hacerlo. Sin embargo, querrá que continúe con los errores, por lo que debería comenzar con:

dd if=<usb device> of=<new file on disk with enough space> bs=<should match your blocksize> conv=noerror,sync 

La parte importante es la última: conv=syncle dice a dd que rellene todos esos bloques que podría leer solo parcialmente con ceros, por lo que la imagen resultante puede tener unos pocos ceros demasiados, pero estructuralmente será igual al disco escamoso, menos sus errores de lectura. conv=noerror se ocupó de esos errores de lectura, diciéndole a dd que continuara con el siguiente bloque. En este punto, el tamaño del bloque es importante, ya que si es más grande de lo necesario para omitir el error, los datos legibles se perderán aquí. El tamaño de bloque siempre debe ser un factor de dos; si tiene dudas, 512kdebería ser el truco.

Entonces sugeriría:

  • almacenar una copia no modificada de esa imagen en un lugar seguro
  • fsck una copia de la imagen del disco
  • montar la imagen del disco
  • revise sus archivos: ahora se pueden leer sin problemas, pero algunos pueden faltar o estar truncados
  • Si el dispositivo en sí no se puede leer, es posible que no tenga suerte. Además, si el dispositivo contiene algún software patentado, puede configurarse para devolver errores de lectura cuando se accede en los primeros bloques.

(Parcialmente citando un artículo escrito en 2010)

Si no necesita permanecer nativo, siempre puede probar las herramientas que intentan facilitar un poco el proceso, como ddrescue (paquete gddrescue) y su compañero ddrescueview( sourceforge ) para visualizar los errores.

Tatjana Heuser
fuente
2

Con respecto a la segunda mitad de su pregunta "Este es el error que obtengo al usar dd": puedo ver un par de posibilidades.

  1. Tenga en cuenta la diferencia en el comando que escribió frente a la respuesta aceptada; te estás perdiendo un ~frente de /USB_image. En otras palabras, está intentando generar la raíz de su sistema de archivos en lugar de su directorio de inicio.
  2. /dev/sddpuede no ser la unidad correcta. Ejecute sudo fdisk -ly compare el tamaño de la unidad con el tamaño conocido de la memoria USB. Por ejemplo, sé que esto es mi memoria USB, ya que está cerca de 16 GB: Disk /dev/sdf: 15.8 GB, 15805186048 bytes.
MDMower
fuente