T
tag
Dauer-User
- 375
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 !?.
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: