RSS Libre@vous

Dernière mise à jour
le 14/01/2016 à 15h43
Les contenus de ce site sont publiés sous la licence CC by-sa, sauf mention contraire.
licence_CC-by-sa
Copyright © 2018 Libre @ vous. Tous droits réservés.
Joomla! est un logiciel libre sous licence GNU/GPL.
27
Juil
2012
Tutoriel Android : déplacer des données d'applications sur la carte mémoire externe Imprimer
Depuis peu, je suis l'heureux propriétaire d'un téléphone / ordinateur de poche : le fameux Samsung Galaxy Note et son écran géant ! Et comme je suis (un peu ?) un bidouilleur, je n'ai pas pu m'empêcher de rentrer directement dans le coeur de la bête. Il est proposé par défaut avec le système Android Gingerbread 2.3.6, basé sur un noyau GNU/Linux.

Le problème avec ces appareils, c'est qu'on n'a pas par défaut la main sur tout le système : il n'est pas possible d'obtenir les droits super-utilisateur comme sous un vrai système GNU/Linux. Mais il y a plein d'astuces en ligne qui permettent de d'y remédier et d'ajouter cette possibilité. Ce n'est pas le but de cet article, il y a déjà ce tout qu'il faut en ligne. Par exemple ce tutoriel qui a très bien marché dans mon cas.

Une autre chose énervante, c'est que la plupart des applications installées stockent leurs données sur la mémoire interne de l'appareil et pas sur la carte mémoire externe que j'ai ajouté. Comme il y a 12Go en interne et que j'ai mis une carte externe de 32Go, c'est quand même un peu bête ! Ce que je vous propose dans cet article, c'est une astuce qui permet de tromper les applications en délocalisant leurs données dans la carte externe sans qu'elles n'y trouvent rien à redire ! Sourire


Pour commencer, il faut impérativement que votre Android soit rooté pour que tout ce qui suit puisse marcher. Vous pouvez utiliser le tutoriel que j'ai indiqué ci-dessus ou chercher sur internet, les docs à ce sujet ne manque pas ! Si vous ne souhaitez pas rooter votre appareil, il faudra malheureusement passer votre chemin, cet article n'est pas pour vous ! Ensuite, il vous faudra installer 2 applications gratuites disponibles sur le Google Play (la boutique officielle des applications Android) :
Autostart (Root)
Android Terminal Emulator
Ce n'est pas indispensable, mais pour plus de confort avec la frappe au clavier dans le terminal, je vous conseille également le Hacker's Keyboard.

Le principe est de permettre à des applications hébergeant leurs données sur la mémoire interne du téléphone (partition système ou carte interne) de continuer à fonctionner tout en stockant leurs données sur une carte mémoire externe. Par exemple, pour l'application de navigation routière NavFree, les données OpenStreetMap de la France entière pèsent 1.2Go et elles sont forcément stockées par l'application dans un répertoire en interne. J'aimerai vraiment stocker ça sur ma carte externe de 32Go, surtout si je souhaite un jour rajouter d'autres pays ! Le répertoire interne qui contient les données d'applications se trouve ici : /mnt/sdcard/Android/data. Je souhaite les transférer dans /mnt/sdcard/external_sd/data.

Première solution : utiliser un lien symbolique


Une première solution à laquelle j'ai pensé serait de faire un lien symbolique de /mnt/sdcard/Android/data vers /mnt/sdcard/external_sd/data. Mais malheureusement ce n'est pas possible car la partition de la carte externe est en FAT32 et que ce système de fichiers ne gère pas les liens symboliques. Et il n'est pas possible de mettre un autre système de fichier pour la carte externe sous Android.

Deuxième solution : créer un point de montage


Il s'agit de lier le répertoire interne à celui de la carte externe en utilisant un point de montage avec la commande mount. C'est l'idée qui est proposée sur cette page.


1) Transférer le répertoire des données d'applications sur la carte externe


Sur votre Android, ouvrez la console Terminal Emulator.
Passez en super-utilisateur avec la commande su puis créer le répertoire data dans la carte externe :
su
mkdir /mnt/sdcard/external_sd/data

Il se peut que ce répertoire existe déjà (oui il y des applications intelligentes qui installent leur données dans la carte externe !). Dans ce cas, ne pas tenir compte du message d'erreur et continuer avec ce qui suit.
Copiez les données sur la carte externe :
cp -R /mnt/sdcard/Android/data/* /mnt/sdcard/external_sd/data

Cela peut prendre du temps si il y a beaucoup de données, soyez patient !
Renommer temporairement l'ancien répertoire des données (tout à l'heure on supprimera ce répertoire si tout se passe bien) :
mv /mnt/sdcard/Android/data /mnt/sdcard/Android/data-OLD


2) Créer le point de montage vers le nouveau répertoire de la carte externe


Toujours en super-utilisateur sous la console, tapez :
mkdir /mnt/sdcard/Android/data
mount -o bind /mnt/sdcard/external_sd/data /mnt/sdcard/Android/data

Naviguez dans le répertoire monté pour vérifier que tout s'est bien passé :
cd /mnt/sdcard/Android/data
ls

Vous devriez voir toutes les données qui pourtant se trouvent bien dans external_sd. Si c'est bien le cas, vous pouvez supprimer le répertoire de sauvegarde qu'on avait laissé sur la mémoire interne (attention de ne pas vous tromper de répertoire !) :
rm -rf /mnt/sdcard/Android/data-OLD

Si vous vérifier l'espace occupé dans la mémoire interne, vous verrez que vous avez gagné tout ce qui était dans le répertoire data. Espace qui a bien entendu été perdu dans la carte externe !
Vous pensez que tout est bon maintenant. Hé bien non... Essayez de redémarrer complètement votre téléphone (pas simplement une mise en veille mais un redémarrage complet), et vous verrez que le montage a disparu ! Ce qui est normal car les points de montage créé à la main par la commande mount ne sont valables que pour la session en cours.
Mais il y a une astuce qui permet de lancer la commande de montage au démarrage du système.


3) Recréer le point de montage à chaque démarrage du système


Pour pouvoir recréer le point de montage à chaque redémarrage, il faut utiliser une application qui permet de lancer l'exécution de commandes. C'est justement ce que fait l'application Autostart. Au démarrage, cette application lance les commandes qui sont écrites dans le fichier /data/opt/autostart.sh. Il faut créer le répertoire opt dans /data soit avec votre explorateur de fichiers, soit en ligne de commande :
cd /data
mkdir opt

Reste ensuite à remplir le fichier autostart.sh avec la commande de montage. Pour cela, vous pouvez créer un nouveau fichier autostart.sh dans le répertoire /data/opt, puis y saisir la commande de montage comme ceci :
su
mount -o bind /mnt/sdcard/external_sd/data /mnt/sdcard/Android/data

Ou si vous préférez tout faire en ligne de commande :

cd /data/opt
echo "su" > autostart.sh

echo "mount -o bind /mnt/sdcard/external_sd/data /mnt/sdcard/Android/data" >> autostart.sh

Puis il faut donner tous les droits sur le fichier et le répertoire créé :
cd /data
chmod -R 777 opt

Et c'est gagné ! Vous pouvez essayer de redémarrer complètement le téléphone et vous verrez dans /mnt/sdcard/Android/data que le répertoire est bien remonté vers celui qui se trouve dans la carte externe. Testez quelques applications pour vérifier que tout va bien. En tout cas avec NavFree et les autres applications que j'ai installé pas de problème ! Sourire

Si vous avez des remarques ou des suggestions, je suis preneur. Je me suis peut-être compliqué la vie sur certains points, mais pour le moment je ne connais pas encore bien toutes les astuces Android.
 

Commentaires  

 
#1 Patrick 30-09-2012 10:06
Bonjour,

Je m'excuse d'être complètement hors sujet mais est-il possible de réagir concernant le tuto sur Android du 27 juillet et notamment avoir un peu d'aide sur autostart?
D'avance Merci
Patrick
Citer
 
 
#2 Nicolas Moyroud 01-10-2012 10:11
Bonjour,

J'ai déplacé votre commentaire sur le bon sujet. J'avais créé une nouvelle rubrique pour cet article, mais oublié d'activer les commentaires dans cette nouvelle rubrique. Désolé... :oops:
Pour autostart sur Android, j'avais trouvé quelques explications ici :

http://fr.androidzoom.com/android_applications/tools/autostart-root_bacu.html

http://android.stackexchange.com/questions/6558/how-can-i-run-a-script-on-boot

J'espère que ça pourra vous être utile. Normalement pour que ça marche, il suffit de mettre les commandes qu'on veut lancer au démarrage du système dans le script /data/opt/autostart.sh
Citer
 
 
#3 Patrick 01-10-2012 12:09
Bonjour et merci,
J'ai tenté cette manip sur mon htc desire qui n'a que 256Mo de mémoire interne. En fait maintenant je ne suis pas certain que la manipulation a marché. En effet au redémarrage en regardant par l'intermédiaire de windows (téléphone branché en USB) le répertoire "/mnt/sdcard/Android/data" semble modifié (nouveau fichier). Mais le répertoire "/mnt/sdcard/external_sd/data" semble aussi modifié. Peut être que toutes les applications ne réagissent pas à ce montage.
Pouvez vous cependant me confirmer que dans le fichier .sh il faut copier intégralement les deux lignes y compris la partie près les symboles ">".
D'autre part j'ai été troublé de voir dans le chemin de la mémoire interne qu'il y a une répertoire sdcard.
Pour situer mon niveau je ne connais pas linux mais ai beaucoup pratiqué le DOS.
Citer
 
 
#4 Nicolas Moyroud 01-10-2012 13:30
C'est normal que les 2 répertoires soient modifiés. Le point de montage consiste simplement à faire pointer le répertoire "/mnt/sdcard/Android/data" vers "/mnt/sdcard/external_sd/data". Du coup c'est exactement comme si ces 2 répertoires n'en était en fait qu'un seul. Si vous modifiez dans external_sd, vous verrez instantanément la modification dans l'autre.
Les symboles ">" consiste simplement à envoyer le texte affichés par echo dans le fichier. Le premier > créé un fichier vide et le 2ème >> ajoute à la suite dans ce même fichier. Vous pouvez tout aussi bien créer un nouveau fichier et l'éditer avec un éditeur de texte Android pour y mettre ce qui suit :

su
mount -o bind /mnt/sdcard/external_sd/data /mnt/sdcard/Android/data

Le premier su sert à indiquer à Android de prendre les droits root avant d'exécuter la 2ème commande (sinon le mount ne marchera pas).
Citer
 
 
#5 Patrick 02-10-2012 11:44
Merci pour ces éclaircissements.
Dans mon cas ce n'était pas normal car je regardais avec windows téléphone branché en usb et les données n'étaient pas identiques.
Je n'avais pas compris que les deux lignes permettait de remplir directement le fichier autostart.sh. Comme elles n'étaient pas de la même couleur je pensais qu'il fallait créer le fichier chose que j'ai fait et copier les deux lignes intégralement.
Mais c'est corrigé.
Je vais regarder maintenant si cela fonctionne correctement.
Merci
Citer
 
 
#6 Nicolas Moyroud 02-10-2012 17:29
Oui en vous expliquant dans ma réponse ci-dessus, j'ai réalisé que j'avais un peu compliqué les choses en faisant faire cette manipulation en ligne de commande. Je pense que je vais changer l'explication dans l'article pour la simplifier. Comme quoi c'est toujours bien d'avoir un retour d'expérience comme le vôtre ! :-)
Citer
 
 
#7 moi 03-10-2012 22:52
bonne astuce mais pas clair du tout sur les droits des commandes.
tout doit se faire en su ou seulement une partie?
Citer
 
 
#8 Nicolas Moyroud 04-10-2012 08:35
La commande su au tout début de la manipulation fait passer en super-utilisateur pour tout le reste des commandes. Quand on exécute su, on reste en super-utilisateur jusqu'à ce qu'on lance une commande "exit".
Citer
 
 
#9 Patrick 05-10-2012 11:51
Bonjour,

Je suis troublé par le fait que les données d'applications sont à la base stockées sous /mnt/sdcard/Android/data. Pour moi à partir du moment ou il y avait sdcard dans le chemin c'est que les données étaient physiquement stockées sur la mémoire externe soit la SD
CARD.
Citer
 
 
#10 Nicolas Moyroud 08-10-2012 10:10
Bonjour Patrick,
Je te rassure, j'ai été troublé moi aussi quand j'ai regardé pour la première fois le système de fichiers du Galaxy Note. En fait il y a déjà une carte mémoire interne de 12Go dans l'appareil et c'est celle-là qui est accessible dans /mnt/sdcard. La carte externe que tu ajoutes toi-même se trouve bien dans /mnt/sdcard/external_sd.
Ça fait bizarre au début, mais après on s'habitue ;-)
Citer
 
 
#11 cyrille5007 15-10-2012 16:29
bonjour nicolas
pour un novice comme moi et bien d'autres je suppose, tous ça ressemble a du chinois et c'est vraiment dommage que tous le monde ne puisse pas en profiter, serait il possible d'avoir un tutos un peut plus compréhensible? parce qu'a ce jour c'est le seul tutos qui existe sur la toile.
merci pour ton travail
Citer
 
 
#12 Nicolas Moyroud 15-10-2012 17:06
Bonjour Cyrille,

Je veux bien essayer :-)
Pourrais-tu me dire précisément quels sont les points du tuto où tu as "coincé" ?
Citer
 
 
#13 cyrille5007 19-10-2012 06:31
faut il taper cp ensuite (enter) et ensuite la ligne de commande ou tous a la suite
Citer
 
 
#14 cyrille5007 19-10-2012 07:07
bonjour nicolas
après chaque invite de commande le résultat est no found je desespere
Citer
 
 
#15 Nicolas Moyroud 19-10-2012 07:52
Chacune des lignes de commande doit être tapée en entier avec [Enter] à la fin. Donc pour la ligne cp c'est :

cp -R /mnt/sdcard/Android/data/* /mnt/sdcard/external_sd/data [Enter]

Bizarre que tu obtiennes "no found" à chaque ligne de commande. Est-ce que la commande mkdir a marché ?
Ton appareil mobile est-il un Galaxy Note ? Il se peut que les chemins ne soient pas les même pour un autre appareil. Le répertoire de base n'est pas forcément /mnt/sdcard dans le cas de ton appareil. Il faudrait que tu cherches où se trouvent les répertoire "Android" et "external_data". N'hésites pas à me faire un retour si tu trouves pour que je complète l'article.
Dernière chose : est-ce que tu as bien activé les droits super-utilisateur sur ton appareil ? Le rootage est indispensable pour que les manips que j'ai indiqué puissent marcher.
Citer
 
 
#16 cyrille5007 20-10-2012 06:47
bonjour nicolas
j'ai fais comme expliquer:en su sa marche et après je tape la lignes de commande mkdir en oubliant pas les espaces et résultat: mkdir failed for (ligne de commande) file e xists.
mon mobile est un galaxy s i9000 rooter avec
Cyanogen Mod 9.
Citer
 
 
#17 zic04 25-10-2012 08:23
Bonjour,
Merci bien pour le tuto, j'ai modifier par contre un détail car il y a des applications qui reste a la racine de la carte. carte gps par exemple

su
mount -o bind /mnt/sdcard/external_sd//mnt/sdcard/

Telephone chinois parfais 32 go enfin ;)
Citer
 
 
#18 Tekken 05-02-2013 18:13
Bonjour, je bloque des le debut, le mkdir ne veut pas fonctionner, erreur message : "mkdir failed for mnt/sdcard/external_sd/data, No such file or directory

je suis sous samsung galaxy ace et je suis pourtant bien passer en super utilisateur

merci d'avance pour votre reponse, si vous avez une solution
Citer
 
 
#19 Nicolas Moyroud 06-02-2013 09:41
Bonjour,
Attention il manque un / avant mnt. Ça change tout et c'est peut-être de là que vient le problème. Sinon il faut vérifier dans quel répertoire est montée la mémoire externe dans la Galaxy Ace. Ce n'est peut-être pas "sdcard/external_sd" comme pour le Galaxy Note. Il faut adapter la commande avec le bon répertoire du Ace. Pour trouver quel est le répertoire il suffit d'aller sur la carte externe avec un explorateur de fichiers, le chemin est en général indiqué en haut.
Citer
 
 
#20 joel di bartolo 07-02-2013 03:48
Salut et merci pour ton tutoriel qui est super bien realise. J ai un galaxy s3 et je crois que les adressages sont les memes que le note et pourtant ma mod plante lamentablement. Je sais pas si je peux t envoyer des captures d ecran du terminal comme ca tu aurais pu analyser de visu les erreurs que je n ai surement pas manque de faire.
Citer
 

Ajouter un Commentaire

Tout les contenus de ce site sont publiés selon les termes de la licence Creative Commons by sa. En ajoutant votre commentaire, vous acceptez implicitement sa mise à disposition selon les termes de cette licence.


Code de sécurité
Rafraîchir