Вопрос или проблема
На моей системе 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-окружения должным образом.
-
Контекст chroot: Chroot создает новое окружение, которое имитирует корневую файловую систему. Все команды, исполняемые внутри chroot, работают в контексте этого нового корня. Это означает, что информация о монтировании, которая должна быть доступна, может быть ограниченной только элементами, которые были экспортированы в chroot.
-
Файл /etc/mtab: На вашем хосте
/etc/mtab
является символической ссылкой на/proc/mounts
. Этот файл используется для отображения текущих монтированных файловых систем. Однако внутри chroot эта символическая ссылка может вернуть вам информацию о точках монтирования, которые не актуальны для текущего окружения. Это происходит потому, что chroot не переносит всю информацию о монтировании из хост-системы. -
Команды mount и findmnt: Эти команды используют информацию о монтировании из пространств, которые им доступны.
mount
вернет только те точки монтирования, которые действительно видимы из текущего контекста. Но при этом командаcat /etc/mtab
возвращает те значения, которые существуют в хост-системе, поскольку эта ссылка не разрешается в контексте chroot.
Ожидаемое поведение
Да, то, что вы наблюдаете, вполне ожидаемо. Это связано с особенностями работы самого контейнера chroot и тем, как команды mount
и findmnt
взаимодействуют с файловой системой. Несмотря на то что ввод команда cat /etc/mtab
показывает полный список, важно понимать, что этот список не соответствует токенным точкам монтирования внутри вашего chroot.
Рекомендации
Если вам нужно работать с точками монтирования внутри chroot, вы можете:
-
Создать отдельный /etc/mtab: Вы можете создать свой собственный файл
/etc/mtab
внутри окружения chroot, который будет содержать актуальную информацию о монтировании. -
Использовать команды с параметрами: Команды
mount
иfindmnt
могут иметь различные параметры и опции, которые могут облегчить извлечение необходимой информации. -
Изучите альтернативные методы: Рассмотрите возможность использования других инструментов для мониторинга и управления точками монтирования, если
mount
иfindmnt
не предоставляют нужной информации.
Заключение
Непредсказуемое поведение команд mount
и findmnt
в chroot окружении – это известная проблема, обусловленная особенностями работы файловых систем и контекстов выполнения. Понимание этих нюансов поможет вам избегать путаницы и эффективно использовать chroot в своих задачах. Надеюсь, эта информация была полезна для вас. Если есть дополнительные вопросы, обращайтесь, и я с радостью помогу!