Comment forcer vraiment le démontage d'un système de fichiers (sans enquête manuelle, pourquoi est-il occupé)

13

Comment démonter un système de fichiers sous Linux sans chercher pourquoi il est occupé?

Je veux le faire en une seule commande. Il doit gérer les applications utilisant ce système de fichiers, les sous-montages, les conteneurs ( lxc-execute -n qqq <command>) et toutes autres choses.

Juste "démonter. Aucune objection!". Les correctifs ou configurations spéciaux du noyau sont autorisés.

Le système de fichiers devrait être vraiment démonté, ce umount -ln'est donc certainement pas une option. Par exemple, pour cryptsetup remove(BTW comment forcer cryptsetup remove? Mettre à jour:, cryptsetup luksSuspend mais vous ne pourrez pas cryptsetup luksResumesi ce n'est pas LUKS).

Comment rendre invalides tous les descripteurs de fichiers sur ce système de fichiers?

Le seul moyen fiable que je connaisse est de monter le système de fichiers via le FUSE (il n'y a généralement pas de problème pour démonter le FUSE car je peux simplement tuer son processus).

PS Déjà montage savoir fuser, lsof | grep, cat /proc/*/mounts | grepet non-travail "patch badfs" obsolète.

Vi.
la source

Réponses:

3

Utilisez le combo de touches Magic SysRq : Alt+ SysRq+u

Notez que vous devriez probablement faire une synchronisation d'urgence en premier: Alt+ SysRq+s

Notez également que sur certains claviers (en particulier les plus récents), vous devez utiliser PrtScplutôt queSysRq

sml
la source
La touche Maj n'est pas nécessaire, juste la touche Alt + SysRq +. Une autre chose à noter (en particulier pour les utilisateurs d'ordinateurs portables) est que vous pouvez appuyer sur Alt, appuyer et relâcher SysRq, puis appuyer et relâcher la lettre / chiffre et enfin relâcher Alt. Plus important encore, cela remonte tous les systèmes de fichiers en lecture seule, c'est donc une dernière chose avant de redémarrer de force, pas une façon générale de remonter les systèmes de fichiers en lecture seule.
Gilles 'SO- arrête d'être méchant'
@Gilles: merci pour le conseil sur la touche Maj. J'ai corrigé mes instructions.
sml
1. Il ne remonte qu'en lecture seule. Ce n'est pas ce que l'on voulait. Par exemple, je veux le démonter et le remonter à l'aide de FUSE. 2. La mauvaise chose est que j'ai besoin de "-o remonter, rw" le système de fichiers racine et d'autres après pour retourner au travail normal.
Vi.
3

umount --forceou umount -f(équivalent)

Si cela échoue, utilisez:

umount --lazyou umount --l(équivalent)

L' option " paresseux " va "détacher le système de fichiers de la hiérarchie du système de fichiers maintenant et nettoyer toutes les références au système de fichiers dès qu'il n'est plus occupé. (Nécessite le noyau 2.4.11 ou une version ultérieure.)" Cela peut provoquer une instabilité, mais il obtiendra la chose démontée. Tous les programmes utilisant le lecteur peuvent se bloquer.

Freedom_Ben
la source
Bien sûr, --forcecela ne fonctionne pas. Et ce --lazyn'est pas un vrai démontage - il ne libère pas de choses LVM, de bouclage ou de cryptage.
Vi.
1
umount -f

peut être utilisé pour forcer un démontage lorsque le système de fichiers est occupé.

semblable à la chaux
la source
1
Cela n'a jamais fonctionné pour moi: umount2: Device or resource busyle seul succès partiel a été lorsque j'ai expérimenté avec le patch badfs.
Vi.
J'ai eu le même message "d'erreur", mais cela fonctionnait néanmoins. Le système de fichiers a été démonté après le umount -f
IanH
3
Essayez "umount paresseux", umount -l. Il démonte toujours mais pourrait produire un système de fichiers instable.
Jimmy Hedman
Je pense que le commentaire de Jimmy sur cette réponse est en fait la meilleure option. Il est vrai qu'un démontage "paresseux" peut provoquer une instabilité, mais on suppose que vous êtes déjà dans un état instable si vous devez forcer le démontage du système de fichiers. À cette fin, pourquoi «-l» n'est pas une option?
deesto
@deesto, Lazy unmount ne fait pas référence au périphérique de bloc indéfectible (volume LVM, conteneur LUKS, bouclage).
Vi.
1

Je crains qu'il n'y ait aucun moyen de le faire sur une seule commande. umount -fne fonctionne vraiment pas aussi bien qu'on pourrait l'espérer. S'il y a des sous-montages sous une autre monture, vous ne pouvez pas simplement démonter ces montures dans un ordre aléatoire et espérer qu'elles disparaissent.

Mais pas de soucis, il y a un moyen de faire de tout cela une seule commande: créer un script shell / Perl qui tue les processus souhaités, démonte les conteneurs, les sous-montages et finalement démonte un autre montage. Ensuite, vous pouvez simplement appeler votre script à la demande. Au départ, c'est plus de travail pour vous, mais une fois que le script fonctionne, tout est un jeu d'enfant. :)

Janne Pikkarainen
la source
1
Ce sont des cas où je ne peux pas démonter même manuellement: 1. les processus de veille sans interruption qui ne peuvent pas être repris (pilotes en panne, etc.) 2. Le stockage a échoué (qui bloque également chaque demande). Je veux que ce "démontage sale" gère cela.
Vi.