Как запускать несколько дистрибутивов Linux без виртуализации с помощью chroot
Коротко: что такое chroot
chroot (change root) — системная операция, которая меняет видимый для процесса корневой каталог на указанный каталог. Процесс и его потомки «видят» только файлы внутри этой директории, как если бы это была вся файловая система. Это не создаёт отдельное ядро или отдельный init-процесс — только отдельное файловое пространство.
Определение в одну строку: chroot — локальная изоляция файловой системы без запуска отдельного ядра.
Важно: chroot не заменяет виртуальную машину и не обеспечивает полноценную безопасность — процессы с правами root внутри chroot всё ещё могут воздействовать на хост при наличии соответствующих устройств или привязок.
Как это работает — развёрнутый обзор
Когда Linux загружается, загрузчик (GRUB) загружает ядро и монтирует корневой раздел, после чего запускается init. Обычная система работает «из» своего корневого раздела. chroot не запускает новый загрузочный цикл. Мы говорим хосту «воспринимай эту директорию как /» и запускаем в ней оболочку или отдельные процессы. Эти процессы используют уже загруженное ядро хоста, но все пути к бинарникам, библиотекам и конфигурации берутся из дерева файлов внутри chroot.
Пример файловой структуры до chroot:

После chroot указанная директория выглядит как корень для запущенных там процессов:

Если внутри chroot набрать ls или firefox, система попытается выполнить бинарники, найденные внутри этого корневого дерева — не те, что из хоста.
Пример: скачивание и запуск базовой файловой системы Gentoo
Ниже — минимальный пример создания директории и связывания её с chroot. В примере используется tarball с базовой системой Gentoo (stage3). В реальной работе вы можете использовать debootstrap для Debian-подобных систем или распаковку любого tarball с базовой FS.
mkdir /mnt/guest
cd /mnt/guest
wget http://distfiles.gentoo.org/releases/x86/2008.0/stages/stage3-x86-2008.0.tar.bz2
tar -jxvf stage3-x86-2008.0.tar.bz2
chroot /mnt/guestЭти строки делают по порядку:
- Создают директорию для гостя.
- Переходят в неё.
- Скачивают tarball с базовой системой Gentoo.
- Распаковывают его.
- Запускают chroot, после чего указанная директория воспринимается как / внутри новой оболочки.
После chroot prompt и содержимое файловой системы будут браться из распакованной Gentoo-сущности:

На скриншоте видно, что оболочка берёт настройки (включая PS1) изнутри chroot — для неё это и правда корень.
Практические шаги для разумного chroot — подготовка
Перед выполнением chroot обычно полезно сделать несколько дополнительных шагов — это расширит возможности гостевой среды и снизит риск ошибок:
- Создайте директорию и распакуйте в неё базовую систему.
- Смонтируйте необходимые pseudo-файловые системы:
mount --bind /dev /mnt/guest/dev
mount --bind /dev/pts /mnt/guest/dev/pts
mount -t proc /proc /mnt/guest/proc
mount -t sysfs /sys /mnt/guest/sys
cp /etc/resolv.conf /mnt/guest/etc/resolv.conf- При необходимости перенесите некоторые устройства или сокеты (например, /run или /var/run):
mount --bind /run /mnt/guest/run- Запустите chroot и проверьте окружение:
chroot /mnt/guest /bin/bash --login
# затем проверяем
mount | grep proc
cat /etc/os-release
uname -a # будет ядро хостаПримечание: предоставление доступа к /dev и /run делает chroot более функциональным (например, для apt, emerge, systemctl внутри chroot), но повышает степень интеграции с хостом.
Как корректно выйти и очистить
Чтобы выйти из chroot, выполните exit или Ctrl-D в оболочке, затем размонтируйте ранее смонтированные pseudo- и bind-файловые системы. Пример:
exit
umount /mnt/guest/dev/pts
umount /mnt/guest/dev
umount /mnt/guest/proc
umount /mnt/guest/sys
umount /mnt/guest/runЕсли некоторые монтирования заняты, используйте lazy-umount:
umount -l /mnt/guest/devКогда chroot недостаточно: ограничения и случаи отказа
- chroot не запускает отдельное ядро: если гость требует специфичного ядра (модули, параметры или версии), он может не работать.
- Нет полноценной безопасности: root в chroot при наличии /dev или привязанных точек может получить доступ к хосту.
- Системы, завязанные на systemd в собственном PID 1, могут некорректно работать внутри простого chroot.
- Разные архитектуры: чтобы запускать бинарники другой архитектуры (arm на x86), потребуется qemu-user-static и соответствующие бинэты.
Пример, когда chroot не подходит: вы хотите полностью эмулировать отдельную сеть и ядро с иными параметрами — здесь нужна виртуализация или контейнеризация.
Альтернативы и сравнения
- Контейнеры (Docker, LXC): дают лёгкую изоляцию процессов и сети, но требуют настроек cgroups и namespace; лучше подходят для продакшн-окружений.
- Виртуальные машины (KVM, VirtualBox): предоставляют отдельное ядро, изолированную сеть и устройства, но с накладными расходами на производительность.
- chroot: быстрее и проще для восстановления, тестов и работы с другой системой на том же железе.
Ментальная модель: chroot = «сменить видимые файлы», контейнер = «изолировать процессы и сеть», виртуальная машина = «имитировать новое устройство с собственным ядром».
Типичные сценарии применения
- Тестирование сборки пакетов и окружений в «чистой» FS без влияния локальной конфигурации.
- Запуск пакетов, собранных для другой дистрибуции.
- Восстановление системы с Live CD (см. SOP ниже).
- Доступ к файловой системе другого раздела, когда не хочется перезагружать ОС.
- Запуск 32-битных приложений в 64-битной системе (при наличии нужных библиотек).
SOP: восстановление загрузчика и системы с Live CD
Ниже — упрощённый пошаговый план восстановления Debian/Ubuntu-подобной системы из Live CD.
- Загрузитесь с Live CD/USB и откройте терминал.
- Найдите корневой раздел целевой системы (например /dev/sda1):
lsblk- Смонтируйте раздел и необходимые pseudo-файлы:
sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount -t proc /proc /mnt/proc
sudo mount -t sysfs /sys /mnt/sys
sudo cp /etc/resolv.conf /mnt/etc/resolv.conf- Войдите в chroot и выполните восстановление GRUB:
sudo chroot /mnt /bin/bash
grub-install /dev/sda
update-grub
exit- Отмонтируйте и перезагрузите:
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt
sudo rebootЭта последовательность часто помогает восстановить загрузчик и исправить конфигурацию без полной переустановки.
Чек-листы по ролям
Для системного администратора:
- Сделать бэкап важных данных с хоста.
- Убедиться, что есть свободное место для распаковки FS гостя.
- Смонтировать /proc, /sys, /dev с bind, если нужен доступ к устройствам.
- Проверить /etc/resolv.conf внутри chroot для доступа в интернет.
- После работы корректно отмонтировать все bind и pseudo FS.
Для разработчика:
- Подготовить чистую базовую файловую систему (stage/debootstrap).
- Установить необходимые инструменты (gcc, make) внутри chroot.
- Настроить сетевые настройки и прокси, если требуется.
- Тестировать сборку и зависимости без вмешательства хоста.
Для восстановления:
- Идентифицировать разделы целевой системы.
- Смонтировать и подготовить окружение как в SOP.
- Восстановить grub и initramfs по необходимости.
Критерии приёмки
- После chroot успешный запуск bash и чтение /etc/os-release внутри гостя.
- uname -a показывает ядро хоста (что ожидаемо).
- Пакетный менеджер внутри chroot может обновлять метаданные (при наличии сети).
- После выхода все bind-монтирования размонтированы без ошибок.
Отладка и типичные ошибки
- Ошибка «No such file or directory» при запуске бинарника — проверьте, что бинарник существует и что у него правильные динамические библиотеки (ldd).
- Если внутри chroot нет сети — убедитесь, что вы скопировали /etc/resolv.conf или настроили соответствующие сетевые настройки.
- Если systemctl падает — systemd ожидает быть PID 1; в chroot systemd в большинстве случаев не будет работать как в полноценно поднятой системе.
Безопасность и приватность
- chroot не даёт безопасности уровня контейнера/VM. Не доверьте chroot подозрительному коду от неизвестных источников.
- Всегда проверяйте, какие каталоги и устройства вы привязываете в chroot — /dev и /run могут дать процессам внутри доступ к хосту.
Важно: выполнение chroot и монтирование /dev требует прав root. Работайте осторожно и понимайте последствия.
Советы и лучшие практики
- Для многоразовых окружений используйте шаблонные tarball или debootstrap для Debian-стилей.
- Если нужно запускать приложения другой архитектуры, установите qemu-user-static и зарегистрируйте его в binfmt_misc.
- Для изолированного тестирования сервисов используйте контейнеры — они легче управляются и безопаснее.
Примеры дополнительных команд
Установка qemu-user-static на Debian-подобных системах для поддержки другой архитектуры:
sudo apt-get install qemu-user-static
# затем распаковка guest FS и регистрация
sudo update-binfmts --enable qemu-armПример распаковки и подготовки Debian-образа через debootstrap:
sudo apt-get install debootstrap
sudo debootstrap --arch=amd64 stable /mnt/guest http://deb.debian.org/debianЧасто задаваемые вопросы
Q: Будет ли внутри chroot работать systemd как на полноценной системе?
A: Обычно нет. systemd ожидает, что он —PID 1 и управляет cgroups; в простом chroot это поведение нарушается. Для тестирования systemd лучше использовать контейнер или полноценную VM.
Q: Можно ли использовать chroot для запуска GUI-приложений?
A: Да, но нужно обеспечить доступ к X-серверу/Wayland (например, через проброс сокета /tmp/.X11-unix и DISPLAY) и соответствующие библиотеки внутри chroot.
Q: Как безопасно выполнить chroot, если гость — непроверенный код?
A: chroot не обеспечивает безопасности от злонамеренного кода. Для непроверенных приложений используйте контейнер или виртуальную машину.
Краткое резюме
chroot — простой и мощный инструмент для изоляции файловой системы, восстановления и тестирования окружений без перезагрузки. Он даёт быстрый доступ к альтернативным дистрибутивам и системам, но не заменяет контейнеры или виртуальные машины, если вам нужно отдельное ядро, полноценная изоляция или сетевые namespace. Используйте chroot для восстановления, отладки и простых экспериментов; для продакшна и безопасности выбирайте контейнеры или VM.
Важно: всегда корректно размонтируйте bind-монты и помните, что гостевая среда использует ядро хоста.
Если у вас есть опыт использования chroot для запуска нескольких дистрибутивов или восстановления системы с Live CD, поделитесь вашими сценариями и советами в комментариях.
Похожие материалы
Автоматическая очистка Linux с Cruftbuster
Master PDF Editor на Linux: создание и редактирование
Многокамерная трансляция бесплатно
Открыть Configuration Manager (SCCM) в Windows 11