umount - urządzenie jest zajęte

14

Czasami, gdy chcę podłączyć urządzenie, np

sudo umount /dev/loop0

Dostanę wiadomość

umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

Zwykle rozwiązuję ten problem, zamykając okno konsoli (w moim przypadku xfce4-terminal), a następnie umount.

Co oznacza ten problem? Czy jest jakieś mądrzejsze rozwiązanie?

xralf
źródło
2
Dzieje się tak na przykład, jeśli nadal znajdujesz się w powłoce w tym katalogu, w którym podłączono urządzenie.
klapaucius
Nie pamiętam, czy tam byłem, ale próbowałem i masz rację, tak się stało.
xralf

Odpowiedzi:

14

Oznacza to, że jakiś proces ma katalog roboczy lub otwarty uchwyt pliku pod punktem montowania. Najlepiej jest zakończyć proces obrażania, zmienić katalog roboczy lub zamknąć uchwyt pliku przed odmontowaniem.

Istnieje jednak alternatywa dla systemu Linux. Korzystanie z umount -lpołączeń „leniwy” odmontowanie. System plików będzie nadal podłączony, ale nie będzie można go zobaczyć ani używać, z wyjątkiem procesów, które już go używają. Kiedy program naruszający (wyjdzie na jakikolwiek sposób), system „zakończy” odmontowanie systemu plików.

bahamat
źródło
2
Czy istnieje sposób, aby dowiedzieć się, który proces ma otwarty uchwyt pliku i powinien zostać zakończony?
xralf
4
Korzystanie lsofjest prawdopodobnie najlepszym sposobem.
bahamat
1
na przykład lsof | grep loop0?
xralf
Nie, grep dla punktu montowania. Powinien zawierać listę wszystkich plików poniżej. Nie sądzę, że pokaże rzeczy, które po prostu mają działający katalog pod punktem montowania, więc nie jest to idealna metoda.
bahamat
7

Możesz także użyć fuserdo zabicia wszystkich procesów za pomocą podłączonego systemu plików.

fuser -cuk /mnt

Opcje:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

Sprawdź sam w wyjaśnieniach .

sys0dm1n
źródło
3

Biorąc pod uwagę „zwykłe rozwiązanie”, oznacza to, że powłoka uruchomiona w oknie konsoli ma katalog w systemie plików na tym urządzeniu jako bieżący katalog roboczy.

Linux i Unixy w ogóle bardzo chcą utrzymać zamontowany system plików, jeśli proces ma bieżący katalog roboczy w tym systemie plików.

Możesz po prostu użyć cdw oknie konsoli, aby wyjść z katalogu do lub poniżej, /mntzamiast zabijać okno konsoli i działającą w nim powłokę.

Bruce Ediger
źródło
0

Odkryłem sytuację, która może zakłócać odmontowywanie urządzenia, które podam jako odpowiedź, mimo że to pytanie jest bardzo stare.

Jeśli na komputerze są hostowane udziały NFS, a którykolwiek z tych udziałów NFS jest wspierany przez urządzenie, które próbujesz odmontować, musisz przestać je udostępniać (najlepiej zrobić to, zatrzymując usługę NFS, np. W sudo service nfs-kernel-server stopnajnowszych wersjach Ubuntu ). Serwer NFS może nie wyświetlać się w lsof lub utrwalaczu, co może utrudnić identyfikację problemu.

Wug
źródło