Ich habe ein kleines lokales Netzwerk, das eine Gentoo-Box und eine Windows-Box hat. Ich mounte eine Freigabe von der Windows-Box 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 einfach alles und ich kann problemlos lesen und schreiben. Alle paar Wochen oder so scheint die Verbindung oder der Bereitstellungspunkt nicht mehr zu funktionieren oder zu hängen, sodass jeder Prozess, der versucht, auf den Bereitstellungspunkt zuzugreifen, im Status D hängen bleibt (Datenträger oder E / A-Wartezeit). Diese Prozesse werden für TERM- und KILL-Signale undurchlässig. Trennen und erneutes Verbinden der Windows-Box vom Netzwerk hilft nicht. Der gefrorene Zustand dauert 5+ Minuten. Es ist sehr frustrierend und stört die normale Arbeit, da es Dialoge, ls
Befehle usw. zum Speichern unter einfriert . Wenn ich umount
am Mount-Punkt ein ausstelle , hängt es entweder auch oder meldet, dass der Mount-Punkt verwendet wird. Schließlich löst sich der tote Zustand von selbst auf, und der Mount-Punkt wird nicht gemountet, oder es wird möglich, umount
ohne Verzögerung.
Ich vermute, dass dies passiert, wenn die Verbindung / Bereitstellung inaktiv war oder wenn der Windows-Computer inaktiv war. Ich bin mir nicht ganz sicher.
Warum passiert das und was kann ich tun, um es zu verhindern? Oder wie kann ich diese D-State-Prozesse nach Belieben erfolgreich beenden?
Möglicherweise verwandt: CIFS-Halterungen hängen beim Lesen
Antworten:
Sie sind sich nicht sicher, warum das Problem auftritt, haben Sie jedoch als Workaround versucht, jede Minute so etwas wie " Cron"
touch /mnt/windowsbox/keepalive.txt
oder "echo "I am still alive." >/mnt/windowsbox/keepalive.txt
Cron" auszuführen? Auf diese Weise sollte die Verbindung aktiv bleiben.quelle
*/5 * * * *
Auch mir begegnet dies alle paar Monate.
sudo umount -l
ist mein Workaround. https://stackoverflow.com/a/96288/2097284quelle
Eine weitere mögliche Antwort war das regelmäßige Schreiben in eine Datei auf dem Mount über cron. Ich würde stattdessen vorschlagen, das smbclient-Programm zu verwenden, um eine Verbindung zur Freigabe herzustellen und die Verbindung zu trennen.
Ich habe ein solches Bash-Skript geschrieben, um dies zu erreichen:
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 umgekehrte Schrägstriche maskiert werden müssen und die Maskierungen maskiert werden müssen, wenn sie sich in einer Zeichenfolge in doppelten Anführungszeichen befinden. Vielleicht gibt es eine intelligentere Möglichkeit, dies zu tun, aber dies 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 ist etwas außerhalb meiner Liga.
quelle
//servername/sharname
ist viel einfacher an Orten, an denen Sie viel Flucht benötigen.