Vi è mai capitato di dover recuperare dei dati che avete cancellato per errore da uno smartphone Android, potreste aver fatto un ripristino del telefono ai dati di fabbrica o installato una custom Rom, senza rendervi conto che alcuni dei dati che volevate salvare non erano sulla microSD ma sulla memoria interna del telefono. Ok il danno ormai è fatto, nella maggior parte dei casi potreste semplicemente lasciar perdere dandoli per persi definitivamente.
Ma se invece come nel mio caso volete provare a recuperare quei dati, allora la cosa è complicata ma non impossibile, vediamo un po' come possiamo fare.
Nel mio caso lo smartphone è uno Xiaomi Redmi note 2 prime, con 32 Gb di memoria interna.
La prima cosa da fare e capire come si può andare in modalità recovery sul vostro smartphone, Google ci viene in aiuto basta fare una semplice ricerca di "modalità recovery" seguito da marca e modello del vostro smartphone 4
Ok ora che sappiamo che è possibile andare in modalità recovery sul nostro smartphone, vediamo cosa ci occorre per provare un recupero in extremis dei dati "persi".
Di cosa abbiamo bisogno:
MicroSD capiente quanto la memoria dello smartphone
Una chiavetta USB grande quanto la memoria interna dello smartphone formattata in NTFS (se lo smartphone è da 16Gb occorre una chiavetta da 16Gb, se è da 32Gb allora servirà una chiavetta da 32Gb) se avete un HDD esterno va benissimo l'importante è che abbia abbastanza spazio libero
ADB minimal installato sul computer
7zip installato installato sul computer
Driver Usb per utilizzare ADB
Distro Linux installata oppure virtualizzata (io ho utilizzato il secondo metodo, utilizzando come S.O. principale Windows 10) se non sapete come fare a breve faro un post a riguardo
Testdisk/Photorec installata sulla distro Linux (di norma non è preinstallato ma ci si mette un attimo)
Ora possiamo procedere.
Scarichiamo ed installiamo sul PC 7zip, lo trovate qui: http://www.7-zip.org/
Scarichiamo ed installiamo sul PC ADB Minimal, basta cercare su Google, io l'ho scaricato da qui: http://forum.xda-developers.com/showthread.php?t=2317790
Scarichiamo ed installiamo sul PC i driver USB per lo smartphone, anche in questo caso o lo cercate su internet facendo sempre riferimento alla marca ed al modello o scaricate quelli di Google da qui: https://developer.android.com/studio/run/win-usb.html , in questo caso però mi sento di consigliarvi una ricerca specifica per marca e modello.
Una volta installato ADB Minimal dovreste avere sul desktop un nuova icona "Minimal ADB and Fastboot" se lanciate l'applicazione dovreste trovarvi in una pagina della shell di DOS simile a questa.
Ora assicuriamoci che lo smartphone sia abbastanza carico, l'estrazione dei dati potrebbe metterci anche qualche ora. A smartphone spento accendiamolo seguendo le istruzioni per attivare la modalità recovery, nel mio caso si attiva tenendo premuto il tasto Volume+ insieme al tasto Power (di norma la combinazione è la stessa per quasi tutti i telefoni, in pratica se si accende il telefono con Volume+ e Power si entra in modalità recovery, con Volume- e Power si entra in Fastoboot).
Colleghiamo lo smartphone al pc tramite il suo cavo usb ed aspettiamo che Windows riconosca la periferica inserita
Andiamo sulla finestra di ADB ed entriamo nella shell dello smartphone con il comando:
..> adb shell
Se tutto è andato per il verso giusto dovreste trovarvi ora nella shell dello smartphone, simile a quella del DOS, am con comandi completamente diversi, nulla di cui preoccuparsi, i comandi da utilizzare sono pochi e non serve comprenderli a pieno.
Per prima cosa dobbiamo capire come sono montate le partizioni, a noi serve la partizione data, quindi digitiamo:
# cat /proc/mounts
Nel mio caso data risulta montata quindi posso vedere su quale delle partizioni è montata, /dev/block/mmcblk0p17 la external_SD (la microSD che abbiamo inserito nello smartphone) risulta invece montata su /dev/block/mmcblk1p1, quindi non ho avuto dubbi, in alcuni casi però la partizione data non è montata e quindi per proseguire bisogna cercare di capire qual'è la partizione che ci interessa, quindi:
# cat /proc/partitions
Quello che vedete è l'elenco completo delle partizioni dello smartphone, facciamo chiarezza, mmcblk0 è la memoria interna dello smartphone, dalla mmcblk0p1 a seguire sono le partizioni della memoria principale dello smartphone, mmcblk1 è la memoria microSD inserita nello smartphone.
In questo elenco a noi interessa capire qual'è la partizione che occupa il maggior quantitativo di blocchi (memoria), perché quasi sicuramente quella partizione conterrà i dati che ci interessano, se guardate l'elenco nel mio caso la mmcblk0p17 è quella che occupa più blocchi ed infatti nell'immagine precedente abbiamo vista che era montata su data.
Ora che abbiamo trovato quello che ci serve procediamo eseguendo una copia di tutta la partizione e non solo dei dati presenti, ma copiamo anche quello che viene visto come spazio libero della partizione, quindi eseguiamo quello che in gergo viene detto bitstream o copia bit a bit su file.
# dd if=/dev/block/mmcblk0p17 | gzip -c | split -b 2000m - /external_sd/dati.gz
Se tutto sta procedendo per il verso giusto, non dovreste avere errori e l'operazione dovrebbe metterci un ora se non di più...
Quando l'operazione è conclusa vi ritroverete con la shell dello smartphone nuovamente utilizzabile, digitate:
# exit
per uscire dalla shell dello smartphone e ritornare sulla shell di DOS, chiudete ADB minimal e riavviare lo smartphone tenendo premuto il tasto Power fino a quando sullo schermo non inizierà a comparire il logo di avvio dello stesso.
Nell'operazione precedente abbiamo estratto il contenuto della memoria interna dello smartphone, suddividendola in tanti file da 2Gb compressi, bisogna copiare tutti i file estratti su una cartella del desktop, ed una volta copiati i file, tramite 7zip bisogna estrarre il contenuto completo sulla chiavetta USB o sull'HDD esterno.
Ora passiamo a Linux.
Do per scontato che la vostra distro Linux sia già installata e funzionante (Anche in questo farò un articolo a breve), aprite una finestra di terminale e digitate:
# sudo apt-get update
# sudo apt-get install testdisk
Una volta installato testdisk passiamo al recupero dei dati vero e proprio, per prima cosa assicuratevi che la distro Linux abbia libero accesso al supporto USB che contiene i dati, per controllare andate in "Home" di Linux ed aprite la memoria USB in modo da vederne il contenuto (in questo modo viene fatto il mount in automatico del dispositivo senza doverlo fare a manina da linea di comando)
Tornate sulla finestra di terminale e digitate
# sudo photorec /media...... (qui va inserita il nome del file con la posizione completa, se non la sapete, da esplora risorse fate tasto destro sul file, selezionate proprietà e nel tag Posizione avete il percorso completo)
Quando si apre photorec
Nel primo menù vi chiederà di selezionare il disco, scelta obbligata ne avete solo uno, stessa cosa anche per il secondo menù, anche se avete scelto di fare il backup completo del telefono e non della sola partizione data come ho fatto io, photorec rileva che è un insieme di partizioni e le elabora ugualmente, quindi continuate con invio su "search".
Ora vi chiede di scegliere il tipo di filesystem, selezionate [Other] e premete invio, ultima scelta è la cartella di destinazione, ricordate che con le frecce su è giù evidenziate la cartella, con invio la selezionate e per confermare dovete premere il tasto C.
A questo punto il grosso del lavoro è finito, potrete controllare l'andamento del recupero dei file sullo schermo e Quando photorec ha finito nella cartella che avete scelto per il recupero troverete un infinità di sottocartelle "recup_dir.1...n" non vi disperate la funzione cerca di Linux funziona notevolmente meglio di quella Windows, quindi iniziate a fare una ricerca inserendo l'estensione del file da recuperare, ad esempio se erano foto nel campo di ricerca inserite .jpg e lui vi mostrerà tutti i file jpg recuperati, .mp3 tutti i file audio in formato .mp3 e così via.