Author Topic: Verzögerung beim XP File-Zugriff auf Samba-Freigaben  (Read 11280 times)

Offline tankwart

  • Sr. Member
  • ****
  • Posts: 165
  • Karma: 0
Verzögerung beim XP File-Zugriff auf Samba-Freigaben
« on: Wednesday, 01.08.2007 12:01 »
Wer kennt sie nicht, die nervenden, teilweise 20 Sekunden langen Pausen im Windows-Explorer beim Durchwandern von Samba-Verzeichnissen. Nach einer bestimmten Zeit geht es dann plötzlich weiter, und ist erst mal ein Verzeichnis im Cache, geht es für eine Weile wieder schneller. Bei einem Laufwerksmapping ist der Effekt ebenfalls vorhanden, aber nicht ganz so störend wie beim Zugriff über UNC-Pfade.

Ich habe mir heute mal die Mühe gemacht, dem mit einem Packet Trace auf den Grund zu gehen, und bin auf ein erstaunliches Ergebnis gestoßen.

Die Verzögerung kommt nicht etwa durch ein Problem der Namensauflösung, sondern hängt mit einem NTFS-Feature namens Alternate Data Streams (ADS) zusammen.

Klickt man im Windows Explorer z.B. auf ein Unterverzeichnis namens Projects, holt sich Windows zunächst mal diverse Informationen über enthaltene Files und die Extended Attribute, zuletzt kommt eine Anfrage nach ADS-Informationen:

SMB   NT CreateAndX Request, Path: File Name: \Projects:{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}:$DATA

Da in Samba 3.x keine ADS-Informationen gespeichert werden, müsste der Samba Server einfach sagen, dass $DATA leer ist, stattdessen antwortet Samba mit der Meldung:

SMB  NT CreateAndX Response, Error: STATUS_OBJECT_PATH_NOT_FOUND (0xc000003a)

Daraufhin gibt Windows einen Close Request und fängt von vorne an, das Spielchen geht dann so lange, bis XP nach ca. 20s aufgibt, einen Cancel Request abschickt, und sich damit abfindet, dass die ADS-Informationen nicht abfragbar sind.

Nach meinen Informationen gibt es keine Lösung für das Problem. Windows XP kann man es nicht abgewöhnen, nach ADS-Infos zu fragen, und erst  Samba 4 soll angeblich mit Alternate Data Streams zurechtkommen. Natürlich wäre es für Microsoft ein Leichtes, die Meldung "STATUS_OBJECT_PATH_NOT_FOUND" so zu interpretieren, dass der Server nichts mit der ADS-GUID anfangen kann, und daher jede Wiederholung sinnlos ist, aber das würde ja die Interopabilität mit Linux in einer unvertretbaren Weise verbessern. :-)

Falls jemand doch eine Lösung oder einen Workaround weiß, würde ich mich über einen Hinweis freuen.

« Last Edit: Wednesday, 01.08.2007 16:09 by tankwart »