urządzenie sshfs jest zajęte

30

Zamontowałem zdalny system plików za pomocą sshfs (wersja 2.8.4)

sshfs -o allow_root [email protected]: ./example

ale odmontowanie go kończy się niepowodzeniem

> fusermount -u example
umount: /home/joeuser/example: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

Wszelkie pomysły na to, co może być przyczyną tego błędu i jak go naprawić?

ctuffli
źródło

Odpowiedzi:

14

Niektóre programy używają plików w systemie plików, który próbujesz odmontować. Może to być plik otwarty do odczytu lub zapisu, bieżący katalog lub kilka innych niejasnych przypadków. Może to być nawet spowodowane tym, że katalog w systemie plików jest punktem podłączenia.

Aby to zbadać, biegnij lsof +f -- example. Powie, jakie procesy wykorzystują system plików. Zdecyduj, czy chcesz zamknąć pliki, zabić je, czy odroczyć odmontowanie.

Gilles „SO- przestań być zły”
źródło
Co dziwne, lsof nie pokazał procesu gvfsd-archive, który pozostał po otwarciu (i zamknięciu?) Pliku archiwum z GUI menedżera plików. Sprawdź także ps aux | grep gvfsd-archive.
alexei
Ostrzegł, że lstat nie może wykonać i że informacje mogą być niekompletne i nie wymieniono winowajcy. W moim przypadku miałem otwarty terminal z zainstalowanym katalogiem roboczym.
Jānis Elmeris
36

Myślę, że chcesz leniwego odmontowania:

sudo umount -l example
Chris
źródło
1
Myślę, że twoja sugestia jest nieprawidłowa. Według strony podręcznika leniwy umount Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore. Więc to nie rozwiąże pierwotnego problemu. Uzgodniony z @Gilles, lsofpowinien pomóc tutaj.
2
Właściwie to zadziałało dla mnie. lsof nie mógł znaleźć żadnych otwartych plików, ale umount -ldziałał.
gerrit
1
To rozwiązanie również działało dla mnie!
Dan
1
Wystąpił ten sam problem z sshfs, to też zadziałało dla mnie.
Orun
4

Właśnie miałem ten problem i nie mogłem kill -9odczytać z zamontowanego systemu plików. kill -9nie działał nawet po fusermount -zu /mount/pointlub umount -l /mount/point(co działało). Jedyne, co zadziałało, to pkill -9 sshfs.

CTN
źródło
1
fusermount -zu /mount/pointpracował dla mnie. Dzięki!
ostrokach
3

Uruchamianie Ubuntu man fusermountmówi o -zopcji, która jest udokumentowana jako „leniwy odmontowanie”. Wygląda na to, że jest powiązane, ale wymaga potwierdzenia, które podaje inna strona man: fusermount (man.he.net) , która mówi „leniwy odmontować (działa, nawet jeśli zasoby są nadal zajęte)”. Trzeba go używać z-u , w -zopcji sam, będzie produkować błąd. Wypróbowałem tę -zopcję i mogę to potwierdzić, ale to właśnie za dużo wygląda na lewę: co to dokładnie robi? Czy chcesz odmontować go automatycznie, gdy katalog nie będzie już zajęty? Nie wiem, nieudokumentowane, takie niebezpieczne.

Oto kolejna opcja, bardziej szczegółowa, ale bezpieczniejsza: próbuje odmontować, dopóki nie uda jej się tyle razy, ile potrzeba, w pętli.

echo -n "Unmounting...";
fusermount -u -q "$MOUNT_POINT";
OK="$?";

while [ "$OK" != "0" ]
do
   sleep 1;
   echo -n ".";
   fusermount -u -q "$MOUNT_POINT";
   OK="$?";
done

echo;

Informacje zwrotne dotyczące postępów są minimalne, dzięki czemu można wiedzieć, co się dzieje, i nie wierzyć, że został powieszony.

Ta opcja jest dopuszczalna ze skryptu powłoki; w przypadku interakcji z wierszem poleceń użycie tej -zopcji jest wygodniejsze, ale prawdopodobnie należy pamiętać, że strona podręcznika man tego nie dokumentuje i mogą istnieć wątpliwości co do tego, co dokładnie robi.

Hibou57
źródło
2

Często widzę „urządzenie zajęte” przez sshfs, gdy mam okno terminala otwarte na katalog w udziale sshfs. Wyjście z terminala lub zmiana katalogów na udział lokalny, a następnie uruchomienie fusermount -u rozwiązuje moje problemy.

CJ Travis
źródło
1

W systemie OS X spróbuj:

diskutil unmount force /mount/point
ReaperSoon
źródło
1

Jeśli już upewniłeś się, że żaden proces nie korzysta z systemu plików przed próbą „regularnego” zamontowania:

  • fuser -vm /mount/point i / lub
  • lsof /mount/point znaleźć ich,
  • quit / kill / do_something_with_them, aby już nie korzystali /mount/point,

Próbować:

  • pkill -KILL sshfs i wtedy
  • fusermount -u /mount/point.

Pomogło mi to, gdy straciłem połączenie sieciowe i nie mogłem odmontować niereagującego punktu montowania sshfs.

Ponadto, jeśli chcesz, aby sshfs automatycznie umountował się po utracie połączenia sieciowego , informując aplikacje używające sshfs o błędzie we / wy (aby nie utknęły w nieskończoność), zamontuj za pomocą:

  • sshfs -o ServerAliveInterval=15 remote-srv:/remote/dir /local/mountpoint

Gdy żadne dane nie są wymieniane, sshklient będzie sprawdzał co 15 sekund, czy może uzyskać odpowiedź z serwera. Jeśli 3 testy zakończą się niepowodzeniem, nastąpi rozłączenie i odmontowanie.

Totor
źródło