Поэтому я пытаюсь понять, как работает пространство имен монтирования Linux. Итак, я провел небольшой эксперимент, открыл два терминала и запустил следующее:
Терминал 1
root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt
Терминал 2
root@goliath:~# ls b
foo.txt
Как получилось, что гора видна в Терминале 2? Так как он не является частью пространства имен mount, я ожидал, что каталог здесь будет пустым. Я также пытался передать -o shared=no
и использовать --make-private
параметры с mount
, но я получил тот же результат.
Что мне не хватает и как я могу сделать это на самом деле частным?
linux
namespace
bind-mount
Фатальная ошибка
источник
источник
man mount
.--make-private
это не то, что я хочу. Но разве это не точка пространства монтирования (что они не являются системными)?Ответы:
Если вы используете системный дистрибутив с
util-linux
версией ниже 2.27, вы увидите это не интуитивное поведение. Это связано с тем, чтоCLONE_NEWNS
такие флаги распространяются вshared
зависимости от настроек ядра. Этот параметр обычноprivate
, но systemd меняет его наshared
. Начиная сutil-linux
2.27, было сделано исправление, которое изменяет поведениеunshare
команды поprivate
умолчанию, которое будет использоваться в качестве поведения распространения по умолчанию, чтобы сделать его более интуитивным.Решение
Если вы находитесь в системе systemd с <2.27
util-linux
, вы должны перемонтировать корневую файловую систему после выполненияunshare
команды:Если вы работаете в системе systemd с> = 2.27
util-linux
, она должна работать как положено в примере, который вы дали в своем вопросе, дословно, без необходимости перемонтирования. Если нет: перейти--propagation private
кunshare
команде , чтобы заставить размножить смонтировать имена быть частными.источник
это не сработало в Ubuntu, (15.04 и 14.04). это работало на федоре. и для fedora. нужен ли вам --make-private или нет, вы также можете проверить
если он используется совместно, это означает, что какое-то другое пространство имен все еще может видеть, что монтируется Тогда это системная проблема. Вы можете использовать --make-private, чтобы заставить его работать
источник