Parfois, je voudrais démonter un périphérique USB avec umount /run/media/theDrive
, mais je reçois une drive is busy
erreur.
Comment savoir quels processus ou programmes accèdent à l'appareil?
Parfois, je voudrais démonter un périphérique USB avec umount /run/media/theDrive
, mais je reçois une drive is busy
erreur.
Comment savoir quels processus ou programmes accèdent à l'appareil?
Réponses:
Utilisez lsof | grep /media/whatever
pour savoir ce qui utilise la monture.
En outre, envisagez umount -l
(laumount umount) pour empêcher de nouveaux processus d’utiliser le lecteur pendant le nettoyage.
fuser -mv /path/to/mountpoint
pourrait être une alternative plus lisible pour découvrir des processus utilisant un point de repère.
lsof | grep
fonctionne mieux pour moi. fuser -mv
semble simplement vider plus de 80% des processus sans rapport. J'utilise des répertoires liés au montage.
umount -l
est dangereux . mount -o bind
à la place, un 000
répertoire vide en mode et nettoyez via lsof +f -- /dev/device
.
La plupart du temps, la meilleure commande à utiliser est lsof ( « l i s t o pen f Iles »).
lsof +f -- /media/usb0
où /media/usb0
est le point de montage du lecteur USB ou d'un autre système de fichiers à démonter. +f --
indique à lsof de traiter l'argument suivant comme un point de montage; il gère généralement, mais pas toujours, tout seul, de sorte que cela lsof /media/usb0
fonctionne également. Cela permet de trouver des fichiers ouverts (même non liés), des fichiers mappés en mémoire, des répertoires en cours et des utilisations plus obscures. Vous devez exécuter la commande en tant que root pour obtenir des informations sur les processus des autres utilisateurs (et je pense qu'il existe des unités qui lsof
doivent être exécutées en tant que root).
Il y a des utilisations que lsof ne trouvera pas; ceux-ci sont rares sur les supports amovibles. Ils incluent:
/foo
s'il /foo/bar
s'agit d'un point de montage./foo
s'il /foo/bar
s'agit d'un périphérique bloc monté ou d'un fichier normal monté en boucle, ou s'il est la source d'un montage de liaison Linux.Une autre commande pouvant servir dans un pincement est fuser, qui ne répertorie que les PID des processus avec des fichiers ouverts sur le périphérique:
fuser -m /media/usb0
Vous pouvez utiliser lsof
comme Peter l'a dit, ou si vous êtes sûr de vouloir simplement tuer toutes ces choses et les démonter, vous pouvez probablement faire quelque chose comme:
fuser -Mk /mnt/path
umount /mnt/path
-M
sécurité.
-M
doit être appliquée.
fuser
: -M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
Les processus avec des fichiers ouverts sont les coupables habituels. Les afficher:
lsof +f -- <mountpoint or device>
Il y a un avantage à utiliser /dev/<device>
plutôt que /mountpoint
: un point de montage disparaît après un umount -l
ou peut être caché par un montage superposé.
fuser
peut également être utilisé, mais à mon avis lsof
a une sortie plus utile. Cependant, il fuser
est utile de tuer les processus qui causent vos drames afin que vous puissiez continuer votre vie.
Liste des fichiers sur <mountpoint>
(voir l'avertissement ci-dessus):
fuser -vmM <mountpoint>
Ne supprimez de manière interactive que les processus dont les fichiers sont ouverts à l'écriture:
fuser -vmMkiw <mountpoint>
Après avoir remonté read-only ( mount -o remount,ro <mountpoint>
), il est prudent de tuer tous les processus restants:
fuser -vmMk <mountpoint>
Le coupable peut être le noyau lui-même. Un autre système de fichiers monté sur le système de fichiers que vous essayez d'essayer umount
causera des problèmes. Vérifier avec:
mount | grep <mountpoint>/
Pour les montages en boucle ( merci Stephen Kitt ), vérifiez également la sortie de:
losetup -la
Les inodes anonymes peuvent être créés par:
open
avec O_TMPFILE
)Ce type de pokemon est le plus insaisissable et apparaît dans lsof
la TYPE
colonne 's sous la forme a_inode
(non documenté dans la lsof
page de manuel ).
Ils n'apparaîtront pas dans lsof +f -- /dev/<device>
, vous devrez donc:
lsof | grep a_inode
Pour plus d'informations sur les processus contenant des inodes anonymes, voir: Liste des surveillances inotify actuelles (nom du chemin, PID) .
inotify
montres (Linux)Ce commentaire explique pourquoi inotify
ne devrait pas empêcher un démontage, mais cette note décrit les situations dans lesquelles il va :
un démontage peut être suspendu pendant l'
vx_softcnt_flush()
appel. Le blocage se produit parce que les contrôles inotify incrémentent lai_count
variable et lev_os_hold value
maintiennent élevés jusqu'à ce que l'observateur inotify libère le blocage.
lsof
.
Mountpoints
section.
Pour (au moins) OpenBSD:
$ fstat /mnt/mountpoint
Par exemple (utiliser doas
pour exécuter en fstat
tant que root, sinon nous ne verrions que nos propres processus):
$ doas fstat /usr/ports
USER CMD PID FD MOUNT INUM MODE R/W SZ|DV NAME
_pbuild make 15172 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
_pbuild make 40034 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
Dans ce cas, je ne pourrais pas démonter /usr/ports
avant que l'utilisateur _pbuild
n'ait fini d'exécuter ces deux make
processus.
C'est un piège courant: vous appelez un utilisateur différent (root ou tout autre utilisateur), accédez au répertoire d'un périphérique monté, puis vous vous déconnectez en tant qu'utilisateur. Lorsque vous oubliez que vous êtes parti dans ce répertoire, vous pouvez essayer de trouver jusqu'à ce que vous soyez aveugle. lsof
ne montre au shell que le répertoire en cours utilise ce périphérique. Vous voudrez peut-être utiliser à nouveau cet utilisateur pour modifier votre répertoire.