Umount un périphérique occupé

J'ai quelques disques samba auxquels plusieurs utilisateurs accèdent quotidiennement. 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 prenant efficacement hors ligne) Comment, ou même est-il possible de monter un périphérique occupé? Jusqu'à présent, j'ai trouvé que toute forme de umount ne fonctionne pas.

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

123
demandé sur vaxquis 2011-10-24 20:22:29

7 réponses

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

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

REMARQUE:

  1. Ces commandes peuvent perturber un processus en cours d'exécution, causer la perte de données ou corrompre les fichiers ouverts. Les programmes accédant aux fichiers du périphérique cible / NFS peuvent lancer des erreurs ou ne pouvait pas fonctionner correctement après force démonter.

  2. Essayez d'exécuter ces commandes LORSQU'elles ne sont pas à l'intérieur monté dossier / lecteur / dispositif.

256
répondu Amit Verma 2018-05-12 18:03:46

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


  • lsof | grep '/dev/sda1' (ou quel que soit le périphérique monté est de processus cible)

  • pkill target_process (tue occupé proc. par nom| kill PID | killall target_process)

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


56
répondu Frank Tudor 2016-09-12 13:50:38

Essayez ce qui suit, mais avant de l'exécuter Notez que l'indicateur -k va tuer tous les processus en cours d'exécution gardant le périphérique occupé.

Le Drapeau -i fait fuser Demander avant de tuer.

fuser -kim /address  # kill any processes accessing file
unmount /address
28
répondu user3751769 2016-08-24 17:14:19

Assurez-vous que vous n'êtes pas encore dans le périphérique monté lorsque vous essayez de monter.

21
répondu Luci 2017-04-28 19:05:42

Découvrez umount2:

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

MNT_FORCE (depuis Linux 2.1.116) Force le démontage même s'il est occupé. (Uniquement pour les Supports NFS.) MNT_DETACH (depuis Linux 2.4.11) effectuer un démontage paresseux: rendre le point de montage indisponible pour les nouveaux accès, et effectuer le démontage lorsque le point de montage cesse d'être occuper. MNT_EXPIRER (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 ceci drapeau échoue avec L'erreur EAGAIN, mais marque le point de montage comme expirer. Le point de montage reste expiré tant qu'il n'est pas accessible par un procédé quelconque. Un deuxième appel umount2 () spécifiant mnt_expire unmounts un point de montage expiré. Cet indicateur ne peut pas être spécifié avec MNT_FORCE ou MNT_DETACH. Valeur De Retour

Sur succès, Zéro est retourné. En cas d'erreur, -1 est renvoyé, et errno est réglé de manière appropriée.

6
répondu chown 2011-10-24 16:26:42

Vérifiez les systèmes de fichiers NFS exportés avec exportfs-v. Si trouvé, supprimez avec exportfs - d share: / directory. Ceux-ci n'apparaissent pas dans la liste fuser/lsof, et peuvent empêcher umount de réussir.

6
répondu numberer6 2014-04-20 15:02:16

Une autre alternative quand quelque chose fonctionne est d'éditer /etc/fstab, d'ajouter noauto drapeau et de redémarrer la machine. L'appareil ne sera pas monté, et lorsque vous avez terminé de faire quoi que ce soit, retirez le drapeau et redémarrez à nouveau.

0
répondu jesjimher 2018-05-31 07:55:04