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/hdd
ne 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/hdd
il 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/device
n'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 -l
un 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 -l
est 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/sdb
devient /dev/sdc
. Les messages du journal du noyau peuvent toujours faire référence /dev/sdb
mê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
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.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.