En courant umount /path
je reçois:
umount: /path: device is busy.
Le système de fichiers est énorme, donc ce lsof +D /path
n’est pas une option réaliste.
lsof /path
, lsof +f -- /path
Et fuser /path
tout retour rien. fuser -v /path
donne:
USER PID ACCESS COMMAND
/path: root kernel mount /path
ce qui est normal pour tous les systèmes de fichiers montés inutilisés.
umount -l
et umount -f
n'est pas assez bon pour ma situation.
Comment comprendre pourquoi le noyau pense que ce système de fichiers est occupé?
fuser -vm /path
...--force
tentera plus difficile de démonter et,-v
ou-vvv
même, révélera davantage quel est le problème avec mount. Alors essayez:umount -vvv --force /babdmount
Réponses:
Il semble que la cause de mon problème était l'
nfs-kernel-server
exportation du répertoire. Lenfs-kernel-server
va probablement derrière les fichiers ouverts normaux et n'est donc pas listé parlsof
etfuser
.Quand j'ai arrêté le
nfs-kernel-server
je pourraisumount
le répertoire.J'ai créé une page avec des exemples de toutes les solutions jusqu'ici ici: http://oletange.blogspot.com/2012/04/umount-device-is-busy-why.html
la source
sudo service samba stop
abord, votre réponse a vraiment aidé!sudo service nfs stop
et vous n’avez peut-être pas besoin de le fairesudo exportfs -u
pour annuler l’export. N'oubliez pas ensuitesudo exportfs -r
etsudo service nfs start
de réexporter et redémarrez le service.exportfs -u
le répertoire en question.Pour ajouter à BruceCran de commentaire ci - dessus, la cause de ma manifestation de ce problème tout à l' heure était un rassis montage réalimentation. J'avais déjà vérifié la sortie de
fuser -vm <mountpoint>
/lsof +D <mountpoint>
,mount
etcat /proc/mounts
vérifié si un ancien serveur nfs-kernel-server était en cours d'exécution, désactivé les quotas, tenté (mais échoué) aumount -f <mountpoint>
et me suis presque résigné à abandonner la disponibilité de 924 jours avant de vérifier enfin la sortie delosetup
et de trouver deux rassis bouclages configuré, mais non pas montés:ensuite
Un message sur le forum Gentoo répertorie également les fichiers d' échange en tant que coupable potentiel; Bien que la permutation de fichiers soit probablement assez rare de nos jours, il n’est pas inutile de vérifier le résultat de
cat /proc/swaps
. Je ne sais pas si les quotas pourraient empêcher un démontage - je me tenais à la paille.la source
Au lieu d'utiliser lsof pour explorer le système de fichiers, utilisez simplement la liste complète des fichiers ouverts et mettez-la à jour. Je trouve que cela retourne plus vite, même si c'est moins précis. Il devrait faire le travail.
la source
lsof /path
, j'ai ditlsof | grep '/path'
. La différence est que lsof sans argument montre tous les fichiers ouverts en utilisant une sorte de table de cache, et que grep est très rapide dans sa recherche. Les choses que vous avez essayées avec lsof lui permettent de parcourir le système de fichiers, ce qui prend beaucoup de temps.lsof /path
regarde seulement le chemin. Il ne regarde pas chaque fichier. Il est souvent beaucoup plus rapide quelsof | grep /path
(dans mon test non scientifique, le YMMV était 20 fois plus rapide) car il ne regarde pas tous les fichiers ouverts, mais uniquement les fichiers de ce chemin.lsof /path
n’a rien donné , maislsof | grep /path
il m’a montré le processus qui consistait à conserver des fichiers ouverts et à m’empêcher de démonter le volume.Pour moi, le processus incriminé était un démon fonctionnant dans un chroot. Parce que c'était dans un chroot,
lsof
etfuser
ne le trouverais pas.Si vous pensez qu'il reste quelque chose dans un chroot,
sudo ls -l /proc/*/root | grep chroot
trouvez le coupable (remplacez "chroot" par le chemin qui mène au chroot).la source
sudo ls -l /proc/*/status | grep HOST
où HOST est le nom d'hôte de la prisonlsof /mountpoint
et lesfuser /mountpoint
deux trouvent un processus même s’ils sont chrootés.Ouvrir des fichiers
Les processus avec des fichiers ouverts sont les coupables habituels. Les afficher:
Il y a un avantage à utiliser
/dev/<device>
plutôt que/mountpoint
: un point de montage disparaît après unumount -l
ou peut être caché par un montage superposé.fuser
peut également être utilisé, mais à mon avislsof
a une sortie plus utile. Cependant, ilfuser
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):Ne coupez interactivement que les processus dont les fichiers sont ouverts à l'écriture:
Après avoir remonté read-only (
mount -o remount,ro <mountpoint>
), il est prudent de tuer tous les processus restants: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 d'essayer
umount
pose problème. Vérifier avec:Pour les montages en boucle, vérifiez également la sortie de:
Inodes anonymes (Linux)
Les inodes anonymes peuvent être créés par:
open
avecO_TMPFILE
)Ce type de pokemon est le plus insaisissable et apparaît dans
lsof
laTYPE
colonne 's sous la formea_inode
(non documenté dans lalsof
page de manuel ).Ils n'apparaîtront pas dans
lsof +f -- /dev/<device>
, vous devrez donc:Pour plus d'informations sur les processus contenant des inodes anonymes, voir: Liste des surveillances inotify actuelles (nom du chemin, PID) .
la source
Pour que l’unité de fusion affiche les PID avec un montage ouvert, vous devez utiliser -m
la source
lsof /path
fournit la même liste de PID quefuser -m /path
.fuser -M /path
vérifiera s'il/path
s'agit d'un point de montage.Nous avons un système propriétaire où le système de fichiers racine est normalement en lecture seule. Parfois, lorsque des fichiers doivent être copiés, il est remonté en lecture-écriture:
Et ensuite remonté:
Cette fois cependant,
mount
continue à donner l'mount: / is busy
erreur. Cela était dû à un processus contenant un descripteur ouvert dans un fichier qui avait été remplacé par une commande exécutée lorsque le système de fichiers était en lecture-écriture. La ligne importante de lalsof -- /
sortie se trouve être (les noms ont été changés):Notez le
DEL
dans la sortie. Le simple redémarrage du processus en conservant le fichier supprimé a résolu le problème.la source
lsof
etfuser
ne m'a 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
/var/spool/postfix
vers/disk2/pers/mail/postfix/varspool
vers 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 de la
postfix
et desdovecot
services ( à la foisps aux
, ainsi quenetstat -tuanp
ne montrait rien lié) Je n'ai pas puunmount /disk2/pers
.Lorsque j'ai supprimé le lien symbolique et mis à jour les fichiers
postfix
etdovecot
config pour qu'ils pointent directement vers les nouveaux répertoires,/disk2/pers/
j'ai pu arrêter avec succès les services etunmount
le répertoire.La prochaine fois, je regarderai de plus près le résultat de:
La commande ci-dessus listera de manière récursive tous les liens symboliques dans une arborescence de répertoires (commençant ici à
/var
) et filtrera les noms qui pointent vers un point de montage cible spécifique (ici disk2).la source
J'avais ce problème et il s'est avéré qu'il y avait des sessions d'écran actives en arrière-plan que je ne connaissais pas. Je me suis connecté à l'autre session d'écran active et son shell n'était même pas encore dans le répertoire monté. Tuer ces autres sessions shell a résolu le problème pour moi.
Je pensais juste que je partagerais ma résolution.
la source
Aujourd'hui, le problème était une socket ouverte (spécifiquement
tmux
):la source
J'ai deux
bind
etoverlay
monte sous ma monture qui ont été me bloquer, vérifier l'achèvement onglet pour le point de montage que vous voulez démonter. Je soupçonne que c’est la monture en superposition en particulier, mais elle aurait aussi pu être liéela source
C'est plus une solution de contournement qu'une réponse, mais je la poste au cas où cela pourrait aider quelqu'un.
Dans mon cas, j'essayais de modifier LVM car je voulais agrandir la partition / var, donc je devais la démonter. J'ai essayé tous les commentés et répondu dans ce post (merci tout le monde et en particulier @ ole-tange pour les avoir rassemblés) et j'ai quand même eu l'erreur "device is busy".
J'ai aussi essayé de supprimer la plupart des processus dans l'ordre spécifié dans le niveau d'exécution 0, juste au cas où l'ordre serait pertinent dans mon cas, mais cela n'a pas aidé non plus. J'ai donc créé un niveau d'exécution personnalisé (combinant la sortie de chkconfig dans de nouvelles commandes chkconfig --level) qui serait très similaire à 1 (mode mono-utilisateur) mais avec des fonctionnalités réseau (avec ssh network et xinet).
Comme j'utilisais redhat, le niveau 4 est marqué "inutilisé / défini par l'utilisateur", donc je l'ai utilisé et je l'ai exécuté.
init 4
Dans mon cas, cela a été correct car je devais redémarrer le serveur dans tous les cas, mais ce sera probablement le cas. de quiconque tordre les disques.la source