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
Duplicado: Android.stackexchange.com/q/15869/218526
0 votos
Duplicado: Android.stackexchange.com/q/25948/218526