ubuntuusers.de

timestamp-Fehler mit smb / Fritzbox; cp -u arbeitet hierdurch nicht korrekt

Status: Ungelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

sebastian257

Anmeldungsdatum:
19. Dezember 2020

Beiträge: 31

Hallo allerseits,

ich habe seit Umzug zentralisierter Daten zuhause von einem dauernd laufenden Windows-Rechner auf eine externe Festplatte an einer Fritzbox (7590 AX; FritzOS 07.31) nun inkonsistente timestamps, die die Verwendung von der -u Option bei cp verhindern.

Ich sorge beim Einloggen in verschiedenen peripheren Rechnern durch das bash- .profile für ein update meiner Skripte, die ich gelegentlich modfiziere, durch:

1
2
    cp -urp ~/bin ~/ubuntu
    cp -urp ~/ubuntu/bin ~

wobei ~/ubuntu über einen Link auf einen samba-mount der Fritzbox verweist.

Nun braucht die Ausführung der beiden cp-Anweisungen fast eine Minute für nur 320 kB in 79 Dateien, selbst wenn keine Änderungen vorgenommen worden sind. Nachdem ich festgestellt habe, dass er jedesmal praktisch alle Dateien trotz fehlender Änderungen auf die Festplatte kopiert, habe ich mir die Timestamps genauer angeschaut (mtime):

Exemplarisch zeigt sich z.B.:

~/bin$ stat shrink
  Datei: shrink
 Größe: 84        	Blöcke: 8          EA Block: 4096   Normale Datei
Gerät: 811h/2065d	Inode: 60687851    Verknüpfungen: 1
Zugriff: (0755/-rwxr-xr-x)  Uid: ( 1000/sebastian)   Gid: ( 1000/sebastian)
Zugriff: 2022-11-04 19:56:11.219178630 +0100
Modifiziert: 2021-05-01 12:23:53.322172505 +0200
Geändert: 2022-09-15 18:07:24.037994454 +0200
Geburt: 2021-05-01 12:23:53.314173207 +0200

~/ubuntu/bin$
  Datei: shrink
 Größe: 84        	Blöcke: 8          EA Block: 1048576 Normale Datei
Gerät: 31h/49d	Inode: 244446      Verknüpfungen: 1
Zugriff: (0755/-rwxr-xr-x)  Uid: ( 1000/sebastian)   Gid: ( 1000/sebastian)
Zugriff: 2022-11-04 19:56:11.055600000 +0100
Modifiziert: 2021-05-01 12:23:53.055600000 +0200
Geändert: 2021-05-01 12:23:53.055600000 +0200
Geburt: 2021-05-01 12:23:53.055600000 +0200

Daraus folgt, dass cp -urp die Datei von bin nach ubuntu/bin (dem verlinkten Verzeichnis auf der Fritzbox) "aktualisiert". Das Timestamp bleibt dort aber bei xxx.0556, so dass die Datei immer kopiert wird.

Auf der Festplatte selbst (ext4-formatiert) findet sich 12:23:53.000000000 als Timestamp, wenn man sie direkt an einen Computer anschließt.

Von 79 Dateien haben im Mountverzeichnis 73 Dateien die Nachkommastellen 0.0556, nur 6 weichen ab, diese Dateien haben auch auf der externen Festplatte von .000000000 abweichende Nachkommastellen im Timestamp (initial beschrieben worden ist die Festplatte direkt, nicht über die Fritzbox). Es tauchen die Nachkommastellen 0.8356, 0.9916, 0.6426, 0.9776 und 0.8336 im smb-mount auf (in meinem Verzeichnis ein Wert, der 0,054873-0,055600) ms später als der korrekte Wert auf der Festplatte liegt).

Offensichtlich wird beim Schreiben auf die Fritzbox die Nachkommastelle der Timestamps auf 0 gesetzt, und in die Gegenrichtung systematisch erhöht (die hier beobachteten Werte würden z.B. der Regel folgen: Runde zum nächsten vollen 2 ms-Abschnitt auf und addiere 53,6 ms; in hexadezimalen Nanosekunden, wie es dann in ext4 ankommt: 0x331DF00 - keine der Zahlen macht für mich irgend einen Sinn, aus dem ich auf den Fehler schließen könnte, mal abgesehen davon, dass es hochverdächtig ist, dass die Zahl durch 0x100 teilbar ist).

Fragen:

  1. Hat jemand eine Idee, wie es überhaupt zu diesen Veränderungen kommt? Wie hoch ist die mögliche zeitliche Auflösung der Timestamps im smb-Protokoll überhaupt? Ich habe trotz viel gesurfe nichts gefunden - und nachdem ich begonnen habe, im Quellcode auf samba.org herumzuschauen, mich dann doch entschieden, hier zu posten... Liegt es an der Fritzbox oder am SMB-Client?

  2. Gibt es Abhilfe? (Sind irgendwelche der unten genannten Optionen falsch?)

  3. Und wenn nicht: Hat jemand eine Idee für eine einfache Lösung, die paar Dateien in nur Sekunden zu aktualisieren, insbesondere, wenn gar nichts geändert worden ist?

Zu 3. habe ich ja auch schon den Gedanken, dass das Skript die Timestamps auf volle Sekunden runden kann, wenn nun einmal die Auflösung auf der Fritzbox beim Schreiben nur sekundengenau ist. Aber ich muß dann immer noch die Timestamps um 0,0556 s. erhöhen. Das geht mit touch nicht. Wie kann man es sonst machen?

Weitere evtl. relevante Informationen:

Ausgabe von mount:

//192.168.0.1/fritz/MEDIENSERVER/sebastian on /media/seb type cifs (rw,nosuid,nodev,relatime,vers=3.1.1,cache=strict,username=familie,uid=1000,noforceuid,gid=1000,noforcegid,addr=192.168.0.1,file_mode=0755,dir_mode=0755,soft,nounix,mapposix,rsize=65536,wsize=65536,bsize=1048576,echo_interval=60,actimeo=1)

fstab-Eintrag (es kann sein, dass noserverino nicht mehr nötig ist - das Chaos, das ich allerdings vormals hatte, möchte ich nicht wieder haben):

//192.168.0.1/fritz/MEDIENSERVER/sebastian /media/seb cifs noauto,users,credentials=xyz,noserverino 0 0

Bin gespannt auf Antworten, (oder weitere Fragen)

Grüße, Sebastian

Antworten |