Při zadávání chrootu je někdy nutné připojit /sys a /dev pomocí -rbind místo -bind, aby bylo zajištěno, že je vše na správném místě, když se někdo bude dívat.
Problém nastává při odpojování.
Jednoduché umount vždy selže; s připojenými dětmi se zdá, že se používá:
$ 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))
Dalším možným řešením je vypsat seznam připojení z proc a odpojit každé z nich takto:
$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount
To se však také nezdaří, protože rekurzivní připojení nejsou ve skutečnosti registrována v mtab:
/mnt/chroot/sys/kernel/security is not mounted (according to mtab)
Možná je řešením provést líné umountování, ale to se mi zdá docela nebezpečné.
Existuje lepší způsob, jak to udělat, který mi unikal?
Přijatá odpověď:
Toto fungovalo pro mě správně - https://unix.stackexchange.com/a/264488/4319:
mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test
Bylo důležité mít dva první příkazy jako dva samostatné příkazy:nekombinovat --rbind
a --make-rslave
v jednom vyvolání mount.
Bez --make-rslave
, chování bylo nežádoucí (a nebylo úspěšné):
umount -l
by ovlivnilo i původní staré přípojné body,- a
umount -R
by bylo ovlivněno zaneprázdněnými (otevřenými) soubory pod původními starými přípojnými body. (Velmi nečekané…)