Mam małą sieć lokalną, która ma pudełko Gentoo i Windows. Zamontowuję udział pochodzący z pudełka Windows na pudełku Gentoo za pomocą polecenia:
mount -t cifs -o username=WindowsUsername,password=thepassword,uid=pistos //192.168.0.103/Users /mnt/windowsbox
Przez większość czasu wszystko po prostu działa, a ja mogę czytać i pisać bez problemów. Jednak co kilka tygodni połączenie lub punkt montowania wydaje się być martwy lub zawiesza się, tak że każdy proces, który próbuje uzyskać dostęp do punktu montowania, blokuje się w stanie D (dysk lub oczekiwanie we / wy). Procesy te stają się nieprzepuszczalne dla sygnałów TERM i KILL. Odłączanie i ponowne podłączanie systemu Windows z sieci nie pomaga. Stan zamrożenia trwa 5+ minut. Jest to naprawdę frustrujące i przeszkadza w normalnej pracy, ponieważ zawiesza okna dialogowe Zapisz jako, ls
polecenia itp. Jeśli wydam znak umount
na punkcie montowania, albo się zawiesza, albo zgłasza, że punkt montowania jest w użyciu. W końcu stan martwy sam się rozwiązuje, a punkt montowania zostaje odmontowany lub staje się to możliwe umount
bez opóźnienia.
Domyślam się, że dzieje się tak, gdy połączenie / mocowanie przestało działać lub gdy komputer z systemem Windows był bezczynny. Nie jestem do końca pewien.
Dlaczego tak się dzieje i co mogę zrobić, aby temu zapobiec? Lub w jaki sposób mogę z powodzeniem zabić te procesy stanu D do woli?
Możliwe powiązanie: mocowania CIFS zawieszają się podczas odczytu
Odpowiedzi:
Nie jestem pewien, dlaczego problem się pojawia, ale jako obejście tego problemu próbujesz co jakiś czas umieścić coś podobnego
touch /mnt/windowsbox/keepalive.txt
lubecho "I am still alive." >/mnt/windowsbox/keepalive.txt
uruchomić przez cron? W ten sposób połączenie powinno pozostać aktywne.źródło
*/5 * * * *
w harmonogramie crontabJa też spotykam się z tym co kilka miesięcy.
sudo umount -l
jest moje obejście. /programming//a/96288/2097284źródło
Inna potencjalna odpowiedź sugerowała zapisywanie do pliku na wierzchowcu w regularnych odstępach czasu za pośrednictwem crona. Zamiast tego sugerowałbym użycie programu smbclient do połączenia z udziałem i rozłączenia.
Napisałem taki skrypt bash, aby to osiągnąć:
Ta komenda nawiązuje nowe połączenie z udziałem, a następnie uruchamia komendę exit, natychmiast zamykając połączenie, które właśnie utworzyła w wierszu komend. Powinno być 8 ukośników przed nazwą serwera i 4 przed nazwą udziału, ponieważ odwrotne ukośniki muszą być poprzedzone znakami ucieczki, a zmiany znaczenia muszą być poprzedzone ciągiem podwójnym. Być może jest na to mądrzejszy sposób, ale wydaje się, że to działa.
Być może istnieje sposób, aby uczynić to jeszcze bardziej niezawodnym, utrzymując połączenie otwarte przez kilka minut na raz, ale to trochę poza moją ligą.
źródło
//servername/sharname
jest to znacznie łatwiejsze w miejscach, w których potrzebujesz dużo ucieczki.