Merkwürdiges Verhalten von Samba und GVFS – etwa die Hälfte der Verzeichnisse/Dateien scheint zufällig zu „fehlen“

Merkwürdiges Verhalten von Samba und GVFS – etwa die Hälfte der Verzeichnisse/Dateien scheint zufällig zu „fehlen“

Die Situation:Server mit Gentoo Linux und Samba. Es gibt etwa 15 Windows-PCs, ein MacBook Pro und einen Samsung-Laptop mit Ubuntu. Es gibt keine Domäne, nur eine Arbeitsgruppe, und der Server wird nur für Samba-Freigaben verwendet. Unter Ubuntu verwende ich gvfs, um Samba-Freigaben zu mounten.

Und das Problem:Eines Tages fehlte ungefähr die Hälfte der Verzeichnisse, aber nur beim Anzeigen auf diesem Ubuntu-Laptop. Wenn ich mich per SSH mit dem Server verbinde, kann ich die fehlenden Dateien/Verzeichnisse sehen und ich kann die fehlenden Dinge auch auf Win- oder Mac-Computern sehen.

Der Tempfix:Wenn ich einige der fehlenden Verzeichnisse umbenenne, selbst wenn es sich nur um ein Symbol handelt, tauchen fehlende Verzeichnisse wieder auf … sogar ohne Neuladen/Aktualisieren der gvfs-gemounteten Freigabe. Wenn ich sie sofort wieder auf die vorherigen Verzeichnisse/Dateinamen umbenenne, gehen alle zuvor fehlenden Verzeichnisse/Dateien sofort wieder verloren.

Als dieses Problem etwa einen Monat später erneut auftrat, könnte ich einen Rat gebrauchen, wo ich mit der Suche beginnen sollte.

Antwort1

Ich habe möglicherweise ein ähnliches Problem erlebt, aber nur mit einer einzigen fehlenden Datei. Ich vermute, dass der Linux-Samba-Mount-Helfer problematisch ist.

Könnten Sie folgende Tests auf Ihrem Client ausführen?

cd [Verzeichnis mit fehlenden Unterverzeichnissen]

ls -al | grep [fehlender Name] -> nichts gefunden (readdir ist defekt)
ls -al [fehlender Name] -> listet das Element auf (Statistik funktioniert) -- verwende -d, wenn [fehlender Name] ein Verzeichnis ist

So finden Sie heraus, ob der Kernel diese Dateien vor Ihnen verbirgt:

umount SMB-Freigabe
starte "tcpdump -p -i [deine Netzwerkkarte] -s0 -w net.dump host [dein Samba-Host]"
Mounten Sie die Freigabe
Führen Sie den Test "ls -al | grep [missing name]" aus.
TCPdump stoppen
Überprüfen Sie, ob der Dateiname in tcpdump enthalten ist, aber nicht in der Verzeichnisliste angezeigt wird. Daher:
strings --encoding=b net.dump | grep [fehlender Name]
strings --encoding=l net.dump | grep [fehlender Name]

Wenn der Name mindestens einmal enthalten ist, bedeutet dies, dass der Samba-Server die gesamte Liste sendet, Linux jedoch einige Einträge verwirft.

verwandte Informationen