Al ingresar a un chroot, a veces es necesario montar /sys y /dev usando -rbind en lugar de -bind para asegurarse de que todo esté en su lugar correcto cuando alguien busque.
El problema viene al desmontar.
Un desmontaje simple siempre falla; con los niños montados también parece estar en uso:
$ 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))
Otra posible solución es enumerar los montajes de proc y desmontar cada uno de ellos así:
$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount
Sin embargo, esto también falla porque los montajes recursivos no están realmente registrados en la mtab:
/mnt/chroot/sys/kernel/security is not mounted (according to mtab)
Tal vez la solución sea realizar un desmontaje perezoso, pero esto me parece bastante peligroso.
¿Hay una mejor manera de hacer esto que me he perdido?
Respuesta aceptada:
Esto me funcionó correctamente:https://unix.stackexchange.com/a/264488/4319:
mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test
Era importante tener los dos primeros comandos como dos comandos separados:no combinar --rbind
y --make-rslave
en una invocación de monte.
Sin --make-rslave
, el comportamiento no fue deseado (y no tuvo éxito):
umount -l
también afectaría a los puntos de montaje antiguos originales,- y
umount -R
se vería afectado por los archivos ocupados (abiertos) en los puntos de montaje antiguos originales. (Muy inesperado...)