Pourquoi le paresseux MNT_DETACH ou `umount -l` est-il dangereux / dangereux?

10

J'ai lu à quelques endroits ce qui umount -ln'est pas sûr:

Dans une réponse de @cas :

n'utilisez pas umountl' --lazyoption de si vous vous souciez du moment où le lecteur externe peut être débranché en toute sécurité

Un commentaire de @frostschutz :

umount --lazyn'est pas sûr et ne peut pas être rendu sûr. [...]

Ce util-linux commentaire de Ruediger Meier :

Vous devez éviter d'utiliser umount -ldu tout. Il suffit de tuer tous les processus qui utilisent /tmp/mountpoint, puis de démonter sans option -l.

Pourquoi est umount -ldangereux / dangereux?

Existe-t-il un moyen de le rendre sûr?

Tom Hale
la source

Réponses:

12

Un démontage paresseux crée une monture pour chat Schrödinger

  • Vous ne pouvez pas savoir si l'appareil est réellement démonté ou non
  • Le système de fichiers "non monté" reste accessible dans certaines circonstances
  • Le système de fichiers "non monté" n'est pas accessible dans certaines circonstances

Il y a un faux sentiment de sécurité : il semble que le système de fichiers ait été démonté, mais en réalité il n'a été caché que dans l'espace de noms / hiérarchie des fichiers.

  • Les processus peuvent toujours écrire via des descripteurs de fichiers ouverts
  • Des fichiers nouveaux ou existants peuvent être ouverts pour l'écriture par des processus avec un répertoire de travail à l'intérieur du point de montage via des chemins d'accès relatifs

Cela signifie que si vous umount -l /media/hddne pourrez plus accéder à /media/hdd/dir/file(nom de chemin absolu) mais si vous avez un processus avec un répertoire de travail, /media/hddil pourra toujours créer de nouveaux processus pouvant lire / écrire ./dir/file(nom de chemin relatif).

Si vous essayez de démonter l'appareil, vous obtiendrez un message déroutant:

# umount --force --all-targets /dev/sdb2
umount: /dev/sdb2: not mounted

Cela donne l'impression que l'appareil n'a pas été compté, mais il peut toujours y avoir des processus d'écriture sur le disque.

Puisqu'il existe diverses situations non évidentes qui peuvent entraîner le blocage de umount , le système de fichiers peut ne pas être démonté même s'il lsof +f -- /dev/devicen'affiche rien.

Vous ne saurez jamais si le système de fichiers se démonte réellement. Il n'y a aucun moyen de le savoir.

Périphériques amovibles

Si vous faites umount -lun disque amovible, vous êtes dans les limbes: vous ne pouvez pas être sûr que toutes les données en attente ont été écrites sur le disque.

Le mieux que vous puissiez faire après un umount -lest de vous assurer que toutes les écritures sont terminées et d'empêcher toute écriture future , mais vous ne pouvez toujours pas garantir qu'elle a été démontée.

Avec les appareils amovibles, si l'appareil n'est pas correctement démonté, un comportement étrange peut se produire la prochaine fois qu'il est branché:

  • Le périphérique recevra un nom de périphérique incrémenté, c'est-à-dire /dev/sdbdevient /dev/sdc. Les messages du journal du noyau peuvent toujours faire référence /dev/sdbmême si ce périphérique n'existe plus en tant que fichier sous /dev. (La seule façon que je connais pour résoudre ce problème est de redémarrer.)

  • la corruption de btrfs peut en résulter. btrfs s'attend à ce qu'un seul système de fichiers avec un UUID donné soit présent à la fois. Le noyau voit toujours le même UUID disponible sur le périphérique fantôme et le nouveau périphérique. (J'ai dû reconstruire mon disque dur de sauvegarde btrfs).

systemd gotchas

Tom Hale
la source
"Des fichiers nouveaux ou existants peuvent être ouverts pour l'écriture par des processus avec un répertoire de travail à l'intérieur du point de montage via des chemins d'accès relatifs" C'est l'information que je cherchais. Avez-vous des liens ou références supplémentaires?
Jonathon Reinhart
@Jonathon check man umount. J'aurais besoin de google autrement. Veuillez publier vos résultats si vous le faites.
Tom Hale
J'ai lu umount(2)plusieurs fois récemment. Il indique uniquement "Effectuer un démontage paresseux: rendre le point de montage indisponible pour les nouveaux accès, déconnecter immédiatement le système de fichiers et tous les systèmes de fichiers montés en dessous les uns des autres et de la table de montage, et effectuer le démontage lorsque le point de montage cesse d'être occupé. . " Mais malheureusement, c'est même moins de détails que ce que vous avez fourni.
Jonathon Reinhart
umount(8)indique qu'un système de fichiers est occupé "par exemple, lorsqu'il contient des fichiers ouverts, ou lorsqu'un processus possède son répertoire de travail, ou lorsqu'un fichier d'échange est en cours d'utilisation". Cela ne ressemble pas à une liste définitive, mais est probablement aussi bon que je pourrai le trouver.
Jonathon Reinhart
J'ai développé un peu ce que vous avez dit et ajouté quelques autres exemples dans cette réponse . Merci pour l'information!
Jonathon Reinhart