Странный вывод команды mount/findmnt из-под chroot-тюрьмы

Вопрос или проблема

На моей системе Linux я вошел в чroot-тюрьму с помощью chroot(1) и затем смонтировал экземпляр procfs на /proc оттуда.

Теперь, если я выполню cat /etc/mtab изнутри чroot-тюрьмы, он показывает полный список точек монтирования, как и снаружи чroot-тюрьмы. Согласно mount(8), он должен анализировать /etc/mtab (на моей системе /etc/mtab на самом деле является символической ссылкой на /proc/mounts).

Тем не менее, команда mount изнутри показывает только экземпляр procfs, смонтированный на /proc (на самом деле /carlo/carlo-ubuntu/proc снаружи чroot-тюрьмы).

[host:~]$ chroot /carlo/carlo-ubuntu /bin/bash
root@host:/#
root@host:/# ls -la /etc/mtab       
lrwxrwxrwx. 1 root root 12 Nov 20 11:00 /etc/mtab -> /proc/mounts
root@host:/#
root@host:/# ps
Ошибка, сделайте это: mount -t proc proc /proc
root@host:/# mount -t proc proc /proc
root@host:/# mount
proc on /proc type proc (rw,relatime)
root@host:/# 
root@host:/# findmnt 
TARGET
      SOURCE
           FSTYPE OPTIONS
/proc proc proc   rw,relatime
root@host:/# 
root@host:/# cat /etc/mtab 
rootfs / rootfs rw,seclabel 0 0
/proc /proc proc rw,relatime 0 0
none /sys sysfs rw,seclabel,relatime 0 0
none /dev devtmpfs rw,seclabel,relatime,size=9088036k,nr_inodes=2272009,mode=755 0 0
/dev/mapper/panini_vol_grp-host_lv0 / ext4 rw,seclabel,noatime,discard,i_version,data=ordered 0 0
securityfs /sys/kernel/security securityfs rw,relatime 0 0
run /run tmpfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
none /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /var/volatile tmpfs rw,seclabel,relatime 0 0
tmpfs /media/ram tmpfs rw,seclabel,relatime 0 0
none /dev/shm tmpfs rw,seclabel,relatime 0 0
tmpfs /tmp tmpfs rw,seclabel,relatime,size=65536k 0 0
none /dev/shm tmpfs rw,seclabel,relatime 0 0
proc /proc proc rw,relatime 0 0
root@host:/#

Ожидается ли такое поведение? Спасибо.

Ответ или решение

Необычное поведение команд mount/findmnt в окружении chroot

Введение

В последние годы использование chroot-окружений для изоляции процессов и тестирования приложений стало обычной практикой в мире Linux. Однако при работе с такими окружениями могут возникать неочевидные проблемы. Ваша ситуация, когда вы пытаетесь просмотреть точки монтирования с помощью команд mount и findmnt изнутри chroot, является отличным примером такого поведения.

Обзор проблемы

Как видно из вашего описания, после входа в chroot-окружение и монтирования файловой системы procfs на /proc, вы заметили, что команда cat /etc/mtab возвращает полный список точек монтирования, в то время как команды mount и findmnt выводят только информацию о монтированном procfs. Это может вызывать замешательство, особенно учитывая, что /etc/mtab является символической ссылкой на /proc/mounts на вашей системе.

Пояснение поведения команды mount/findmnt

Когда вы используете команду mount или findmnt в chroot, эти команды обращаются к информации о монтировании, схему и структуру, которые находятся в пространстве chroot. Однако, из-за особенностей реализации этих команд они могут не учитывать контекст chroot-окружения должным образом.

  1. Контекст chroot: Chroot создает новое окружение, которое имитирует корневую файловую систему. Все команды, исполняемые внутри chroot, работают в контексте этого нового корня. Это означает, что информация о монтировании, которая должна быть доступна, может быть ограниченной только элементами, которые были экспортированы в chroot.

  2. Файл /etc/mtab: На вашем хосте /etc/mtab является символической ссылкой на /proc/mounts. Этот файл используется для отображения текущих монтированных файловых систем. Однако внутри chroot эта символическая ссылка может вернуть вам информацию о точках монтирования, которые не актуальны для текущего окружения. Это происходит потому, что chroot не переносит всю информацию о монтировании из хост-системы.

  3. Команды mount и findmnt: Эти команды используют информацию о монтировании из пространств, которые им доступны. mount вернет только те точки монтирования, которые действительно видимы из текущего контекста. Но при этом команда cat /etc/mtab возвращает те значения, которые существуют в хост-системе, поскольку эта ссылка не разрешается в контексте chroot.

Ожидаемое поведение

Да, то, что вы наблюдаете, вполне ожидаемо. Это связано с особенностями работы самого контейнера chroot и тем, как команды mount и findmnt взаимодействуют с файловой системой. Несмотря на то что ввод команда cat /etc/mtab показывает полный список, важно понимать, что этот список не соответствует токенным точкам монтирования внутри вашего chroot.

Рекомендации

Если вам нужно работать с точками монтирования внутри chroot, вы можете:

  1. Создать отдельный /etc/mtab: Вы можете создать свой собственный файл /etc/mtab внутри окружения chroot, который будет содержать актуальную информацию о монтировании.

  2. Использовать команды с параметрами: Команды mount и findmnt могут иметь различные параметры и опции, которые могут облегчить извлечение необходимой информации.

  3. Изучите альтернативные методы: Рассмотрите возможность использования других инструментов для мониторинга и управления точками монтирования, если mount и findmnt не предоставляют нужной информации.

Заключение

Непредсказуемое поведение команд mount и findmnt в chroot окружении – это известная проблема, обусловленная особенностями работы файловых систем и контекстов выполнения. Понимание этих нюансов поможет вам избегать путаницы и эффективно использовать chroot в своих задачах. Надеюсь, эта информация была полезна для вас. Если есть дополнительные вопросы, обращайтесь, и я с радостью помогу!

Оцените материал
Добавить комментарий

Капча загружается...