20 votos

¿Cómo recuperar un archivo borrado de la partición /data?

He restablecido de fábrica mi teléfono Android M rooteado pero ahora me doy cuenta de que había un archivo en el /datos directorio que necesito.

¿Es posible crear una imagen (.img o algo similar) de la partición /data para poder ejecutar algún software de recuperación para ext4 en esa imagen? Tengo un poco de conocimiento sobre ADB.

1 votos

0 votos

27voto

Jack Wade Puntos 231

Primero para aclarar root y data :

  • Directorio root / de los dispositivos Android es un pseudo sistema de archivos (temporal) de sólo lectura ( rootfs ) que vive en la memoria RAM y desaparece cuando el dispositivo se apaga. Cuando el dispositivo se enciende, se extrae de nuevo de initramfs que vive en boot partición junto con el kernel.

En los dispositivos más nuevos con system-as-Root , system la partición está montada en root / .

  • /data es un punto de montaje, donde la partición más grande, normalmente llamada userdata está montado. Esta partición contiene todas las aplicaciones de usuario, sus datos (configuraciones, bases de datos, cachés, archivos temporales, etc.), los datos de las aplicaciones del sistema y todas las demás configuraciones que hagamos a través de Settings . /data/media/0 es el directorio que vemos como /sdcard o /storage/emulated/0 a través de emulación .

... había un archivo en el directorio /data que necesito. Es posible crear una imagen (.img o algo similar) del directorio root ...

Si se borra un archivo de /data , es necesario crear un volcado de data partición, no la del directorio Root.

Puede hacerlo de múltiples maneras que se describen a continuación. Todas requieren Acceso a root .


Pero en primer lugar, vea esta respuesta para asegurarse de que sus datos son recuperables.

En resumen, la recuperación es más o menos posible sólo si ( 1 ) :

  • Sus datos borrados no han sido TRIM med o discard ed.
  • Y no has hecho un restablecimiento de fábrica en la encriptación /data partición.

Lo que debe hacer inmediatamente:

  • Apaga el teléfono para asegurarte de que los datos eliminados no se sobrescriban.
  • No instale aplicaciones de recuperación de datos en el dispositivo, puede hacer más daño que bien.
  • Monte el sistema de archivos (si es necesario) en modo de recuperación (o en el PC) sólo con ro,nodiscard opciones.

ENCONTRAR EL DISPOSITIVO DE BLOQUEO:

Para acceder al userdata partición, es necesario encontrar su dispositivo de bloque. Si tienes acceso Root, puedes hacerlo desde las particiones montadas:

~# mount | grep 'on /data'
/dev/block/mmcblk0p... on /data type f2fs (rw,nosuid,nodev,...)

En los dispositivos Qualcomm, se encuentra en /dev/block/bootdevice/by-name/userdata (enlace simbólico). Para MediaTek ( MTK ) y otros SoC, el camino es ligeramente diferente. Puede encontrar todos los dispositivos de bloque o by-name directorio utilizando find comando:

~# find /dev -type b
~# find /dev -type d -name 'by-name'

O por golpear y probar:

~# ls -d /dev/*/by-name
~# ls -d /dev/*/*/by-name
~# ls -d /dev/*/*/*/by-name

Nota:

CREANDO UN VOLCADO DE LA PARTICIÓN:

DUMP DE DISCOS ( dd )
Una vez que se conoce el dispositivo de bloque, se puede utilizar la función dd comando de:

  • Shell ADB (sistema operativo o recuperación personalizada)
  • Una aplicación de emulador de terminal como Termux

Desde el userdata es la partición más grande (todas las demás particiones apenas utilizan 5GB del total del almacenamiento), no puedes volcarla a tu memoria interna. Se necesita una tarjeta SD externa con mayor capacidad.

Para crear el volcado:

~# dd if=/dev/block/bootdevice/by-name/userdata of=/path/to/ext_sdcard/data.img

ADB
Si no quieres usar una tarjeta SD externa, también puedes volcar la partición directamente al PC. Primero necesitas un adb configuración, ejecutándose como Root. Entonces se puede utilizar de múltiples maneras:

~$ adb exec-out dd if=/dev/block/bootdevice/by-name/userdata > data.img

* Asegúrese de que su adb binario (en Windows o Linux) soporta exec-out .

Pero puede terminar con datos corruptos al escribir una partición entera de gran tamaño en STDOUT de la terminal porque hay problemas con los tipos de saltos de línea ( CR y LF ). También STDOUT o STDERR de los programas implicados podrían añadirse al expediente si no se dirigen a /dev/null . Incluso un solo byte erróneo puede hacer que los sistemas de archivos no se puedan montar. Véase esta pregunta como referencia.

Para evitar los caracteres no deseados, utilice stty raw y/o dos2unix :

~$ adb shell 'stty raw && dd if=/dev/block/bootdevice/by-name/userdata' > data.img

Pero la forma más directa es:

~$ adb pull /dev/block/bootdevice/by-name/userdata data.img

Ver esta respuesta para más detalles.

FLUJO SOBRE TCP
Para evitar las complicaciones relacionadas con los terminales descritas anteriormente o si por alguna razón adbd no puede ser ejecutado como Root También es posible crear un servidor TCP mínimo para la transferencia de datos. Reenvía el puerto del teléfono al PC y ejecuta un netcat Servidor TCP en modo de escucha:

~$ adb reverse tcp:1024 tcp:1024
~$ nc -v -l -p 1024 </dev/null | pv -ab >data.img

Por teléfono:

~# cat /dev/block/bootdevice/by-name/userdata | busybox nc 127.0.0.1 1024

ANCLAJE USB (RNDIS)
Para evitar el uso de ADB en absoluto, se puede utilizar el tethering USB para proporcionar conectividad de red:

~# cd /sys/class/android_usb/android0
~# echo -n 0 >enable
~# echo -n rndis,adb >functions
~# echo -n 1 >enable

* También puede cambiar otros archivos como {iSerial,iProduct,iManufacturer} y f_rndis/{ethaddr,manufacturer,wceis,rndis_transports,max_pkt_per_xfer} en el directorio anterior si es necesario. * En los nuevos dispositivos puede ser necesario utilizar /config en lugar de /sys . Algunos consejos relevantes aquí .

Añade la dirección IP:

~# busybox ip rule add lookup main
~# busybox ip address add 192.168.1.1/30 dev rndis0
~# busybox ip link set rndis0 up

En el PC añadir la IP manualmente (no hay servidor DHCP):

~$ sudo ip address add 192.168.1.2/30 dev usb0
~$ nc -v -l -p 1024 </dev/null | pv -ab >data.img

Por teléfono:

~# busybox nc 192.168.1.2 1024 </dev/block/bootdevice/by-name/userdata

Del mismo modo, también es posible utilizar rclone rcat para transferir el volcado a través de WebDAV o FTP o SFTP. Ver ¿Cómo transmitir una copia de seguridad encriptada de todo el dispositivo al host remoto?

ALMACENAMIENTO MASIVO USB (UMS)
Este método es útil si no quieres crear un volcado de la partición, sino acceder a la partición directamente en el PC. Ver mi respuesta a ¿Por qué no puedo ver el almacenamiento de Android como una partición en el PC? para conocer los métodos para habilitar el UMS a fondo /sys o /config interfaces.

Una vez hecho esto, userdata aparecerá como una partición en el PC Linux al igual que conectamos una unidad USB. Si /dev/sda es la unidad de disco duro, normalmente /dev/sdb será el userdata partición. Puede encontrarlo utilizando blkid comando:

~# blkid | grep userdata
/dev/sdb: PARTLABEL="userdata" PARTUUID="..."

Puede ejecutar programas de recuperación directamente en el dispositivo de bloque o montar el sistema de archivos (si es necesario) o también puede crear un volcado.

¿CÓMO RECUPERAR LOS DATOS?

Existen básicamente dos formas de recuperar los datos borrados como se menciona en esta respuesta : método de tallado y a través del sistema de archivos.

Las herramientas de recuperación no necesitan montar sistemas de archivos, pero si se requiere, debe hacerse en un PC con Linux porque Windows no soporta ext4 o f2fs de forma nativa, por lo que las herramientas no están fácilmente disponibles AFAIK.

Si alguien ha podido realizar con éxito el acceso a nivel de bloque/periódico al sistema de archivos de Linux/Android para la recuperación de datos en Windows a través de Ext3Fsd o cualquier otro controlador, hágamelo saber para que pueda actualizar la respuesta.

En Linux puedes utilizar herramientas como extundelete para recuperar los datos utilizando el diario del sistema de archivos:

~# extundelete --restore-all data.img

O para recuperar datos directamente con UMS:

~# extundelete --restore-all /dev/sdb

Ya que has hecho un restablecimiento de fábrica que borra el sistema de archivos, considera el método de tallado utilizando herramientas como TestDisk o scalpel :

~# testdisk data.img

De la misma manera se puede utilizar cualquier otra herramienta de recuperación de datos. Consulte la ArchWiki sobre Recuperación de archivos para más detalles.


RELACIONADO:

1 votos

Simplemente te olvidaste de decirle a mount el tipo de fst. usa mount con -t ext4 -o loop,ro,noexec,noload y en lugar de adb exec-out podría usar simplemente adb pull /dev/block/bootdevice/by-name/userdata o adb pull /dev/block/dm-0 digital-forensics.sans.org/blog/2011/06/14/

0 votos

@alecxs mencionar fstype no es necesario; el binario de montaje puede adivinar un número de sistemas de archivos de uso común. No -t es en realidad -t auto . adb pull es digno de mención. Gracias por señalarlo.

0 votos

Mount no puede detectar fstype para montajes en bucle, especialmente para montajes sucios (ver enlace)

0voto

martinszy Puntos 9

Basándome en esta pregunta, utilicé el método descrito anteriormente:

~$ adb exec-out dd if=/dev/block/bootdevice/by-name/userdata > data.img

Pero hay un problema, la imagen se cifrará si no se descifran antes los datos. Los nombres de archivos y carpetas serán un galimatías.

La única manera de conseguir los datos descifrados fue a través de TWRP, ya que pide la contraseña de descifrado en el inicio.

Y luego pude copiar los datos vía mtp.

Sé que esto puede no parecer sobre el tema de cómo recuperar archivos, pero esta pregunta está recibiendo mucho tráfico y la solución propuesta tiene un inconveniente y no se me permite comentar en este momento.

Edito: La respuesta original sí explica una forma de acceder a la información descifrada que yo no había visto.

-2voto

user157947 Puntos 51

¿En qué lugar exacto de DATA? ¿Está en la tarjeta SD emulada?
Si está en la tarjeta SD emulada, podrías quitar tu tarjeta SD externa y montar el dispositivo bajo el modo de almacenamiento masivo USB... Puedes utilizar un software de recuperación gratuito como Recuva ccleaner.com/recuva

Sin embargo, si tu archivo no está en la tarjeta SD emulada, tendrías que hacer una copia de seguridad de la partición de datos como has mencionado.

Para ello, puede utilizar el propio dispositivo para ejecutar un comando DD o CAT para escribir los datos en un archivo .img en su tarjeta SD..

En el dispositivo
Uso del emulador de terminal

  • localice el directorio de su partición -por nombre

    getprop ro.frp.pst

( Esto obtendrá el directorio /dev/block/platform/DEVICE/by-name para frp - cambie el nombre a data )
De lo contrario, puede utilizar /data.

dd if=/data of=/sdcard/data.img   

If = Archivo de entrada - Of = Archivo de salida

También puedes usar ADB

A través del ordenador

  • Instalar ADB ( no todo el SDK sino sólo ADB )

Utilización de los comandos o del Power Shell

adb shell dd if=/data of=/sdcard/data.img

Es posible que tenga que localizar su directorio correcto.

Entonces puedes montar el .img en un PC y hacer la recuperación.. No estoy seguro de cómo montar el archivo .img si la partición es ext4 así que hasta ahí llega esta respuesta.

Alternativamente, puede utilizar una aplicación llamada Disk Digger .. Tiene la capacidad de escanear la partición de datos en vivo, .. Se necesita acceso a root

0 votos

if=/data no funcionará, es sólo un punto de montaje, no el dispositivo de bloque. dd vuelca los archivos, no los directorios. En segundo lugar, el almacenamiento masivo USB también puede utilizarse para montar o volcar archivos completos data partición desde el custom recovery directamente al PC.

0 votos

Lo siento, no me di cuenta de que estás usando un Custom Recovery... ¡Eso es extremadamente simple, sólo una copia de seguridad ! .... Lo sé. if=/data no funcionará, por eso he dicho que hay que encontrar el by-name directorio.

0 votos

Tengo la percepción de que las copias de seguridad de nandroid (normalmente creadas por tar ring) sólo contienen archivos/directorios, no los detalles a nivel de inodo de los dispositivos de bloque que se requieren para deshacer algo.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X