Вопрос или проблема
как “ip netns add”, это монтирует файл “/proc/*/ns/net” куда-то еще, когда нужно использовать сетевое пространство имен, вы можете использовать смонтированный файл, но когда монтируете с помощью –bind файл пространства имен mnt, это сообщает об этом
# mount --bind /proc/5656/ns/mnt test
mount: неверный тип файловой системы, неправильный параметр, неправильный суперблок на /proc/5656/ns/mnt,
отсутствует кодовая страница или вспомогальная программа, или другая ошибка
В некоторых случаях полезная информация находится в syslog - попробуйте
dmesg | tail или подобное.
есть ли способ смонтировать файл /proc/*/ns/mnt или какой-либо другой способ сохранить пространство имен mnt
решение
после того как я задал этот вопрос, я нашел этот вопрос привязанные монтирования удаляются вместе с сетевыми пространствами имен?, это помогло мне придумать решение
# mkdir /run/mntns \
&& mount --bind --make-private /run/mntns /run/mntns
# touch /run/mntns/persistent-namespace \
&& mount --bind /proc/5656/ns/mnt /run/mntns/persistent-namespace
монтаж прошел успешно, и я могу использовать пространство имен mnt через файл “/run/mntns/persistent-namespace”.
но есть еще кое-что, что я не понимаю:
- почему это сработало после “mount –bind –make-private”;
- почему я не могу смонтировать pid 1 (/usr/lib/systemd/systemd);
Ответ или решение
Способы сохранения пространства имен монтирования в Linux
Вопрос о том, возможно ли сохранить пространство имен монтирования (mnt namespace) в Linux, является актуальным для системных администраторов и разработчиков, работающих с контейнерами и виртуализацией. Основная проблема заключается в том, что пространство имен монтирования нельзя смонтировать напрямую из /proc/*/ns/mnt
, как это делается с сетевыми пространствами имен. Это приводит к ошибкам, таким как:
# mount --bind /proc/5656/ns/mnt test
mount: wrong fs type, bad option, bad superblock on /proc/5656/ns/mnt,
missing codepage or helper program, or other error
К счастью, вы нашли рабочее решение, которое включает создание специальной директории и использование механизма привязки:
# mkdir /run/mntns \
&& mount --bind --make-private /run/mntns
# touch /run/mntns/persistent-namespace \
&& mount --bind /proc/5656/ns/mnt /run/mntns/persistent-namespace
Такой подход действительно позволяет сохранить пространство имен монтирования и использовать его через файл /run/mntns/persistent-namespace
.
Ответы на ваши вопросы
-
Почему это работает после
mount --bind --make-private
?Опция
--make-private
обозначает, что точка монтирования обладает приватной семантикой. В этом контексте это значит, что изменения в пространстве имен (например, изменения в связанных монтированиях) не будут распространяться на другие пространства имен. Это позволяет гарантировать, что ваше новое пространство имен монтирования будет независимым и персистентным, что важно для нормальной работы с изолированными пространствами. Когда вы монтируете пространство имен в приватную точку монтирования, оно сохраняет свою целостность и не подвержено удалению при изменениях в других пространствах имен. -
Почему нельзя монтировать привязку PID 1 (например,
/usr/lib/systemd/systemd
)?Основной причиной является то, что процесс с PID 1 в Linux (обычно это
systemd
или другой инициализационный процесс) контролирует состояние системы и ее ресурсов. Он работает в своей собственной изолированной среде, и любые попытки изменения пространства имен (включая операцию монтирования) могут привести к нестабильности системы или конфликтам. Кроме того, пространство имен монтирования привязано к другим ресурсам, и эти операции могут быть защищены от изменений для предотвращения потенциальных сбоев.
Заключение
Таким образом, для успешного сохранения пространства имен монтирования в Linux необходимо использовать комбинацию команд для создания приватных точек монтирования и правильного связывания с монтированием пространства имен. Это позволяет эффективно управлять изолированными средами и поддерживать стабильность системы.
Если у вас есть дополнительные вопросы или потребности в углубленных технологиях управления пространством имен в Linux, не стесняйтесь их задавать!