it-swarm.com.de

Linux: CIFS / Samba-Mount hängt einige Minuten

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

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. Etwa alle paar Wochen scheint die Verbindung oder der Mount-Punkt jedoch unterbrochen zu werden oder hängen zu bleiben, sodass jeder Prozess, der versucht, auf den Mount-Punkt zuzugreifen, im D-Status (Festplatte oder E/A-Wartezeit) hängen bleibt. 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 mehr als 5 Minuten. Es ist wirklich frustrierend und behindert die normale Arbeit, da es das Speichern unter-Dialoge, ls -Befehle usw. einfriert. Wenn ich ein umount am Einhängepunkt ausgeben, hängt es entweder auch oder meldet, dass der Einhängepunkt verwendet wird. Schließlich löst sich der tote Zustand von selbst auf und der Mount-Punkt wird nicht mehr gemountet, oder es wird möglich, umount ohne Verzögerung.

Ich vermute, dass dies passiert, wenn die Verbindung/Mount inaktiv war oder wenn der Windows-Computer inaktiv war. Ich bin mir nicht ganz sicher.

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

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

26
Pistos

Sie sind sich nicht sicher, warum das Problem auftritt, aber haben Sie als Problemumgehung versucht, etwas wie touch /mnt/windowsbox/keepalive.txt oder echo "I am still alive." >/mnt/windowsbox/keepalive.txt jede Minute per Cron laufen? Auf diese Weise sollte die Verbindung aktiv bleiben.

11

Auch ich begegne dem alle paar Monate. Sudo umount -l ist meine Problemumgehung. https://stackoverflow.com/a/96288/2097284

6

Wenn Sie Netzwerkprobleme haben und die Windows-Box 7+ ausführt, 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

weitere Informationen 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 aufweist, suchen Sie nach Zeitüberschreitungen ...

1
Pat

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

Ich habe ein Bash-Skript wie dieses geschrieben, um dies 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 soeben in der Befehlszeile hergestellte Verbindung sofort beendet wird. Es sollten 8 Schrägstriche vor dem Servernamen und 4 vor dem Freigabenamen stehen, da Backslashes maskiert werden müssen und die Escapezeichen in einer Zeichenfolge in doppelten Anführungszeichen maskiert werden müssen. Vielleicht gibt es einen intelligenteren Weg, dies zu tun, aber das scheint zu funktionieren.

Vielleicht gibt es eine Möglichkeit, dies noch zuverlässiger zu machen, indem die Verbindung mehrere Minuten lang offen gehalten wird, aber das liegt etwas außerhalb meiner Liga.

0
RedScourge