Linux: Quel processus est à l'origine de “périphérique occupé” lors de l'exécution de umount? [fermé]

StackOverflow https://stackoverflow.com/questions/624154

Question

Linux: le processus à l'origine du " périphérique occupé " en faisant umount?

Était-ce utile?

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 / dev / plutôt que / 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.

Répertoriez les fichiers sur < point de montage > (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é le fichier en lecture seule ( mount -o remount, ro < mountpoint > ), il est prudent (r) de tuer tous les processus restants:

fuser -vmMk <mountpoint>

Points de montage

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 umount causera des problèmes. Vérifiez avec:

mount | grep <mountpoint>/

Pour les montages en boucle, vérifiez également la sortie de:

losetup -la

Inodes anonymes (Linux)

Les inodes anonymes peuvent être créés par:

  • Fichiers temporaires ( ouvert avec O_TMPFILE )
  • inotify montres
  • [eventfd]
  • [eventpoll]
  • [timerfd]

Il s’agit du type de pokémon le plus insaisissable. Il apparaît dans la colonne 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 ).

Ils n'apparaîtront pas dans lsof + f - / dev / , vous aurez donc besoin de:

lsof | grep a_inode

Pour supprimer les processus contenant des inodes anonymes, voir: liste des surveillances inotify actuelles (chemin d'accès, PID) .

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.

Les systèmes de fichiers

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'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top