Quando si entra in un chroot a volte è necessario montare /sys e /dev usando -rbind invece di -bind per assicurarsi che tutto sia al posto giusto quando qualcuno va a cercare.
Il problema arriva durante lo smontaggio.
Un semplice smontaggio fallisce sempre; anche con i bambini che vengono montati sembra essere in 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))
Un'altra possibile soluzione è elencare i mount da proc e smontarli in questo modo:
$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount
Tuttavia anche questo fallisce perché i mount ricorsivi non sono effettivamente registrati nella mtab:
/mnt/chroot/sys/kernel/security is not mounted (according to mtab)
Forse la soluzione è eseguire un pigro umount, ma questo mi sembra piuttosto pericoloso.
C'è un modo migliore per farlo che mi è sfuggito?
Risposta accettata:
Questo ha funzionato per me correttamente - https://unix.stackexchange.com/a/264488/4319:
mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test
Era importante avere i primi due comandi come due comandi separati:non combinare --rbind
e --make-rslave
in un'invocazione di mount.
Senza --make-rslave
, il comportamento è stato indesiderato (e non ha avuto successo):
umount -l
influenzerebbe anche i vecchi punti di montaggio originali,- e
umount -R
sarebbe influenzato dai file occupati (aperti) sotto i vecchi punti di montaggio originali. (Molto inaspettato...)