Linux: quel processus provoque "device busy" en faisant umount? [fermé]
Linux: quel processus provoque "device busy" en faisant umount?
12 réponses
au cas où... il arrive parfois que vous appeliez umount depuis le terminal, et votre répertoire courant appartient au système de fichiers monté.
vous devez utiliser la commande fuser
.
par exemple. fuser /dev/cdrom
renverra le(s) pid (s) du procédé en utilisant /dev/cdrom
.
si vous essayez de démonter, vous pouvez tuer le processus de thèses en utilisant le commutateur -k
(voir man fuser
).
vérifier les périphériques en boucle ouverte mappés sur un fichier du système de fichiers avec "losetup-a". Ils ne se pointent pas avec le lsof ou fuser.
vérifier aussi /etc/exports
. Si vous exportez des chemins à l'intérieur du point de montage via NFS, Cela donnera cette erreur en essayant de démonter et rien n'apparaîtra dans fuser
ou lsof
.
lsof +f -- /mountpoint
(comme liste des processus utilisant des fichiers sur le montage montés sur /mountpoint. Particulièrement utile pour trouver les processus qui utilisent une clé USB montée ou un CD / DVD.
lsof et fuser sont en effet deux façons de trouver le processus qui maintient un certain fichier ouvert. Si vous voulez juste qu'umount réussisse, vous devriez étudier ses-f et-l options.
lsof et fuser ne m'ont rien donné non plus.
Après un processus de renommage de tous les possibles répertoires .ancien et redémarrant le système à chaque fois que j'ai fait des modifications, j'ai trouvé un répertoire particulier (relatif à postfix) qui était responsable.
il s'est avéré que j'avais fait une fois un lien symbolique à partir de /var/spool/postfix to /disk2/pers/mail/postfix/varspool afin de minimiser les Écritures de disque sur un système de fichier racine basé sur SDCARD (Sheeva Plug).
avec ce lien symbolique, même après avoir arrêté les services postfix et dovecot (à la fois ps aux et netstat-tuanp n'ont rien montré de relié), Je n'ai pas pu démonter /disk2/pers.
quand j'ai enlevé le lien symbolique et mis à jour les fichiers de configuration de postfix et dovecot pour pointer directement vers le nouveau dirs on /disk2/pers/ j'ai pu arrêter les services et démonter le répertoire.
la prochaine fois, je regarderai de plus près la sortie de:
ls -lR /var | grep ^l | grep disk2
la commande ci-dessus listera de façon 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 processusavec des fichiers ouverts sont les coupables habituels. Affichez-les:
lsof +f -- <mountpoint or device>
il y a un avantage à utiliser /dev/<device>
plutôt que /mountpoint
: un point de montage disparaîtra après un umount -l
, ou il peut être caché par un support superposé.
fuser
peut aussi être utilisé, mais à mon avis lsof
a une sortie plus utile. Cependant fuser
est utile quand il s'agit de tuer les processus qui causent vos drames pour que vous puissiez continuer votre vie.
Liste des fichiers <mountpoint>
(voir l'avertissement ci-dessus):
fuser -vmM <mountpoint>
de manière Interactive tuer traite uniquement avec des fichiers ouverts en écriture:
fuser -vmMkiw <mountpoint>
après remounting read-only ( mount -o remount,ro <mountpoint>
), il est sûr(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érifier avec:
mount | grep <mountpoint>/
pour les montures loopback, vérifiez également la sortie de:
losetup -la
Anonymous inodes (Linux)
inodes anonymes peut être créé par:
- dossiers temporaires (
open
avecO_TMPFILE
) - inotify montres
- [eventfd]
- [eventpoll]
- [timerfd]
ce sont le type le plus insaisissable de Pokémon, et apparaissent dans lsof
's TYPE
colonne comme a_inode
(qui est non documenté dans le lsof
man page ).
ils n'apparaîtront pas dans lsof +f -- /dev/<device>
, donc vous aurez besoin à:
lsof | grep a_inode
Pour tuer les processus anonyme holding inodes, voir: Liste actuelle inotify montres (pathname, PID) .
si vous ne pouvez toujours pas démonter ou démonter votre périphérique après avoir arrêté tous les services et processus avec des fichiers ouverts, alors il peut y avoir un fichier de pagination ou une partition de pagination qui maintient votre périphérique occupé. Cela n'apparaîtra pas avec fuser
ou lsof
. Désactiver la permutation avec:
sudo swapoff -a
vous pouvez vérifier à l'avance et afficher un résumé des partitions de swap ou des fichiers de swap avec:
swapon -s
ou:
cat /proc/swaps
comme alternative à l'utilisation de la commande sudo swapoff -a
, vous pouvez également désactiver le swap en arrêtant un service ou l'unité systemd . Par exemple:
sudo systemctl stop dphys-swapfile
ou:
sudo systemctl stop var-swap.swap
dans mon cas, désactiver le swap était nécessaire, en plus d'arrêter tous les services et processus avec des fichiers ouverts à l'écriture, afin que je puisse remonter ma partition root en lecture seule pour exécuter fsck
sur ma racine partition sans redémarrage. C'était nécessaire sur un Pi à la framboise courant Jessie à la framboise.
montés sur le système de fichiers que vous essayez de démonter peuvent causer l'erreur target is busy
en plus des fichiers utilisés. (Par exemple, lorsque vous mount -o bind /dev /mnt/yourmount/dev
afin d'utiliser chroot
.)
pour trouver les systèmes de fichiers qui sont montés sur le système de fichiers, exécutez la commande suivante:
mount | grep '/mnt/yourmount'
pour trouver quels fichiers sont utilisés les conseils déjà suggérés par d'autres ici:
lsof | grep '/mnt/yourmount'