Lors de la saisie d'un chroot, il est parfois nécessaire de monter /sys et /dev en utilisant -rbind au lieu de -bind afin de s'assurer que tout est au bon endroit quand quelqu'un va chercher.
Le problème survient lors du démontage.
Un démontage simple échoue toujours; avec les enfants montés également, il semble être utilisé :
$ umount /mnt/chroot/sys
umount: /mnt/chroot/sys: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
Une autre solution possible consiste à répertorier les montages de proc et à démonter chacun d'entre eux comme suit :
$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount
Cependant, cela échoue également car les montages récursifs ne sont pas réellement enregistrés dans le mtab :
/mnt/chroot/sys/kernel/security is not mounted (according to mtab)
Peut-être que la solution est d'effectuer un démontage paresseux, mais cela me semble assez dangereux.
Y a-t-il une meilleure façon de faire que j'ai manqué ?
Réponse acceptée :
Cela a fonctionné correctement pour moi - https://unix.stackexchange.com/a/264488/4319 :
mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test
Il était important d'avoir les deux premières commandes comme deux commandes distinctes :ne pas combiner --rbind
et --make-rslave
en une seule invocation de mount.
Sans --make-rslave
, le comportement était indésirable (et n'a pas réussi) :
umount -l
affecterait également les anciens points de montage d'origine,- et
umount -R
serait affecté par les fichiers occupés (ouverts) sous les anciens points de montage d'origine. (Très inattendu…)