Quand je fais
sudo umount /media/KINGSTON
j'ai eu
umount: /media/KINGSTON: device is busy.
Je ferme toutes les fenêtres et m'assure que tous les shell pointent vers d'autres répertoires. Comment savoir quel processus empêche le démontage?
Quand je fais
sudo umount /media/KINGSTON
j'ai eu
umount: /media/KINGSTON: device is busy.
Je ferme toutes les fenêtres et m'assure que tous les shell pointent vers d'autres répertoires. Comment savoir quel processus empêche le démontage?
Réponses:
ouvrir un terminal:
fuser -c /media/KINGSTON
Il produira quelque chose comme ceci:
/media/KINGSTON/: 3106c 11086
Cela vous donnera le pid des processus utilisant ce volume. Le caractère supplémentaire à la fin du pid donnera quelques informations supplémentaires. (c dans 3106c)
c - le processus utilise le fichier comme répertoire de travail actuel
m - le fichier est mappé avec mmap
o - le processus l'utilise comme fichier ouvert
r - le fichier est le répertoire racine du processus
t - le processus accède à la fichier en tant que fichier texte
y - ce fichier est le terminal de contrôle du processus
Donc, pour démonter, il suffit de tuer ces pids et de réessayer le démontage
sudo kill -9 3106 11086
sudo umount /media/KINGSTON
Remarque: Pour trouver le nom d'application exact de ces pids, vous pouvez utiliser cette commande
cat /proc/<pid>/cmdline
Par exemple : cat /proc/11086/cmdline
cela produira quelque chose comme ci-dessous.
evince^@/media/KINGSTON/Ubuntu-guide.pdf^@
J'espère que cela vous aidera
ps <pid>
au lieu de modifier des fichiers dans / proc pour voir le nom de la commande et les arguments.
L'outil le plus utile est lsof . Il montre quels fichiers sont utilisés par quels processus. S'il /media/KINGSTON
s'agit d'un point de montage (le nom du périphérique fonctionnerait également), la commande suivante affiche tous les fichiers utilisés sur ce point de montage:
lsof /media/KINGSTON
Si vous exécutez cette commande en tant qu'utilisateur ordinaire, elle n'affichera que vos propres processus¹. Exécutez sudo lsof /media/KINGSTON
pour voir tous les processus des utilisateurs.
La sortie de lsof
ressemble à ceci:
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
La COMMAND
colonne affiche le nom de l'exécutable du programme et la PID
colonne indique l'ID du processus. La NAME
colonne affiche le nom du fichier; vous pouvez voir (deleted)
si le fichier a été supprimé lors de son ouverture (lorsqu'un fichier est supprimé, il n'a plus de nom, mais il existe toujours jusqu'à ce que le dernier processus l'utilisant ferme le fichier). USER
devrait être explicite. Les autres colonnes n'ont pas d'importance ici, sauf peut FD
- être , qui montre comment le fichier est utilisé par le processus:
cwd
: répertoire de travail actueltxt
: l'exécutable du programme²mem
: un fichier mappé en mémoire (ici, pensez-y comme un fichier ouvert)r
pour la lecture et l' w
écritureIl n'y a aucun moyen mécanique de localiser la fenêtre où un fichier est ouvert (ce n'est en fait pas significatif techniquement: si un processus a plusieurs fenêtres, un fichier n'est pas particulièrement associé à une fenêtre ou une autre), ni même une manière simple d'identifier la fenêtre d'un processus (et bien sûr un processus n'a pas besoin d'avoir de fenêtres). Mais généralement, le nom de la commande et le nom du fichier suffisent pour localiser le contrevenant et fermer correctement le fichier.
Si vous ne pouvez pas fermer le fichier et que vous voulez tout mettre fin, vous pouvez tuer le processus avec kill 31421
(où 31421
est l'ID du processus) ou kill -HUP 31421
(«raccrocher»). Si le meurtre ordinaire ne fait pas l'affaire, tuer avec préjudice extrême: kill -KILL 31421
.
Il existe une interface graphique pour lsof, glsof , mais elle n'est pas encore tout à fait prête pour les heures de grande écoute, et n'est pas encore packagée pour Ubuntu.
¹
Lsof peut répertorier certaines informations sur les processus d'autres utilisateurs, mais il ne détecte pas le point de montage, il ne les répertoriera donc pas si vous spécifiez un point de montage.
² Le
code exécutable est souvent appelé texte dans les discussions sur les formats exécutables.
Cela peut également aider:
lsof | grep \/media\/KINGSTON
grep "media/KINGSTON"
Pendant ce temps, la commande de l'unité de fusion s'est beaucoup améliorée. Vous pouvez effectuer le travail complet avec une seule commande:
$ sudo fuser -ickv /"mountpoint"
Où:
k
tue le processus incriminé,v
spectacles à l' avance le processus et son utilisateuri
vous demande une confirmation. Si un processus résiste, essayez à nouveau avec fuser -ickv -9
(ou plus généralement avec -SIGNAL
) qui tue les plus tenaces.
Mais vous trouverez toujours un processus "immortel" ...!
Dans ce cas, j'ai récemment appris à utiliser
$ sudo umount --lazy --force <mountpoint>
comme une dernière ressource, qui jusqu'à présent a fonctionné pour moi à chaque fois.
vboxmanage
. -_-