Понимание поведения unshare CLONE_NEWNS - PullRequest
3 голосов
/ 07 июня 2011

Я написал небольшую программу на C, которая просто выполняет unhare (CLONE_NEWNS), за которой следует system ("bash").

Страница man говорит, что процесс должен иметь свое собственное пространство имен. Итак, в оболочке я попытался размонтировать / cgroup (cgroup смонтирован на исходном компьютере).

Когда я выполняю монтирование в оболочке на машине, / cgroup также отключается там. Я что-то здесь упускаю? Я думал, что CLONE_NEWNS должен был позволить мне отключить файловую систему от процесса, не затрагивая основную систему.

Ответы [ 4 ]

5 голосов
/ 08 июня 2011

(Кроме того, вам не нужно было писать программу - вы можете просто использовать утилиту unshare(1)).

Это - это , размонтирующее файловую систему только в новомпространства имен и оставляя его подключенным в оригинале - проблема в том, что mount использует /etc/mtab для создания списка монтируемых в данный момент файловых систем, и это просто обычный файл, который можно обновить командой mount в новомПространство имен.Это означает, что /etc/mtab не синхронизируется с тем, что происходит на самом деле (поскольку есть только одно /etc/mtab, но два пространства имен монтирования).

Вместо этого проверьте /proc/mounts, чтобы увидетьчто на самом деле смонтировано в текущем пространстве имен.

1 голос
/ 30 июня 2016

Почти наверняка это происходит из-за общих поддеревьев, где родительское монтирование / cgroup (т. Е. /) Помечается как «общее» монтирование, которое передает события монтирования и размонтирования его партнерам (другие экземпляры /)в других пространствах имен.Вы можете убедиться в этом, посмотрев состояние / mount в / proc / self / mountinfo.Это поведение, скорее всего, было установлено системой systemd, которая возвращает стандартное ядро ​​для монтирования «private» в «shared».Чтобы получить «личное» поведение, вам нужно сделать / личное, используя

mount --make-private /

См. Также https://bbs.archlinux.org/viewtopic.php?id=194388, а также https://lwn.net/Articles/689856/

0 голосов
/ 07 декабря 2015

UnShare работает в Fedora, а не в Ubuntu, и в то же время, если вы попробуете просто CLONE_NEWNS, он не может работать, кажется, UnShare не совсем так же, как прямой вызов

клон (child_main, child_stack +STACK_SIZE, CLONE_NEWUTS | CLONE_NEWPID | CLONE_NEWNS | SIGCHLD, NULL);

этот вызов, операции пространства имен можно увидеть из другого пространства имен

0 голосов
/ 05 августа 2013

Я провел тест с unshare на ядре fedora 19 3.10

unshare --mount / bin / bash

df -h / boot /

Используемый размер файловой системы ДоступенИспользование% Установлено на

/ dev / sda1 485M 238M 222M 52% / boot

umount / boot /

На второй оболочке

grep boot /proc / mounts

echo $?

1

Возможно, я что-то не так, но результат - то, что я ожидал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...