Frage Linux: CIFS / Samba mount hängt für einige Minuten


Ich habe ein kleines lokales Netzwerk, das eine Gentoo-Box und eine Windows-Box hat. Ich mounte eine Freigabe, die von der Windows-Box stammt, auf die Gentoo-Box mit einem Befehl wie:

mount -t cifs -o username=WindowsUsername,password=thepassword,uid=pistos //192.168.0.103/Users /mnt/windowsbox

Meistens funktioniert alles einfach, und ich kann ohne Probleme lesen und schreiben. Die Verbindung oder der Mount-Punkt scheint jedoch alle paar Wochen zu schwinden oder zu hängen, sodass jeder Prozess, der versucht, auf den Mount-Punkt zuzugreifen, im D-Zustand stecken bleibt (Datenträger oder E / A-Wartezustand). Diese Prozesse werden für TERM- und KILL-Signale undurchlässig. Das Trennen und erneute Verbinden der Windows-Box vom Netzwerk hilft nicht. Der gefrorene Zustand dauert 5 Minuten. Es ist wirklich frustrierend und behindert die normale Arbeit, weil es Save As-Dialoge einfriert, ls Befehle usw. Wenn ich a umount Am Mount-Punkt hängt es entweder auch oder meldet, dass der Mount-Punkt verwendet wird. Schließlich wird der tote Zustand selbst aufgelöst, und der Mount-Punkt wird ausgehängt oder es wird möglich umount ohne Verzögerung.

Meine Vermutung ist, dass dies passiert, wenn die Verbindung / Bereitstellung im Leerlauf ist oder wenn die Windows-Maschine im Leerlauf war. Ich bin mir nicht ganz sicher.

Warum passiert das und was kann ich tun, um das zu verhindern? Oder wie kann ich diese D-State-Prozesse nach Belieben erfolgreich töten?

Möglicherweise verwandt: CIFS-Mounts hängen beim Lesen


23
2017-08-18 16:52


Ursprung


Sind irgendwelche Arten von Firewalls zwischen den beiden Maschinen im Einsatz? - Schrute
@Schrute: Ich nehme an, welche Standardeinstellungen auf Linux (iptables?) Und Windows laufen. Sie denken, dass die Firewalls die Verbindungen zeitlich begrenzen? Ich hatte noch nie von so etwas gehört. - Pistos
Ich denke, das könnte ein Problem der Linux-Box sein. Ich sah ein ähnliches Problem - nicht mit cifs und Windows - aber mit einem angehängten nfs-Share. Das Speichern war nicht möglich - ich vermute, dass ein Prozess beim Zugriff auf den nicht vorhandenen NFS-Server hängen bleibt. Dies geschah normalerweise, wenn der Server abstürzte. - cornelinux
Mein Rat ist, eine Ring-Puffer-Netzwerkerfassung auf dem Linux-Rechner einzurichten (dh tcpdump -i eth0 -C 5 -W 10 -s 0 -v -w /tmp/cifs.pcap host 192.168.0.103 - würde ich auch laufen Es unter dem Bildschirm, um zu verhindern, dass der Prozess beendet wird, wenn Sie die Verbindung trennen). Wenn das Problem auftritt, stoppen Sie die Ablaufverfolgung nach ein paar Sekunden, und Sie sollten zumindest in der Lage sein zu bestimmen, welche Seite das Problem verursacht, wenn die Paketablaufverfolgung überprüft wird (Server reagiert nicht mehr, Sitzung wird getrennt usw.). - GeekyDeaks
@Pistos - Wireshark ist dein Freund! Die Spuren können verwirrend aussehen, aber wireshark wird die Frames decodieren, um zu helfen. Sie möchten zuerst die Grundlagen beseitigen, wie der Server oder der Client die Sitzung fallen lassen (FIN-Pakete), dann weiter auf andere wie der Server nicht mehr reagiert. Wenn Sie Zeit haben, gab es 2013 ein Sharkfest-Video über CIFS (youtube.com/watch?v=XbvFXSPig-w) aber es ist ziemlich lang :) - GeekyDeaks


Antworten:


Nicht sicher, warum das Problem auftritt, aber als Workaround haben Sie versucht, etwas wie touch /mnt/windowsbox/keepalive.txt oder echo "I am still alive." >/mnt/windowsbox/keepalive.txt über cron jede Minute laufen zu lassen? Auf diese Weise sollte die Verbindung aktiv bleiben.


9
2017-08-25 05:32



Gute Idee. Ich habe das eingeführt und werde sehen, was passiert. - Pistos
Dies scheint das Problem gelöst zu haben, sollte ich erwähnen. - Pistos
Schön das zu hören! - Janne Pikkarainen
Laut @ Pats Antwort könnte man dies von einem Herzschlag jede Minute bis zu einem Herzschlag alle 5 Minuten (300 Sekunden) schneiden, was das wäre */5 * * * * im Crontab-Zeitplan - woodvi
Ich benutze das für jetzt. Innerhalb von 3 Tagen hatte ich drei separate Ubuntu Server 16 LTS-Maschinen (zwei physische, eine VM) ihre SMB-Verbindungen nach ein paar Stunden nach dem Neustart fallen lassen. Beim Start wird die SMB-Verbindung ohne Probleme bereitgestellt, reagiert jedoch möglicherweise nicht mehr. - user38537


Ich begegne diesem auch alle paar Monate. sudo umount -l ist meine Problemumgehung. https://Stackoverflow.com/a/96288/2097284


4
2017-08-21 20:38





Wenn Sie Netzwerkprobleme haben und die Windows-Box 7+ läuft, lesen Sie bitte

Resilient Open Scavenger Timer [MS-SMB2] (Standard 300 Sekunden)

http://blogs.msdn.com/b/openspecification/archive/2013/03/27/smb-2-x-and-smb-3-0-timeouts-in-windows.aspx

mehr Infos zu cifs timeouts

http://blogs.msdn.com/b/openspecification/archive/2013/03/19/cifs-and-smb-timeouts-in-windows.aspx

Wenn Ihr Problem ein automatisches Wiederherstellungsverhalten hat, suchen Sie nach Timeouts ...


1
2017-08-21 14:49



Die meisten dieser Timeouts in der Dokumentation, die Sie verlinkt haben, sind nur ein paar hundert Sekunden, wobei die größten 20 Minuten sind. Mit dem Netzwerk, das ich habe, können die zwei fraglichen Maschinen beide für mehrere Stunden im Leerlauf bleiben und die CIFS-Verbindung hat keine Probleme. Das beschriebene Problemverhalten ist sporadisch und ich kenne keine Schritte, um es zu reproduzieren, außer "benutze die Maschinen normalerweise für einen Zeitraum von 2 Monaten, und schließlich wird es passieren". - Pistos
Das erwähnte Zeitlimit (300 Sek.) wird gestartet, wenn die mit einem federnden Griff verbundene Transportverbindung verloren geht. Dann könnte ein Netzwerkproblem Ihr Problem auslösen. Wenn Ihr Problem ein automatisches Wiederherstellungsverhalten hat, suchen Sie nach Timeouts ... - Pat
der windows pc geht in stromsparzustand? - c4f4t0r
@ c4f4t0r: Wie überprüfe ich? Ich glaube nicht, dass es jemals in einen "harten" Winterschlafmodus geht. Allenfalls ein "weicher" Bildschirmschoner-Modus. - Pistos
Ich weiß nicht, welche Version von Windows Sie verwenden, aber Sie können damit versuchen addictivetips.com/windows-tips/... - c4f4t0r


Eine andere mögliche Antwort schlug vor, in eine Datei auf dem Mount in regelmäßigen Abständen über Cron zu schreiben. Ich würde stattdessen empfehlen, das Programm smbclient zu verwenden, um eine Verbindung zur Freigabe herzustellen und die Verbindung zu trennen.

Ich habe ein Bash-Skript geschrieben, um das zu erreichen:

#!/bin/bash

su usernamehere -c "smbclient \\\\\\\\\\\\\\\\servernamehere\\\\\\\\sharenamehere passwordhere -c exit" >/dev/null 2>&1

Dieser Befehl stellt eine neue Verbindung zur Freigabe her und führt dann den Befehl exit aus, wodurch die gerade in der Befehlszeile hergestellte Verbindung sofort beendet wird. Vor dem Servernamen sollten 8 Schrägstriche und vor dem Freigabenamen 4 Schrägstriche stehen, da Backslashes maskiert werden müssen und die Escapezeichen innerhalb einer doppelten Zeichenfolge in Anführungszeichen gesetzt werden müssen. Vielleicht gibt es einen klügeren Weg, dies zu tun, aber das scheint zu funktionieren.

Vielleicht gibt es einen Weg, dies noch zuverlässiger zu machen, indem es die Verbindung für mehrere Minuten offen hält, aber das ist ein bisschen außerhalb meiner Liga.


0
2018-06-05 18:00



Interessanter Vorschlag. Ich hätte es versucht, wenn ich mit der anderen Lösung nicht schon Erfolg hatte. - Pistos
Ich sehe nicht, wie das hilfreich wäre? Jannes Lösung würde die Verbindung aufrecht erhalten, die der cifs-Client mit sich bringt, während dies eine neue, nicht verwandte Verbindung mit dem smbclient schaffen würde - wie würde es also helfen? - flungo