web-dev-qa-db-fra.com

Umount un appareil occupé

Certains lecteurs de samba sont utilisés quotidiennement par plusieurs utilisateurs. J'ai déjà du code pour reconnaître les lecteurs partagés (à partir d'une table SQL) et les monter dans un répertoire spécial où tous les utilisateurs peuvent y accéder. 

Je veux savoir, si je supprime un lecteur de ma table SQL (le mettant effectivement hors ligne), comment ou même existe-t-il un moyen de supprimer un périphérique occupé? Jusqu'ici, j'ai constaté que toute forme d'umount ne fonctionnait pas. 

Ignorer la possibilité de détruire des données - est-il possible de démonter un périphérique en cours de lecture? 

145
Max

OUI!! Il existe un moyen de détacher immédiatement un périphérique occupé (même s'il est occupé et ne peut pas être démonté de force). Vous pouvez nettoyer tout plus tard:

umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS(NETWORK-FILE-SYSTEM)

REMARQUE:

  1. Ces commandes peuvent perturber le processus en cours et entraîner la perte de données OR, corrompant les fichiers ouverts. Les programmes accédant aux fichiers DEVICE/NFS cibles risquent de générer des erreurs OR pourraient ne pas fonctionner correctement après le démontage forcé.
  2. Essayez d'exécuter ces commandes lorsque vous n'êtes PAS dans le dossier/lecteur/périphérique monté.
308
Amit Verma

Si possible, localisons/identifions le processus occupé, supprimons le processus puis démontons le partage Samba pour minimiser les dommages.

  • lsof | grep '<mountpoint of /dev/sda1>' (ou quel que soit le périphérique monté)

  • pkill target_process (tue le proc occupé par son nom | kill PID | killall target_process

  • umount /dev/sda1 (ou quel que soit le périphérique monté)

63
Frank Tudor

Assurez-vous de ne pas rester dans le périphérique monté lorsque vous essayez de démonter.

36
Luci

Essayez ce qui suit, mais avant de l’exécuter notez que l’indicateur -k va tuer tous les processus en cours en maintenant le périphérique occupé.

Le drapeau -i permet à fuser de demander avant de tuer.

fuser -kim /address  # kill any processes accessing file
unmount /address
32
user3751769

Recherchez les systèmes de fichiers NFS exportés avec exportfs -v. Si trouvé, supprimez-le avec le partage exportfs -d:/directory. Celles-ci ne figurent pas dans la liste fuser/lsof et peuvent empêcher umount de réussir.

6
numberer6

Départ umount2 :

Linux 2.1.116 a ajouté l'appel système umount2 (), qui, comme umount (), démonte une cible, mais autorise des indicateurs supplémentaires contrôlant le fichier comportement de l'opération:

MNT_FORCE (depuis Linux 2.1.116) Forcer le démontage même s'il est occupé. (Seulement pour les montages NFS.) MNT_DETACH (depuis Linux 2.4.11) Effectuez un démontage paresseux: rendre le point de montage indisponible pour les nouveaux accès, et en réalité effectuez le démontage lorsque le point de montage cesse d'être occupé. MNT_EXPIRE (depuis Linux 2.6.8) Marquez le point de montage comme expiré. Si un point de montage n'est pas actuellement utilisé, puis un appel initial à umount2 () avec cela flag échoue avec l'erreur EAGAIN, mais marque le point de montage en tant que expiré. Le point de montage reste expiré tant qu'il n'est pas utilisé par n'importe quel processus. Un deuxième appel umount2 () spécifiant que MNT_EXPIRE doit être démonté un point de montage expiré. Cet indicateur ne peut pas être spécifié avec MNT_FORCE ou MNT_DETACH. Valeur de retour

En cas de succès, zéro est renvoyé. En cas d'erreur, -1 est renvoyé et errno contient le code d'erreur définir correctement.

6
chown

Une autre alternative lorsque quelque chose fonctionne est l'édition de /etc/fstab, l'ajout de l'indicateur noauto et le redémarrage de l'ordinateur. Le périphérique ne sera pas monté et lorsque vous aurez terminé, enlevez l'indicateur et redémarrez à nouveau.

0
jesjimher