Zeitstempel ändert sich nicht

Status
Nicht offen für weitere Antworten.

Jenny_L1

Neuer Benutzer
#1
Systembeschreibung:

Modell: ReadyNAS NV+ [X-RAID]
Firmware: RAIDiator 4.1.6 [1.00a043] (-> debian kernel 2.6)
Speicher: 256 MB [2.5-3-3-7]

Samba-Version: 3.0.34

Problembeschreibung:

Kann mit einem XP-Client auf einer NAS (über SAMBA) per Programm in eine Datei schreiben,
den Inhalt verändern und trotzdem bleibt der Zeitstempel unverändert.
Weder das Änderungsdatum noch der letzte Zugriff werden aktualisiert.
Wie gibt es das?
 

Jenny_L1

Neuer Benutzer
#2
timestamp problem with specific file size

Systembeschreibung:

Modell: ReadyNAS NV+ [X-RAID]
Firmware: RAIDiator 4.1.6 [1.00a043] (-> debian kernel 2.6)
Speicher: 256 MB [2.5-3-3-7]

Samba-Version: 3.0.34

Problembeschreibung:

Kann mit einem XP-Client auf einer NAS (über SAMBA) per Programm in eine Datei schreiben,
den Inhalt verändern und trotzdem bleibt der Zeitstempel unverändert.
Weder das Änderungsdatum noch der letzte Zugriff werden aktualisiert.
Wie gibt es das?
*****************
Konnte den timestamp-Fehler jetzt endlich eingrenzen:

Egal mit welchem User ich eine Datei anlege, der timestamp wird auf meiner NAS bei einer kleinen Textdatei nur richtig aktualisiert,
wenn sie maximal 236 Byte hat.

Ist mir völlig unverständlich wie es so was geben kann...

Muss eine neuere Samba-Version auf die ReadyNAS NV+???:confused:
 

Jenny_L1

Neuer Benutzer
#3
magische 236 byte

die Sache wird immer verrückter.

Nun bin ich wieder ein Stück weitergekommen.
Ich kann nun auch den Inhalt von Dateien die größer sind als 236 Bytes so ändern,
dass der Timestamp "geändert am" - last modified date/time - sofort aktuell zurückgeschrieben wird, und zwar indem ich die Variablen, die ich verändere nicht in einer Field-Anweisung puffere,
sondern als String zurückschreibe.
Merkwürdigerweise stoße ich aber auch hier auf die Grenze von 236 Bytes bei der Variablenlänge.
Sobald ich meine Stringvariable länger als 236 Zeichen definiere findet trotz Dateiänderung wieder keine Änderung des Timestamp statt.

Es ist wirklich zum verrückt werden!
 

Xiaolong

Erfahrener Benutzer
#5
Ich kenn jetzt selber keine Linuxforen, da ich damit (noch) nichts am Hut hab, aber Herr Dr. Google hilft dir sicher gerne weiter...
 

Jenny_L1

Neuer Benutzer
#6
timestamp fehlerhaft mit oplocks?

verwende cifs, Zugriff von einer XP Workstation im DOS-Fenster per Samba auf die ReadyNAS NV+, oplocks = 1 (od. fake oplocks = 1)
Die Datei wird lesend und schreibend geöffnet.

alte qb4.5 Programme, die so bezüglich der Aktualisierung des Zeitstempels nicht mehr funktionieren:
Variante A funktioniert nur, wenn die Datei max. 236 Byte groß ist, ab 237 Byte bleibt der Zeitstempel unverändert, obwohl sich der Dateiinhalt ändert!
D. h. mit oplocks wird nicht richtig synchronisiert bzw. die Synchronisation ist irgendwie von der Größe der Datei bzw. der Variablenpuffer abhängig.

prinzipieller Ablauf:
Variante A)
OPEN "nummer1" FOR RANDOM AS 1 LEN = 118 ' Datei read write für Direktzugriff öffnen
FIELD 1, 6 AS nummer$ 'Platz für string-Variable in Direktzugriffs-Dateipuffer zuweisen
LOCK 1, 1 ' Satz sperren
GET 1, 1 'Satz holen - field-Variable erhält Dateiinhalt des 1. Satzes, Stelle 1-6
LSET nummer$ = "123456" 'Variable neu belegen
PUT 1, 1 'Variable in Datei zurückschreiben
UNLOCK 1, 1 'Satz entsperren
CLOSE 1 'Datei schließen
end

Variante B)
Zeitstempel wird weder mit noch ohne oplocks aktualisiert!!!

so wird der Zeitstempel auch nicht geändert
DIM x AS STRING * 944 'variable als string-Variable vordefinieren
OPEN "p:\programm\nummer1.tst" FOR RANDOM AS 1 LEN = 944 '' Datei read write für Direktzugriff öffnen
LOCK 1 'sperren Datei
GET 1, 1, x 'Variable mit Dateiinhalt füllen
x = "123456" + MID$(x, 7) 'oder nur x="123456"
PUT 1, 1, x 'Variable in Datei zurückschreiben
UNLOCK 1 ' Datei entsperren
CLOSE 1 'Datei schließen
END

Variante C)
so wird der Zeitstempel auch mit oplocks aktualisiert:

DIM x AS STRING * 236 '** (oder kleiner) **
OPEN "p:\programm\nummer1.tst" FOR RANDOM AS 1 LEN = 236
LOCK 1
GET 1, 1, x
x = "999999" + MID$(x, 7) 'oder nur x="999999"
PUT 1, 1, x
UNLOCK 1
CLOSE 1
END

FAZIT:
Nur wenn die Datei maximal 236 byte groß ist bzw. die Variablenlänge maximal 236 Byte groß ist wird der Zeitstempel aktualisiert, wird richtig synchronisiert, wenn (fake) oplock = 1 gesetzt ist.

Ist das nicht sehr merkwürdig und kann das jemand nachprüfen?
Hat noch jemand Qbasic(oder QB4.5) zur Verfügung und kann meinen Code auf der ReadyNAS testen?

Muss nämlich noch alte Programme betreuen und da stecken fast 1 MIO Zeilen Code dahinter, die will ich nicht alle durchforsten und umschreiben müssen.
 
Status
Nicht offen für weitere Antworten.
Oben