4 votes

Synchronisation d'une carte SD ext. avec USB OTG **sans** utiliser un PC

Détails du dispositif

  • Moto X Play - Android 6.0.1, Root (Systemless Root)

  • Samsung 64 GB ext SD

  • San Disk 128 GB USB - livré avec FAT 32 reformaté en exFAT depuis que j'ai des dossiers > 4 Go sur la carte SD externe.

Cas d'utilisation

Sync tout le contenu de la carte SD externe vers USB (synchronisation unique sans suppression du contenu de la carte SD) sur horaire hebdomadaire / sur demande, comme sauvegarde incrémentielle sans utiliser un PC (j'en ai un, mais les raisons pour lesquelles je ne veux pas l'utiliser ne sont pas pertinentes)

Autres détails

  • Lecteur USB reconnu par le dispositif correctement connecté par OTG standard ( Paramètres → Stockage et USB )

  • Busybox installé . Il était fourni avec ROM Toolbox Pro. Je ne l'ai pas utilisé directement. Si une autre boîte occupée doit être installée, c'est parfait tant qu'il n'y a pas de conflit.

  • Points de montage comme ci-dessous

enter image description here enter image description here

Choses essayées

  • Recherche d'application infructueuse - Je n'ai pas réussi à trouver une application qui puisse faire cela ( Synchronisation des dossiers prétend le faire mais il ne voit pas l'USB)

  • Recherche d'alternatives sur Google

  • L'automatisation de MacroDroid échoue, car l'application ne peut pas voir l'USB (soulevé dans le forum des applications)

Question : Comment puis-je faire cela ? Je suis ouvert à tout moyen

Veuillez noter que j'ai l'intention de placer un prime de 100 toute réponse répondant aux besoins avant que je ne poste la prime sera attribuée de la même manière (je peux retarder la mise en place de la prime pour m'assurer d'obtenir une solution).

S'il vous plaît éviter des solutions qui

  • ne sont pas testés - ils devraient avoir été testés sur votre appareil et votre configuration USB pour leur donner de la crédibilité.

  • Il s'agit d'un PC, d'un téléchargement vers un nuage, d'un transfert vers un serveur distant, etc.

  • Références à des affirmations provenant de sources douteuses qui ne peuvent être vérifiées

  • L'utilisation de gestionnaires de fichiers (j'ai eu des résultats mitigés avec ceux-ci, mais c'est une autre question).

Le but de ce qui précède n'est pas de dissuader les solutions mais de décourager les tentatives frivoles. Si des précisions sont nécessaires, veuillez demander

J'ai discuté de ce besoin sur le chat et certains candidats potentiels pour la solution incluaient BusyBox, rsync et Tasker . Je sais rien de ces moyens afin Veuillez fournir des détails complets . Comme il s'agit d'une question de prime (ou presque), je m'attends à pouvoir la mettre en œuvre immédiatement et avec succès sans demander de précisions.

( S'agissant d'un appareil rooté avec un Root sans système, les solutions utilisant le Root sont bonnes. Cependant, si le système d'exploitation doit être modifié d'une manière ou d'une autre, veuillez le signaler car le système sans racine ne le permet pas, bien qu'il existe une solution de contournement).

Je suis à court de temps et j'ai besoin de faire fonctionner ceci dès que possible.

3voto

Milner Points 533

Comme nous avons trouvé la solution que vous utilisez maintenant dans le chat, cette réponse devrait être conforme à "en cours de test", "n'impliquant pas un PC ou un gestionnaire de fichiers" et "reposant sur des sources vérifiées". Bien qu'entre-temps, il y ait eu un autre rsync Vous m'avez également demandé de vous présenter notre solution, alors c'est parti :

En rsync peut être utilisée à cette fin. En tenant compte de toutes vos exigences (y compris celles mentionnées plus tard dans le chat), la ligne de commande ressemblerait à ceci :

rsync -a --delete /mnt/sdcard /mnt/usb

Explications sur la commande :

  • rsync est évidemment l'exécutable/la commande
  • -a signifie "archiver", c'est-à-dire conserver tous les attributs. Cela inclut la copie récursive du contenu (répertoires, sous-répertoires, fichiers), la conservation de l'horodatage et de la propriété (cette dernière nécessite généralement Root), la préservation des permissions, etc. Pour plus de détails, veuillez vous référer à Qu'est-ce que le mode archive dans rsync ? sur notre site partenaire.
  • --delete prend soin de supprimer les fichiers sur la cible (ici : /mnt/usb ) qui ne sont pas/plus disponibles à la source (ici : /mnt/sdcard )
  • Les autres paramètres spécifient la source à copier ( /mnt/sdcard ) et la cible à copier ( /mnt/usb ). Notez que nous avons spécifié les deux comme des répertoires, donc tout le contenu, y compris les fichiers cachés, devrait être inclus également (ce dernier ne le serait pas si nous avions utilisé un masque comme /mnt/sdcard/* ).
    Note : assurez-vous de spécifier les points de montage réels ou au moins les répertoires réels ici (par exemple, pas les points de montage de type /mnt/sdcard comme dans l'exemple), ou il pourrait simplement copier le lien symbolique et penser que c'est tout ce que vous vouliez :)

Vous pouvez essayer ce qui précède sur une petite source pour voir comment cela fonctionne.


Maintenant que le "comment" est couvert, la question demeure : Où se trouve rsync ? Il n'est généralement pas préinstallé sur l'appareil, et la plupart des Busybox ne semblent pas l'inclure non plus. Il y avait autrefois une application sur Playstore appelée Sauvegarde rsync pour Android mais il n'est plus là. Comme ce wiki souligne que vous pouvez télécharger directement le rsync binaire de aquí ¹, puis le pousser sur votre appareil Android, et l'installer. En supposant que vous avez poussé le binaire vers /mnt/sdcard :

su
mount -o remount,rw /system
cd /system/xbin
cp /mnt/sdcard/rsync .
chmod 755 /system/xbin/rsync
chown root.shell /system/xbin/rsync
mount -o remount,ro /system

Ce qui précède doit être fait soit dans une application terminale soit via adb shell .

Ceci fait, et testé avec succès à partir d'une invite du shell, reste la question du automatisation . Je sais que tasker peut exécuter des commandes shell en tant que Root (dans le passé, cela se faisait simplement en les faisant précéder d'un point d'exclamation, aujourd'hui il pourrait même y avoir une case à cocher pour cela - je ne l'ai pas vérifié pendant un certain temps), mais votre Macrodroid pourrait aussi le faire. Alternativement, vous pouvez le faire à la manière d'Unix/Linux et utiliser Cron, qui est fourni par Busybox ; pour plus de détails, voir : Comment utiliser crontab dans Android ?


Voir aussi :


¹ Bien sûr, vous pouvez aussi essayer de trouver l'application originale sur des sites comme APKMirror ou ApkPure, ou télécharger l'application. <a href="http://download.dlapk.org/?apkid=eu.kowalczuk.rsync4android&amp;ver=2.0.2&amp;server=seigio" rel="nofollow noreferrer">d'ici </a>- mais alors vous deviez d'abord installer cette application, et ensuite récupérer le binaire dans son répertoire de données. <code>/data/data/eu.kowalczuk.rsync4android/files/rsync</code> - ce que je trouve un peu gênant ;)

0voto

Chris Olin Points 153

Soyez prévenus. Je ne vais pas vous fournir tous les détails, principalement parce que ce que vous demandez est tellement peu spécifique et odieux que la prime sur cette question ne vaut pas la peine de passer le temps de tester une solution pour vous que je n'ai aucun moyen de garantir qu'elle fonctionnera sur votre appareil. Vous pouvez soit ignorer mes conseils et souffrir, soit résoudre les difficultés par le raisonnement critique et Google. Si vous n'aimez pas ces options, vous pouvez toujours acheter un iPhone. Ils sont conçus pour les personnes qui veulent quelque chose qui "fonctionne tout simplement". Si vous ne pouvez pas consacrer le temps nécessaire à la recherche ou à la mise au point d'une solution qui vous convienne, Android n'est peut-être pas fait pour vous.

Il y a plusieurs façons d'accomplir ce que vous essayez de faire. La méthode la plus simple et la plus fiable consiste à utiliser le logiciel présent par défaut sur la plupart des appareils Android, et c'est ce sur quoi je vais me concentrer. Puisque vous essayez d'exécuter quelque chose à intervalles réguliers, je dirais que la meilleure solution est d'utiliser le logiciel suivant cron . Sur cette note, jetez un coup d'œil à ce fil de discussion StackOverflow puisque c'est spécifique à l'exécution sur Android. Aussi, pour que nous soyons tous sur la même longueur d'onde, cron est un planificateur de tâches disponible sur la plupart (tous ?) des systèmes d'exploitation de type Unix, ce qui inclut Android. Puisque vous n'avez pas donné de détails sur le moment exact où vous souhaitez que ce travail soit lancé chaque semaine, je vous laisse le soin de configurer les paramètres de la fonction crontab (qui est bien documenté sur Internet et sur le site de la Commission européenne). n'est pas difficile ).

Cela permettra de tout programmer, mais l'étape suivante consiste à déterminer comment vous souhaitez sauvegarder le tout, ce qui est une question très importante pour laquelle vous n'étiez pas très clair. Voulez-vous simplement copier les données nouvelles/modifiées de la carte SD externe sur le lecteur flash ou voulez-vous des sauvegardes complètes de la carte SD stockées par date sur le lecteur flash ? Ce sont des questions que vous devez résoudre par vous-même avant de demander conseil à Internet.

Sans savoir ce que vous essayez exactement d'accomplir ici, je vais supposer que le premier scénario est le meilleur. Puisque vous copiez des données au niveau du fichier (par opposition au niveau du bloc), rsync est probablement votre meilleur choix ici. Il est très polyvalent et devrait fonctionner dès sa sortie de la boîte sans avoir besoin d'être configuré. Vous devriez déjà l'avoir à disposition et si ce n'est pas le cas, vous pouvez l'obtenir facilement via Busybox.

En supposant que les points de montage restent les mêmes, la commande que j'utiliserais pour y parvenir serait la suivante : rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290 . Pour vous faciliter la tâche, j'ai inclus ci-dessous une présentation des drapeaux que j'ai utilisés :

-r, --recursif recurse dans les répertoires

-l, --links copier les liens symboliques en tant que liens symboliques

-p, --perms préserver les permissions

-t, --times préserver les temps de modification

Il y a aussi le -a (abréviation de mode archive ), mais il fait un tas d'autres conneries inutiles dans cette situation comme la synchronisation uid/gid. Dans la plupart des scénarios de sauvegarde, l'utilisation de -a serait logique puisque vous voudriez préserver la propriété si vous devez restaurer à partir de vos sauvegardes. Cependant, le stockage SD externe utilise le système de fichiers FAT, qui ne prend pas en charge les permissions de fichiers Unix. Bien que les fichiers sur votre carte SD externe aient un propriétaire/groupe défini, ils sont définis de manière statique par le système d'exploitation. Si vous essayez de les changer, je suis presque sûr que vous obtiendrez une erreur ou que cela échouera silencieusement en arrière-plan. Les drapeaux que j'ai utilisés rendent ce processus beaucoup plus efficace, mais si pour une raison quelconque vous voulez que rsync synchronise tous ces éléments supplémentaires, utilisez le drapeau mode archive à la place.

Donc, maintenant que nous avons la commande que vous devez exécuter, il suffit de configurer la crontab et de la faire exécuter. rsync commandement. Ce n'est pas une solution très élégante, mais elle fonctionnera. Si vous voulez mettre en place une sorte de journalisation ( Mike Rubel a réalisé de nombreux travaux dont vous pourriez vous inspirer. ), vous pouvez écrire un script shell, le placer sur le stockage interne de votre téléphone et faire en sorte que cron exécute le script shell à la place de l'application rsync commandement.

Pour sauvegarder tout manuellement en dehors de cron, vous pouvez exécuter cette commande rsync en utilisant ConnectBot ou toute autre application qui vous donne accès au shell. Si vous prévoyez de le faire souvent, il peut être plus rapide de placer la commande dans un fichier (par ex. backupsd ), chmod +x et le placer dans un dossier qui se trouve également dans le chemin du système (comme /system/bin). De cette façon, vous pouvez taper backupsd au lieu de rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290 .

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X