Kiedy robię
sudo umount /media/KINGSTON
mam
umount: /media/KINGSTON: device is busy.
Zamykam wszystkie okna i upewniam się, że wszystkie powłoki wskazują inne katalogi. Jak mogę dowiedzieć się, który proces uniemożliwia umount?
Kiedy robię
sudo umount /media/KINGSTON
mam
umount: /media/KINGSTON: device is busy.
Zamykam wszystkie okna i upewniam się, że wszystkie powłoki wskazują inne katalogi. Jak mogę dowiedzieć się, który proces uniemożliwia umount?
Odpowiedzi:
otwórz terminal:
fuser -c /media/KINGSTON
Wyprowadzi coś takiego:
/media/KINGSTON/: 3106c 11086
To da ci pid procesów korzystających z tego woluminu. Dodatkowa postać na końcu pid poda dodatkowe informacje. (cw 3106c)
c - proces używa pliku jako bieżącego katalogu roboczego
m - plik jest mapowany za pomocą mmap
o - proces używa go jako otwartego pliku
r - plik jest katalogiem głównym procesu
t - proces uzyskuje dostęp do plik jako plik tekstowy
y - ten plik jest terminalem sterującym dla procesu
Więc aby odmontować, po prostu zabij te pidy i ponownie spróbuj odmontować
sudo kill -9 3106 11086
sudo umount /media/KINGSTON
Uwaga: Aby znaleźć dokładną nazwę tych pidów, możesz użyć tego polecenia
cat /proc/<pid>/cmdline
Na przykład : cat /proc/11086/cmdline
spowoduje to wyświetlenie czegoś takiego jak poniżej.
evince^@/media/KINGSTON/Ubuntu-guide.pdf^@
Mam nadzieję, że to pomoże
ps <pid>
zamiast edycji plików w / proc, aby zobaczyć nazwę polecenia i argumenty.
Najbardziej użytecznym narzędziem jest lsof . Pokazuje, z jakich plików korzystają poszczególne procesy. Jeśli /media/KINGSTON
jest punktem podłączenia (nazwa urządzenia również by działała), następujące polecenie pokazuje wszystkie pliki, które są używane w tym punkcie podłączenia:
lsof /media/KINGSTON
Jeśli uruchomisz to polecenie jako zwykły użytkownik, wyświetli on tylko twoje procesy¹. Uruchom, sudo lsof /media/KINGSTON
aby zobaczyć procesy wszystkich użytkowników.
Dane wyjściowe lsof
wygląda następująco:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zsh4 31421 gilles cwd DIR 8,1 4096 130498 /var/tmp
zsh4 31421 gilles txt REG 8,1 550804 821292 /bin/zsh4
zsh4 31421 gilles mem REG 8,1 55176 821326 /usr/lib/zsh/4.3.10/zsh/complist.so
zsh4 31421 gilles 12r REG 8,1 175224 822276 /usr/share/zsh/functions/Completion.zwc
Do COMMAND
przedstawienia kolumna nazwa pliku wykonywalnego programu i PID
przedstawia kolumna ID procesu. NAME
Kolumna pokazuje nazwę pliku; możesz zobaczyć, (deleted)
czy plik został usunięty podczas otwierania (gdy plik jest usuwany, nie ma już nazwy, ale nadal istnieje, dopóki plik nie zostanie zamknięty przez ostatni proces). USER
powinno być zrozumiałe. Pozostałe kolumny nie mają tutaj znaczenia, chyba żeFD
, co pokazuje, w jaki sposób plik jest wykorzystywany przez proces:
cwd
: bieżący katalog roboczytxt
: program wykonywalny²mem
: plik odwzorowany w pamięci (tutaj, myśl o nim jako o otwartym pliku)r
do czytania i w
pisaniaNie ma mechanicznego sposobu zlokalizowania okna, w którym plik jest otwarty (w rzeczywistości nie ma to znaczenia technicznego: jeśli proces ma kilka okien, plik nie jest szczególnie powiązany z jednym lub innym oknem), ani nawet prosty sposób identyfikacji okno procesu (i oczywiście proces nie musi mieć żadnych okien). Ale zwykle nazwa polecenia i nazwa pliku wystarczają do zlokalizowania sprawcy i prawidłowego zamknięcia pliku.
Jeśli nie możesz zamknąć pliku i po prostu chcesz go zakończyć, możesz zabić proces za pomocą kill 31421
(gdzie 31421
jest identyfikator procesu) lub kill -HUP 31421
(„rozłącz się”). Jeśli zwykły zabijanie nie załatwi, zabić skrajnej uszczerbku dla: kill -KILL 31421
.
Istnieje interfejs GUI dla lsof , glsof , ale nie jest jeszcze gotowy na najwyższy czas i do tej pory nie jest dostępny dla Ubuntu.
¹
Lsof może wymienić niektóre informacje o procesach innych użytkowników, ale nie wykrywa punktu podłączenia, więc nie wyświetli ich, jeśli określisz punkt podłączenia.
²
Kod wykonywalny jest często nazywany tekstem w dyskusjach na temat formatów wykonywalnych.
Może to również pomóc:
lsof | grep \/media\/KINGSTON
grep "media/KINGSTON"
Tymczasem polecenie utrwalacza znacznie się poprawiło. Możesz wykonać całą robotę za pomocą jednego polecenia:
$ sudo fuser -ickv /"mountpoint"
Gdzie:
k
zabija przestępstwo,v
z góry pokazuje proces i jego użytkownikai
prosi o potwierdzenie. Jeśli jakiś proces jest odporny, spróbuj ponownie z fuser -ickv -9
(lub bardziej ogólnie z -SIGNAL
), który zabija najbardziej uparte.
Ale zawsze znajdziesz jakiś „nieśmiertelny” proces ...!
W tych przypadkach ostatnio nauczyłem się używać
$ sudo umount --lazy --force <mountpoint>
jako ostatni zasób, który do tej pory działał dla mnie za każdym razem.
vboxmanage
. -_-