Synchronisieren Sie ext SD to USB OTG **ohne** einen PC zu verwenden

Gerätedetails

  • Moto X Play - Android 6.0.1, gerootet (systemloses Root)

  • Samsung 64 GB externe SD-Karte

  • San Disk 128 GB USB - wurde mit FAT 32 geliefert, das auf exFAT umformatiert wurde, da ich Ordner > 4 GB auf externer SD habe

Anwendungsfall

Synchronisieren Sie den gesamten Inhalt von ext SD auf USB (Synchronisation in eine Richtung ohne Löschen des Inhalts der SD-Karte) nach wöchentlichem Zeitplan / bei Bedarf als inkrementelles Backup ohne Verwendung eines PCs (ich habe einen, aber Gründe, ihn nicht zu verwenden, sind nicht relevant)

Andere Details

  • USB-Laufwerk vom Gerät erkannt, korrekt verbunden mit Standard-OTG ( Einstellungen → Speicher & USB )

  • Busbox installiert. Es wurde mit ROM Toolbox Pro gebündelt. Ich habe es nicht direkt verwendet. Wenn eine andere Busy-Box installiert werden soll, ist das in Ordnung, solange es nicht zu Konflikten kommt

  • Befestigungspunkte wie unten

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Dinge ausprobiert

  • Erfolglose App-Suche – Ich konnte keine App finden, die dies kann ( Folder Sync behauptet, aber es kann USB nicht sehen)

  • Nach Alternativen googeln

  • Die MacroDroid-Automatisierung schlägt fehl, da die App USB nicht sehen kann (im App-Forum angesprochen)

Frage: Wie kann ich das tun? Ich bin offen für alle Mittel

Bitte beachten Sie, dass ich beabsichtige, ein Kopfgeld von 100 zu platzieren . Jede Antwort, die die Anforderungen erfüllt, bevor ich ein Kopfgeld poste, wird auf ähnliche Weise vergeben (ich kann das Posten des Kopfgelds verzögern, um sicherzustellen, dass ich eine Lösung bekomme).

Bitte vermeiden Sie Lösungen, die

  • nicht getestet - es sollte auf Ihrem Gerät und Ihrer USB-Konfiguration getestet worden sein, um es glaubwürdig zu machen

  • Beteiligen Sie den PC, laden Sie ihn in die Cloud hoch, übertragen Sie ihn auf einen Remote-Server usw

  • Verweise auf Behauptungen aus zweifelhaften Quellen, die nicht verifiziert werden können

  • Einbeziehung der Verwendung von Dateimanagern (ich hatte gemischte Ergebnisse mit diesen, aber das ist eine andere Frage)

Das Ziel des Obigen ist nicht, von Lösungen abzuhalten, sondern von frivolen Versuchen abzuhalten. Wenn Klarheit benötigt wird, fragen Sie bitte

Ich habe diesen Bedarf im Chat besprochen, und einige potenzielle Lösungskandidaten waren BusyBox rsyncund Tasker . Ich weiß nichts über diese Mittel, also geben Sie bitte vollständige Details an . Da es sich (fast) um eine Prämienfrage handelt, erwarte ich, dass ich sie sofort erfolgreich implementieren kann, ohne nach Klärungen zu suchen.

(Da es sich um ein gerootetes Gerät mit systemlosem Root handelt, sind Lösungen mit Root in Ordnung. Wenn das Betriebssystem jedoch auf irgendeine Weise geändert werden soll, markieren Sie dies bitte, da systemless dies nicht zulässt, obwohl es eine Problemumgehung gibt.)

Ich bin zeitlich knapp bemessen und muss das so schnell wie möglich zum Laufen bringen

Ich werde sehen, ob ich an etwas arbeiten kann, wenn ich kann :)
Ah, fair genug :) Hatte den Chat nicht überprüft.

Antworten (2)

Da wir die Lösung, die Sie jetzt im Chat verwenden, herausgefunden haben, sollte diese Antwort "wird getestet", "ohne PC oder Dateimanager" und "auf verifizierte Quellen angewiesen" entsprechen. Obwohl in der Zwischenzeit eine andere rsyncAntwort gepostet wurde, haben Sie mich gebeten, auch unsere Lösung vorzustellen – also los geht’s:

Dazu rsynckann der Befehl verwendet werden. Unter Berücksichtigung aller Ihrer Anforderungen (einschließlich der später im Chat erwähnten) würde die Befehlszeile wie folgt aussehen:

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

Erläuterungen zum Befehl:

  • rsyncoffensichtlich ist die ausführbare Datei/der Befehl
  • -asteht für "archivieren", dh alle Attribute behalten. Dies umfasst das rekursive Kopieren von Inhalten (Verzeichnisse, Unterverzeichnisse, Dateien), das Beibehalten von Dateistempeln und Eigentumsrechten (letzteres erfordert normalerweise root), das Beibehalten von Berechtigungen usw. Weitere Informationen finden Sie unter Was ist der Archivmodus in rsync? auf unserer Schwesterseite.
  • --deletesorgt dafür, Dateien auf dem Ziel (hier: ) zu entfernen, die auf der Quelle (hier: ) /mnt/usbnicht/mehr vorhanden sind/mnt/sdcard
  • Die restlichen Parameter geben die Quelle an, von der kopiert werden soll ( /mnt/sdcard) und das Ziel, in das kopiert werden soll ( /mnt/usb). Beachten Sie, dass wir beide als Verzeichnisse angegeben haben, sodass alle Inhalte, auch versteckte Dateien, ebenfalls enthalten sein sollten (letzteres wäre nicht, wenn wir eine Maske wie verwendet hätten /mnt/sdcard/*).
    Hinweis: Stellen Sie sicher, dass Sie hier die echten Einhängepunkte oder zumindest echte Verzeichnisse angeben (z. B. nicht den /mnt/sdcardSymlink wie im Beispiel), oder es könnte einfach den Symlink kopieren und denken, das ist alles, was Sie wollten :)

Vielleicht möchten Sie das Obige zuerst an einer kleinen Quelle ausprobieren, um zu sehen, wie es funktioniert.


Nun, da das „Wie“ abgedeckt ist, bleibt die Frage: Wo ist rsync? Es ist normalerweise nicht auf dem Gerät vorinstalliert, und die meisten Busyboxes scheinen es auch nicht zu enthalten. Es gab einmal eine App im Playstore namens rsync backup for Android , aber sie ist nicht mehr da. Wie dieses Wikirsync zeigt, können Sie die Binärdatei direkt von hier herunterladen ¹, dann auf Ihr Android-Gerät übertragen und installieren. Angenommen, Sie haben die Binärdatei nach geschoben /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

Das obige sollte entweder in einer Terminal-App oder über erfolgen adb shell.

Das erledigt und erfolgreich von einem Shell-Prompt aus getestet, bleibt die Frage der . Ich weiß, dass der Shell-Befehle als root ausführen kann (früher ging das einfach, indem man ihnen einfach ein Ausrufezeichen voranstellte, heute gibt es vielleicht sogar eine Checkbox dafür – ich habe das eine Weile nicht überprüft), aber Ihr Macrodroid könnte das auch liefern. Alternativ können Sie es auf Unix/Linux-Weise tun und Cron verwenden, das von Busybox bereitgestellt wird; Einzelheiten finden Sie unter: Wie verwende ich crontab in Android?


Siehe auch:


¹ Natürlich können Sie auch versuchen, die Original-App auf Seiten wie APKMirror oder ApkPure zu finden, oder die App von hier herunterladen – aber dann mussten Sie diese App zuerst installieren und anschließend die Binärdatei aus ihrem Datenverzeichnis holen /data/data/eu.kowalczuk.rsync4android/files/rsync– was ich finde a etwas unpraktisch ;)

Danke, die Lösung hat bei mir gut funktioniert. Ein paar Punkte, die den Lesern helfen könnten: 1. Ich habe es mit allen Busybox-Versionen versucht, die gut bewertet sind, und keine davon hat rsyncdie Pro-Version davon (ich habe dem Entwickler eine E-Mail geschickt und ihn gebeten, sie hinzuzufügen), also bleibt kein Wahl, aber andere Mittel (übrigens konnte die App auf den genannten Websites nicht finden) 2. Automatisierung der Ausführung von Befehlen bei Bedarf / Zeitplan erfolgreich. Anleitung hier
3. TWRP könnte das Backup auf USB sehen, also sollte es vermutlich gut funktionieren. 4. Dasselbe gilt für TiBu, obwohl dies eine kleine Problemumgehung erfordert ( Speicherort des Sicherungsordners > Speicheranbieter , klicken Sie darauf und wählen Sie Optionen für Ihre Betriebssystemversion) 5. Obwohl Sie kein Windows-Benutzer sind, können Sie der Vollständigkeit halber erwägen, die Erweiterung von rsyncauch unter Windows hinzuzufügen, wie Sie es für Linux getan haben - ich habe Referenzen gesehen. Wird später mehr hinzufügen, wenn es den Lesern helfen kann
@beeshyams ptspts.blogspot.com/2015/03/… enthält Anweisungen dazu, wo Sie rsync für Android finden und manuell installieren können. Sie müssen ein wenig kreativ sein, da Sie keinen PC verwenden möchten. Ich würde empfehlen, zu versuchen, webget und Root Explorer zu verwenden, um die Binärdatei herunterzuladen, umzubenennen, +x zu setzen und zu verschieben.
@ChrisOlin: Danke und ich hatte das früher gesehen, aber da ich mit Linux nicht vertraut war, war es die umständliche Art, die App herunterzuladen und zu extrahieren rsyncund mit Izzy zu teilen, und er nahm das in seine Antwort auf. In Fußnoten. Es kann gelernt werden, aber zu einem späteren Zeitpunkt, wenn es die Zeit erlaubt.
Update: Verifiziertes TWRP und es wird gut von OTG wiederhergestellt. TiBu hat Probleme. Es sieht den kopierten Ordner auf USB, kann es aber nicht zur Wiederherstellung auswählen. Wenn ich jedoch einen neuen Sicherungsordner auf USB erstelle, wird er wiederhergestellt. Falls extSD ersetzt wird, sollte das Kopieren des gesicherten Ordners funktionieren, da alle Attribute und Berechtigungen intakt sind
@beeshyams Verwenden Sie den DocumentProvider-Speicher? Wenn dies der Fall ist und es immer noch nicht funktioniert, verhindert SELinux möglicherweise, dass Titanium Backup Medien vom Flash-Laufwerk liest.
@ChrisOlin: Das ist leider nicht der Fall. Gerade noch einmal überprüft, es ist Permissive . Gemischte Berichte im Netz zu sehen, funktioniert bei manchen, bei anderen nicht. Nicht sicher warum
@ChrisOlin: Außerdem kann ich, wie bereits erwähnt, einen neuen Sicherungsordner erstellen und sichern, sodass der Lese-/Schreibzugriff nicht das Problem ist
SELinux-Kontexte werden etwas anders konfiguriert als herkömmliche Unix-Dateiberechtigungen. Ich bin auf genau dieses Problem mit SELinux gestoßen, das Titanium Backup daran hindert, auf Sicherungsdaten zuzugreifen, und genau das gleiche Problem verursacht, das Sie beschreiben.

Seien Sie vorgewarnt. Ich werde Ihnen keine vollständigen Details liefern, vor allem, weil das, wonach Sie fragen, so unspezifisch und widerlich ist, dass die Prämie für diese Frage es nicht wert ist, die Zeit zu verbringen, um eine Lösung für Sie zu testen, zu der ich keine Möglichkeit habe Garantie funktioniert auf Ihrem Gerät. Sie können meinen Rat entweder ignorieren und leiden oder Schwierigkeiten durch kritisches Denken und Google erklären. Wenn Ihnen diese Optionen nicht gefallen, können Sie jederzeit ein iPhone kaufen. Sie sind für Leute gedacht, die etwas wollen, das "einfach funktioniert". Wenn Sie keine Zeit haben, eine Lösung zu recherchieren oder zu optimieren, die für Sie funktioniert, ist Android möglicherweise nicht das Richtige für Sie.

Es gibt eine Vielzahl von Möglichkeiten, das zu erreichen, was Sie zu tun versuchen. Die einfachste und zuverlässigste Methode ist wohl die Verwendung von Software, die standardmäßig auf den meisten Android-Geräten zu finden ist, worauf ich mich konzentrieren werde. Da Sie versuchen, etwas regelmäßig auszuführen, würde ich sagen, dass die beste Lösung darin besteht, cron. In diesem Sinne werfen Sie einen Blick auf diesen StackOverflow -Thread, da er spezifisch für die Ausführung auf Android ist. Damit wir alle auf derselben Seite sind, ist cron ein Job-Scheduler, der auf den meisten (allen?) Unix-ähnlichen Betriebssystemen verfügbar ist, einschließlich Android. Da Sie nicht im Detail darauf eingegangen sind, wann genau dieser Job wöchentlich gestartet werden soll, überlasse ich es Ihnen, die crontab zu konfigurieren (die im Internet gut dokumentiert ist undist nicht schwer ).

Dies kümmert sich um die Planung von allem, aber der nächste Schritt besteht darin, herauszufinden, wie Sie alles sichern möchten, was eine sehr wichtige Frage ist, bei der Sie sich schmerzlich unklar waren. Möchten Sie einfach neue/geänderte Daten von der externen SD-Karte auf das Flash-Laufwerk kopieren oder möchten Sie vollständige Backups der SD-Karte, die nach Datum auf dem Flash-Laufwerk gespeichert sind? Dies sind Fragen, die Sie selbst klären müssen, bevor Sie das Internet um Rat fragen.

Ohne zu wissen, was genau Sie hier erreichen wollen, gehe ich davon aus, dass das erste Szenario am besten funktioniert. Da Sie Daten auf Dateiebene (im Gegensatz zu Blockebene) kopieren, rsyncist dies hier wahrscheinlich die beste Wahl. Es ist sehr vielseitig und sollte sofort einsatzbereit sein, ohne konfiguriert werden zu müssen. Sie sollten es bereits verfügbar haben, und wenn Sie es nicht haben, können Sie es einfach über Busybox erhalten.

Unter der Annahme, dass die Einhängepunkte gleich bleiben, wäre der Befehl, den ich verwenden würde, um dies zu erreichen: rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290. Der Einfachheit halber habe ich eine Einführung in die von mir verwendeten Flaggen unten eingefügt:

-r, --rekursive Rekursion in Verzeichnisse

-l, --links kopiert Symlinks als Symlinks

-p, --perms behält Berechtigungen bei

-t, --times behält Änderungszeiten bei

Es gibt auch das -aFlag (kurz für archive mode ), aber es macht in dieser Situation eine Menge anderen unnötigen Mist, wie das Synchronisieren von uid/gid. In den meisten Backup-Szenarien wäre die Verwendung -asinnvoll, da Sie den Besitz behalten möchten, wenn Sie aus Ihren Backups wiederherstellen müssen. Externer SD-Speicher verwendet jedoch FAT für sein Dateisystem, das keine Unix-Dateiberechtigungen unterstützt. Dateien auf Ihrer externen SD-Karte haben zwar einen Eigentümer-/Gruppensatz, sie werden jedoch statisch vom Betriebssystem festgelegt. Wenn Sie versuchen, sie zu ändern, bin ich mir ziemlich sicher, dass Sie einen Fehler erhalten oder es stillschweigend im Hintergrund fehlschlägt. Die von mir verwendeten Flags machen diesen Prozess viel effizienter, aber wenn Sie aus irgendeinem Grund möchten, dass rsync all diese zusätzlichen Dinge synchronisiert, verwenden Sie stattdessen das Archivmodus-Flag.

Jetzt, wo wir den Befehl haben, den Sie ausführen müssen, müssen Sie nur noch crontab konfigurieren und diesen rsyncBefehl ausführen lassen. Dies ist keine sehr elegante Lösung, aber es wird funktionieren. Wenn Sie eine Art Protokollierung einrichten möchten ( Mike Rubel hat viel Arbeit geleistet, von der Sie sich inspirieren lassen könnten ), könnten Sie ein Shell-Skript schreiben, es in den internen Speicher Ihres Telefons legen und stattdessen das Shell-Skript von cron ausführen lassen der rsyncBefehl.

Um alles außerhalb von Cron manuell zu sichern, können Sie diesen rsync-Befehl mit ConnectBot oder einer anderen App ausführen, die Ihnen Shell-Zugriff gewährt. Wenn Sie dies häufig tun möchten, ist es möglicherweise schneller, den Befehl in eine Datei (z. B. backupsd) zu chmod +xschreiben und ihn in einen Ordner zu stecken, der sich auch im Systempfad befindet (z. B. /system/bin). Auf diese Weise können Sie backupsdanstelle von eingeben rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290.

Das war im Grunde die Lösung, die ich mit dem OP im Chat ausgearbeitet habe :) Nur eine Randnotiz: -rlptVerwenden Sie anstelle von einfach -a(Archivmodus), das impliziert alle anderen Schalter :)
Ich habe angesprochen, warum ich es nicht -asofort nach der Zusammenfassung der von mir verwendeten Flags verwendet habe, und es dem OP überlassen, zu entscheiden. Offensichtlich denken große Geister gleich.
Ah, sorry Chris, diesen Teil habe ich verpasst. Aber für mich ist die Synchronisierung von UID/GID ein wesentlicher Bestandteil, da das Eigentum relevant ist, damit die Eigentümer richtig damit umgehen können. Ich schätze, Sie spielen mit der Tatsache, dass dies zwar wahr ist, die SD-Karte jedoch aufgrund von FAT nicht beeinträchtigt, dem ich zustimme :) Vielleicht wollten Sie Ihre Gründe jedoch in Ihrem Beitrag angeben :)
Sie machen einen guten Punkt. Ich habe nicht ausdrücklich erklärt, warum es sinnlos ist. Ich werde bearbeiten und klären.
wtf mit dem Absatz rant am Anfang?