Linux: Quel processus est à l'origine de “périphérique occupé” lors de l'exécution de umount? [fermé]
Question
Linux: le processus à l'origine du " périphérique occupé " en faisant umount?
La solution
Regardez la commande lsof (liste des fichiers ouverts) - elle peut vous indiquer quels processus tiennent quoi ouvert. Parfois, c'est délicat mais souvent quelque chose d'aussi simple que sudo lsof | grep (votre nom de périphérique ici)
pourrait le faire pour vous.
Autres conseils
Juste au cas où ... vous appelez parfois umount depuis le terminal et que votre répertoire actuel appartient au système de fichiers monté.
Vous devez utiliser la commande fuser .
Par exemple. fuser / dev / cdrom
renverra le ou les pid du processus à l'aide de / dev / cdrom
.
Si vous essayez de démonter, vous pouvez arrêter ce processus à l'aide du commutateur -k
(voir man fuser
).
Recherchez les périphériques en boucle ouverte mappés sur un fichier du système de fichiers avec "losetup -a". Ils ne s'afficheront ni avec lsof ni avec le fuser.
Vérifiez également / etc / exports
. Si vous exportez des chemins dans le point de montage via NFS, cette erreur se produira lors de la tentative de démontage et rien ne s'affichera dans fuser
ou lsof
.
lsof +f -- /mountpoint
(comme la liste des processus utilisant des fichiers sur le montage monté sur / mountpoint. Particulièrement utile pour déterminer le ou les processus utilisant une clé USB ou un CD / DVD monté.
lsof et fuser sont en effet deux manières de trouver le processus qui garde un fichier ouvert. Si vous voulez juste que umount réussisse, vous devriez explorer ses options -f et -l.
C’est exactement pourquoi le "fuser -m / mount / point" existe.
BTW, je ne pense pas que "fuser" ou & lsof " indiquera quand une ressource est détenue par le module du noyau, bien que je n’ai généralement pas ce problème ..
lsof et fuser ne m'ont rien donné non plus.
Après avoir renommé tous les répertoires possibles en .old et redémarré le système chaque fois que j'ai apporté des modifications, j'ai trouvé un répertoire particulier (relatif à postfix) responsable.
Il s’est avéré que j’avais déjà créé un lien symbolique entre / var / spool / postfix et / disk2 / pers / mail / postfix / varspool afin de minimiser les écritures sur disque sur un système de fichiers racine basé sur SDCARD (Sheeva Plug).
Avec ce lien symbolique, même après l’arrêt des services postfix et dovecot (les ps aussi bien que les netstat -tuanp n’ont rien montré de relatif), je n’ai pas pu démonter / disk2 / pers.
Lorsque j'ai supprimé le lien symbolique et mis à jour les fichiers de configuration postfix et dovecot pour qu'ils pointent directement vers les nouveaux répertoires de / disk2 / pers /, j'ai réussi à arrêter les services et à démonter le répertoire.
La prochaine fois, je regarderai de plus près le résultat de:
ls -lR /var | grep ^l | grep disk2
La commande ci-dessus listera de manière récursive tous les liens symboliques dans une arborescence de répertoires (ici à partir de / var) et filtrera les noms qui pointent vers un point de montage cible spécifique (ici disk2).
Ouvrir les fichiers
Les processus avec des fichiers ouverts sont les coupables habituels. Affichez-les:
lsof +f -- <mountpoint or device>
Il existe un avantage à utiliser plutôt que Répertoriez les fichiers sur Ne supprimez de manière interactive que les processus dont les fichiers sont ouverts à l'écriture: Après avoir remonté le fichier en lecture seule ( 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 de Pour les montages en boucle, vérifiez également la sortie de: Les inodes anonymes peuvent être créés par: Il s’agit du type de pokémon le plus insaisissable. Il apparaît dans la colonne Ils n'apparaîtront pas dans , vous aurez donc besoin de: Pour supprimer les processus contenant des inodes anonymes, voir: liste des surveillances inotify actuelles (chemin d'accès, PID) . / dev /
/ point de montage
: un point de montage disparaît après un umount -l
, ou il peut être masqué par un montage superposé. fuser
peut également être utilisé, mais à mon sens, lsof
a une sortie plus utile. Cependant, fuser
est utile pour éliminer les processus à l'origine de vos drames afin que vous puissiez continuer votre vie. < point de montage >
(voir l'avertissement ci-dessus): fuser -vmM <mountpoint>
fuser -vmMkiw <mountpoint>
mount -o remount, ro < mountpoint >
), il est prudent (r) de tuer tous les processus restants: fuser -vmMk <mountpoint>
Points de montage
umount
causera des problèmes. Vérifiez avec: mount | grep <mountpoint>/
losetup -la
Inodes anonymes (Linux)
ouvert
avec O_TMPFILE
) TYPE
de lsof
sous la forme a_inode
(non documenté dans la liste < a href = "http://man7.org/linux/man-pages/man8/lsof.8.html" rel = "nofollow noreferrer"> lsof
page de manuel ). lsof + f - / dev /
lsof | grep a_inode
Si vous ne pouvez toujours pas démonter ou remonter votre appareil après avoir arrêté tous les services et processus contenant des fichiers ouverts, il est possible qu'un fichier d'échange ou une partition d'échange maintienne votre appareil occupé. Cela ne sera pas visible avec fuser
ou lsof
. Désactiver l'échange avec:
sudo swapoff -a
Vous pouvez vérifier au préalable et afficher un résumé de toutes les partitions ou fichiers d'échange avec:
swapon -s
ou:
cat /proc/swaps
Au lieu d'utiliser la commande sudo swapoff -a
, vous pouvez également désactiver le swap en arrêtant un service ou une unité systemd . Par exemple:
sudo systemctl stop dphys-swapfile
ou:
sudo systemctl stop var-swap.swap
Dans mon cas, il était nécessaire de désactiver le swap, ainsi que d'arrêter tous les services et processus dont les fichiers étaient ouverts à l'écriture, afin de pouvoir remonter ma partition racine en lecture seule afin d'exécuter fsck
. sur ma partition racine sans redémarrer. Cela était nécessaire sur un Raspberry Pi exécutant Jessie Raspbian.
montés sur le système de fichiers que vous essayez de démonter peuvent provoquer l'erreur target is busy
en plus des fichiers en cours d'utilisation. (Par exemple, lorsque vous montez -o bind / dev / mnt / votremount / dev
pour pouvoir utiliser chroot
.)
Pour rechercher les systèmes de fichiers montés sur le système de fichiers, exécutez la procédure suivante:
mount | grep '/ mnt / yourmount'
Pour savoir quels fichiers sont en cours d'utilisation, les conseils déjà suggérés par d'autres utilisateurs sont les suivants:
lsof | grep '/ mnt / yourmount'