Beim Betreten einer Chroot ist es manchmal notwendig, /sys und /dev mit -rbind statt -bind zu mounten, um sicherzustellen, dass alles am richtigen Platz ist, wenn jemand nachschaut.
Das Problem tritt beim Unmounten auf.
Ein einfaches umount schlägt immer fehl; mit den Kindern, die auch montiert sind, scheint es in Gebrauch zu sein:
$ 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))
Eine andere mögliche Lösung besteht darin, die Mounts von proc aufzulisten und diese wie folgt zu unmounten:
$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount
Dies schlägt jedoch ebenfalls fehl, da die rekursiven Mounts nicht wirklich in der mtab registriert sind:
/mnt/chroot/sys/kernel/security is not mounted (according to mtab)
Vielleicht ist die Lösung, einen lazy umount durchzuführen, aber das scheint mir ziemlich gefährlich zu sein.
Gibt es dafür einen besseren Weg, den ich übersehen habe?
Akzeptierte Antwort:
Das hat bei mir richtig funktioniert – https://unix.stackexchange.com/a/264488/4319:
mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test
Es war wichtig, die beiden ersten Befehle als zwei separate Befehle zu verwenden:Kombinieren Sie nicht --rbind
und --make-rslave
in einem Aufruf von mount.
Ohne --make-rslave
, das Verhalten war unerwünscht (und nicht erfolgreich):
umount -l
würde sich auch auf die ursprünglichen alten Einhängepunkte auswirken- und
umount -R
von den ausgelasteten (offenen) Dateien unter den ursprünglichen alten Einhängepunkten betroffen wäre. (Sehr unerwartet…)