FAQ Zeitstempel bei interner SD-Karte

T

tag

Dauergast
370
Wo ist das Problem?
Die Implementierung von FUSE seitens Google läuft unter Root-Account. Das hat den Nachteil, dass alle Dateien Root gehören. Somit kann (neben anderen Attributen) der Zeitstempel von Dateien nicht von einem normalen User geändert werden. Dies ist besonders bei Synchronisierung von Dateien oder bei Aktualitätsprüfung von Backups, aber auch beim einfachen Sortieren von Verzeichnisinhalten nachteilhaft.

Wer ist betroffen?
Alle Dateisysteme, die unter Android mittels FUSE emuliert werden, haben das Problem. Android 8 und neuer benutzt SDCardFS, hier gibt es das Problem nicht mehr.

Betroffen ab Android 4.0: ext4, exFAT, f2fs
Nicht betroffen bei 4.0: FAT32
Achtung: Voraussichtlich ist FAT32 bei neueren Version 4.x auch betroffen. Es scheinen spätestens mit Android 4.4, vermutlich bereits ab Android 4.1/4.2, alle Dateisysteme mit FUSE verwaltet zu werden (bis inklusive Android 7).

Die meisten Android-Geräte ab Android 4.0 benutzen für das Dateisystem der internen Speicherkarte ext4 und damit FUSE. Die Verwendung eines Dateisystems wie FAT32, das keine Dateien > 4 GiB speichern kann, ist auch nicht mehr ganz zeitgemäß. Bei Speicherkarten kleiner als 64 GiB ist FAT32 dennoch üblich, ab 64 GiB wird meist exFAT verwendet.

Wenn man Netzwerk-Dateisysteme benutzt, beispielsweise SAMBA oder FTP, wird der Zeitstempel normalerweise korrekt gesetzt, da diese nicht per FUSE emuliert werden. Meines Wissens versuchen alle Dateimanager trotz der Situation unter Android üblicherweise, die Attribute zu kopieren, und ignorieren den Fehler, den sie beim Setzen erhalten. Deshalb sollte Kopieren und Verschieben auf diese Dateisysteme funktionieren. Zumindest im Total Commander wird der Zeitstempel richtig gesetzt, wenn man mit dem SAMBA-Plugin eine Datei dorthin schreibt.

Wie kann man das Problem sehen/testen?
Wenn man eine Datei kopiert oder verschiebt, bleibt üblicherweise das Datum erhalten. Nur wenn das Ziel unter Android FUSE verwendet, wird statt der korrekten ursprünglichen Zeit der Zeitstempel auf den aktuellen Wert gesetzt. Auch weitere Attribute (Rechte, Owner, Gruppen etc) sind üblicherweise betroffen, soweit bei dem Dateisystem vorhanden.

Anzeigen lassen kann man sich die Formatierung des internen Speichers und der externen Karte beispielsweise mittels der App DiskInfo
Wenn vfat angezeigt wird, ist FAT32 gemeint.

Welche Möglichkeiten zur Behebung gibt es?
Google musste den Fehler fixen, der ihnen seit langem (Anfang 2009) bekannt ist.
Issue 34691 - android - Last modified date is set to copy date when file is copied to phone on USB connection - Android Open Source Project - Issue Tracker - Google Project Hosting
Es wurde tatsächlich mit Android 8 endlich FUSE abgeschafft und in diesem Rahmen dieser Mangel behoben:
Issue 18624 - android - setLastModified() always fails on Xoom unless running as root - Android Open Source Project - Issue Tracker - Google Project Hosting

Welche Möglichkeiten zur Umgehung des Fehlers gibt es?

Zunächst einmal gehören die Dateien Root. Das bedeutet, dass man den Fehler nur auf einem gerooteten Gerät umgehen kann! Alle Lösungen, die ich hier aufzähle, benötigen also ein gerootetes Gerät.

1. Nachträglich per Korrektur (ungetestet) Im App Store gibt es mindestens eine App File Timestamp, die nachträglich den Zeitstempel setzen kann.

2. Samba Filesharing läuft unter Root. Wird über den Samba-Server zugegriffen, so wird der Zeitstempel korrekt gesetzt.

3. Ein passender Dateimanager (nur auf einem gerooteten Gerät kann es gehen!):
X-Plore unterstützt das Setzen des Zeitstempels, wenn root-mode eingeschaltet ist.
Ghost Commander unterstützt es angeblich, erfordert aber auf jeden Fall BusyBox.
Total Commander ab Version 2.04 unterstützt das Setzen des Zeitstempels. Vorsicht bei der externen SD ab Android 5: Nicht bei allen Zugriffsarten klappt es. Der Link auf die SD darf nicht über den Namen gehen, sondern muss /storage/xxxx-xxxx lauten.
SManager by devwom setzt den Zeitstempel mittels root ebenso
MiXplorer benutzt touch. Die Standardimplementierung von touch unter Android (toybox) is defekt, MiXplorer kann das Datum nur setzen, wenn ein anderes touch aktiv ist, z. B. BusyBox (integrierter Download in MiX). Bitte ggf. ausprobieren, ob MiXplorer mit dem jeweiligen Setup des Gerätes erfolgreich das Datum in der richtigen Zeitzone setzt.

4. Manueller Aufruf von Kommandozeilen. Wer ein Terminal (beispielsweise Open Android Terminal) auf einem gerooteten Gerät installiert hat und idealerweise noch Busybox, kann Kommandos als Root ausführen.

Beispiel für 4.:

Einpacken (auch unter Unix/Windows/etc möglich, ggf. Binary nötig)

cd <Quelle>
tar -cf <Pfad_zu_Archiv>/Archiv.tar *


Auspacken

cd <Ziel>
su
tar -xf <Pfad_zu_Archiv>/Archiv.tar


Kopieren

su
cp -a <Quelle> <Ziel>


Das Kommando su wechselt den User zu root, so dass das Schreiben von Timestamps möglich ist. Lesen kann man sie auch als anderer User, so dass beim Einpacken das Kommando su nicht notwendig ist.

Vorsicht bei der Benutzung von touch: Die Standardimplementation unter Android (toybox) scheint fehlerhaft zu sein, weder mit -d noch mit -t wird die angegebene Zeit gesetzt.

Persönliche Anmerkung:
Ich verstehe nicht, wie Google ab 4.3 das Rooten von Geräten erschweren kann, ohne so einen grundlegenden Fehler im Dateisystem zu beheben.

Siehe hierzu bitte auch den bereits existierenden Thread zum Thema Datumsänderung beim kopieren unter Android unterbinden !?.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Nick Knight, Starshoot97, Kyle Katarn und 4 andere
Nachdem ich die FAQ nicht mehr bearbeiten kann, habe ich sie übersetzt und bei xda als Guide how to keep timestamp correct eingestellt. Die Reaktion war recht prompt: Google hat issue 34691 als "obsolete" gekennzeichnet. Es ist nicht geplant, an der Situation etwas zu ändern.

Das Schreibrecht für meine FAQ benötige ich wohl nicht mehr, weil sich an der Situation nichts mehr ändert. Neue Erkenntnis ist nur, dass alle internen Dateisysteme betroffen sind, auch f2fs. Und wenn das Android neuer als 4.0 ist, ist auch FAT32 wohl betroffen ... (edit: Danke mrrbr für das erweiterte Schreibrecht)

Einzige Empfehlung meinerseits: Richtet einen Samba-Server in eurem Netzwerk ein und arbeitet in eurer "Personal Cloud". Wenn man da mit TC zugreift, klappt es auch ohne root. Für alles was auf dem Handy gespeichert ist, hat man ohne root keine Chance mehr, korrekte Werte zu setzen. Wer das braucht, sollte sich nun außerhalb von Android umsehen.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: PieDieÄj
Das ist und bleibt ein Trauerspiel mit der Unfähigkeit Googles. Hier ist die Fähigkeit nicht mit dem schnellen Erfolg mitgewachsen. Windows, Unix und Apple haben das seit Jahren korrekt implementiert, aber Google scheint da zu blöd zu sein. :(

Trotzdem vielen Dank für deine Mühe.
 
Eine Anmerkung noch: Diskussion kann nun gerne hier stattfinden. Da meine FAQ sicher nie länger als ein Beitrag wird, sehe ich keinen Sinn (mehr) darin, um Ausweichen in einen anderen Thread zu bitten.
 
Bisher hat es unter Lollipop nicht funktioniert, den Zeitstempel zu erhalten, wenn man mit Total Commander auf ein Dateisystem geschrieben hat, das von Android verwaltet wird. Der Autor hat nun den Grund gefunden und in der nächsten Version wird es sicher bereits behoben sein.

Für interessierte hier der Link.
 
  • Danke
Reaktionen: GSMzippy und PieDieÄj
Ich hatte auch das Problem mit den Zeiten...

Wollte WhatsApp neu aufsetzen und beim normalen kopieren wurde auf dem S3 Mini immer das aktuelle Datum gesetzt.

Habe es dann über einen Terminal Emulator gezippt und dann auf dem neuen Gerät ganz normal mit dem Total Commander entpackt...

Und siehe da, Datum ist gleich geblieben...!

Grüsse
 
  • Danke
Reaktionen: GSMzippy
tag schrieb:
Nachdem ich die FAQ nicht mehr bearbeiten kann, habe ich sie übersetzt und bei xda als Guide how to keep timestamp correct eingestellt. Die Reaktion war recht prompt: Google hat issue 34691 als "obsolete" gekennzeichnet. Es ist nicht geplant, an der Situation etwas zu ändern.
....


34691 ist obsolete, 18624 nicht, dort gehts um das gleiche (k.a. warum 34691 obsolet markiert wurde, evtl. weil er doppelt ist und neuer? ), als weiterer workaround, sofern busybox und root vorhanden könnte das sein Android Timestamp Keeper download | SourceForge.net (wurde glaub ich noch nicht genannt)
 
Ich beiße mir gerade an Kitkat (CM11 mit root) die Zähne aus, den Zeitstempel zu erhalten.
Der Total Commander setzt den Stemplel nur bei Ext SD -> Win, Win -> Win
aber bei Win -> int. SD geht auch hier der Zeit-Stempel verloren.
Die Samba App aus dem #1 Posting beendet sich, wenn ich sie enable
Das Total Commander Plugin 'TotalAnddroid' kann sich nicht mit dem Phone verbinden.
-> Invalid IP adress or port number oder Connect to IP:IP;Port failed

Hat jemand eine Idee (außer ~800 Fotos in einen tarball zu packen) ?
 
Zuletzt bearbeitet:
Wenn du im Terminal erst su, dann per cp -a testquelle testziel aufrufst, kommst du nicht auf Win ... aber dann bleibt der Zeitstempel?

Also ich vermute, dass dem TC der Manager für den Superuser fehlt und er daher den Root nicht akzeptiert. Versuch mal ob es geht, wenn SuperSU drauf ist. Oder hat du das schon? Klappen andere Root-Funktionen im TC?

Disclaimer: ich habe keine direkten Erfahrungen mit cm

Edit: man kann auch im Forum für Total Commander für Android bei Ghisler.ch nachfragen.
 
Weiß jemand wie es unter Marshmallow aussieht? Hat sich da was geändert an der Situation?
 
Nö. Natürlich nicht. Auch mit Android N wird das kaum besser werden fürchte ich.
 
  • Danke
Reaktionen: loopi
Schade schade. Aber Danke!
 
Ich habe gerade einen Test mit der ".tar" Methode gemacht, das sieht ganz gut aus.
Der Zeitstempel bleibt erhalten.
 
Klar. Jedes entpacken aus einem Archiv wird das wohl leisten, denke ich.
 
PieDieÄj schrieb:
Klar. Jedes entpacken aus einem Archiv wird das wohl leisten, denke ich.
Den verstehe ich nicht ganz. Warum soll das Setzen des Zeitstempel beim Auspacken klappen, wenn TC es beim Kopieren nicht schafft?

Meine Vermutung war: TC ruft su nicht auf, weil SuperSU sich nicht ansprechen lässt. Wenn das Aufrufen von tar (Tommes24 benutzt hierfür bestimmt eine Shell, nicht TC!) mit vorherigen su geschieht, funktioniert es. Sonst fehlen die Berechtigungen.

Die Lösung zum Kopieren mittels TC wird für den aktuellen Fall weiterhin gesucht. Ich weiß dass TC sich weigert, su zu benutzen, wenn kein Manager für Rootzugriff existiert. Aber das sollte unter cm eigentlich gegeben sein. Richtig soweit?
 
Ich habe zugegebenermaßen tar noch nicht genutzt, habe aber eine Erinnerung, dass Konsolen-orientierte Packer ohnehin in einer Konsole laufen, die Root-Zugriff hat.
 
OK, nochmal mehr Details.

Ich habe vom alten Phone die Dateien (Fotos & Videos) per Total Commander (TC) auf einen (Windows-) PC kopiert,
in den Optionen im TC aktiviert, daß der Zeitstempel mit kopiert werden soll.

Dann die Dateien mit tar gepackt (Windows Version (binary) für die Konsole erforderlich).

Die gepackten .tar Dateien auf's neue Phone, auf die interne SD Karte (Interner Phone-Speicher -- KEINE echte SD Karte), kopiert.

Android Terminal App öffnen, per 'su' root Zugriff erlangen, .tar Dateien entpacken, fertig.

Wie der tar Befehl ausgeführt wird zum Packen bzw. Entpacken steht im 1. Posting.
Wer noch unsicher mit dem tar Befehl ist, sollte die gepackten tar Dateien gleich an die Stelle im Phone kopieren, wo sie auch entpackt werden sollen.
Aufpassen solltet Ihr bei der Größe der gepackten tar Archive, mein erstes tar war ~3,6 GB groß, was beim Entpacken mit einem Error endete.
Tar Archive unter 2 GB Größe dagegen ließen sich hier problemlos entpacken.
Da das Splitten des Archivs beim Entpacken im gleichen Error endete, habe ich mehrere Archive erstellt, nach dem Muster vid*.*, IMG2015*.*, IMG2016*.* ... ...

2 Entpacker Apps habe ich auch versucht, sie haben den Zeitstempel komplett ignoriert, da sie wie auch TC, nicht nach root Zugriff verlangen und ohne root kein Zeitstempel aus der Vergangenheit.
 
Ich benutze Samba Filsharing auf meinem gerooteten S4 mit 4.4.2 und komme darüber an alle drei Speicherbereiche (RAM, interne SD, externe SD) mit korrektem Zeitstempel schreibend ran. Nachteil: GrottenGrottenLangsam! :(
 
Habe den Link für Samba Filesharing im OP mal korrigiert - im Play Store ist das ja nun schon lange nicht mehr.
 
  • Danke
Reaktionen: PieDieÄj
tag schrieb:
Den verstehe ich nicht ganz. Warum soll das Setzen des Zeitstempel beim Auspacken klappen, wenn TC es beim Kopieren nicht schafft?

Meine Vermutung war: TC ruft su nicht auf, weil SuperSU sich nicht ansprechen lässt. Wenn das Aufrufen von tar (Tommes24 benutzt hierfür bestimmt eine Shell, nicht TC!) mit vorherigen su geschieht, funktioniert es. Sonst fehlen die Berechtigungen.

Die Lösung zum Kopieren mittels TC wird für den aktuellen Fall weiterhin gesucht. Ich weiß dass TC sich weigert, su zu benutzen, wenn kein Manager für Rootzugriff existiert. Aber das sollte unter cm eigentlich gegeben sein. Richtig soweit?

mit dem Total Commander kann man ja auch Shell Befehle ausführen, dort bei Befehl statt sh su und bei Parameter %N für die Datei verwenden, dann wird dir gewählte datei im befehl übernommen

(? am anfang öffnet einen dialog wo man den befehl ändern/anzeigen kann; ?* bzw * für ausgabe in einer Dialogbox sonst als "toast" )
 
  • Danke
Reaktionen: tag

Ähnliche Themen

Yusublue
Antworten
3
Aufrufe
9.773
TheDoctorMoDz
T
Zurück
Oben Unten