ГлавнаяОперационные системыLinuxКак запустить несколько дистрибутивов Linux без виртуализации

Как запустить несколько дистрибутивов Linux без виртуализации

Несколько недель назад я написал статью на Как запустить несколько сеансов X без виртуализации , в которой продемонстрировал, как можно одновременно запускать несколько сред рабочего стола на одном компьютере и переключаться между ними одним нажатием кнопки.. Признаюсь, это была своего рода разминка перед настоящим представлением — как одновременно запускать несколько дистрибутивов Linux, не сталкиваясь с недостатками программного обеспечения для виртуализации.

Сегодня мы будем использовать chroot, чтобы рассматривать определенные части вашей файловой системы Linux как (почти) полностью изолированные системы. Это позволит вам делать множество интересных вещей, например запускать полную систему Gentoo из вашей системы Ubuntu практически без потери производительности.

Как это работает

Прежде чем мы начнем, было бы неплохо подробно рассказать, что мы делаем и как все это работает. Когда вы запускаете компьютер с Linux, вы выполняете ряд шагов для загрузки. GRUB, ваш загрузчик, загружает ядро, указанное в файле конфигурации GRUB, присоединяет его к корневому разделу и запускает хранящиеся там сценарии инициализации. С этого момента ваша система работает из этого корневого раздела.

Мы собираемся использовать хост-систему Linux (я буду делать это из Debian, но шаги должны быть практически идентичны независимо от дистрибутива), которая проходит обычный процесс загрузки, но затем обрабатывает определенную часть ваша файловая си>Как это работаетguest) как отдельная изолированная установка. Эта гостевая система не будет проходить процесс загрузки, не будет загружать ядро ​​и не запускать сценарии инициализации. Вы просто скажете своему хосту: «Подключитесь к этому каталогу, как будто это новый корневой раздел». Диаграмма ниже должна помочь продемонстрировать, что я имею в виду.

Примерно так файлы будут располагаться в вашей системе: они будут храниться как обычные файлы в обычном разделе и обрабатываться так же, как и любые другие файлы, пока мы не воспользуемся «chroot», чтобы превратить их в нечто особенное.

p>

несколько дистрибутивов перед chroot

Но как только мы используем chroot(CHange ROOT) и указываем его на /mnt/guest (или куда бы мы ни поместили файлы на следующем шаге), этот каталог теперь становится собственной корневой файловой системой. Он становится полностью не обращающим внимания на хост-систему. Все программы и команды, запускаемые из этого нового корня, запускаются на основе программного обеспечения внутри этой новой ветки.

несколько дистрибутивов после chroot

Например, если вы подключены к /mnt/guest и набираете «ls», он читает команду «ls» изнутри этой chrooted среды, совершенно не подозревая о команде «ls» в хост-системе. Если вы наберете «firefox», Firefox запустится из нового корня, независимо от того, установлен ли Firefox на хосте или нет.

Получение и использование гостевого дистрибутива

Чтобы это работало, вам просто нужна базовая файловая система дистрибутива Linux, каким бы он ни был. Для этой цели в Debian есть отличный инструмент под названием debbootstrap, который загружает базовые файлы и помещает их куда угодно. Чтобы было интереснее и чтобы продемонстрировать возможности chroot, мы собираемся использовать для нашей гостя файловую систему Генту . Чтобы все было просто и понятно, я собираюсь включить загрузку tar-архива в число шагов, которые мы будем выполнять в командной строке.

Эти шаги загружают все базовые файлы для системы Gentoo, извлекают их в наш целевой каталог (я буду использовать /mnt/guest, но вы можете использовать все, что захотите), а затем chroot в этот каталог, чтобы он рассматривается как новый корневой каталог (/). Для некоторых из следующих команд вам могут потребоваться права root (sudo).

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

Эти команды выполняют следующие действия в порядке номера строки:

  1. Создайте пространство для жизни нашей гостевой системы.
  2. Перейдите в это пространство.
  3. Загрузить системные файлы Gentoo
  4. Извлеките их
  5. Считать это новое пространство корневым каталогом (/)

Следующий снимок экрана должен продемонстрировать, что после того, как мы использовали chroot для подключения нашего нового каталога в качестве корневого, он теперь изолирован от предыдущих ветвей дерева файловой системы.

Multipledistros-afterchroot-pwd

Чтобы объяснить скриншот, мы начинаем с обычной командной строки в хост-системе. Я использую pwdдля отображения моего текущего каталога, где все файлы Gentoo находятся как обычные старые файлы, не имеющие особого значения. Затем я использую chroot, чтобы рассматривать этот каталог как новый корневой >Получение и использование гостевого дистрибутиваприглашение изменилось, поскольку командная строка теперь извлекает всю информацию (включая то, как нарисовать приглашение) из корневой среды Gentoo. ВСЕ команды и действия, которые я выполняю при chroot, зависят от тех команд, которые существуют в этом новом файловом дереве. Когда я снова набираю pwd, он больше не говорит /mnt/guest, потому что, насколько известно этой оболочке, не существует ничего, кроме того, что она видит внутри этого дерева.

О чем следует помнить

Как я уже намекал выше, он не изолирован на 100% от хост-системы. Среда с chroot никогда не «загружалась», поэтому никогда не загружала собственное ядро ​​и не запускала собственные сценарии инициализации. В нашем примере Gentoo работает на ядре, с которым загрузился хост (в моем случае Debian).

Этот метод определенно не является заменой виртуализации и не может выполнять все функции программного обеспечения виртуальных машин. Гостевая система на самом деле никогда не «загружается» и не запускает сценарии инициализации, и возможно, вашей гостевой ОС могут потребоваться некоторые функции, которых нет в ядре вашего хоста.

Зачем?

Раньше я рассказывал об этом методе людям, и они часто говорили что-то вроде: «Это круто, но для чего бы вы его использовали?». Лично я нашел несколько применений chroot:

  • Протестируйте разработку программного обеспечения в идеальной среде.
  • Запуск программного обеспечения, предназначенного для другого дистрибутива.
  • Запуск программного обеспечения, для которого требуется более старая или более новая версия текущего дистрибутива.
  • Доступ к установке Linux в другом разделе без перезагрузки
  • Загрузите Live CD и используйте chroot для восстановления вашей установки или GRUB.
  • Доступ к диску, где вы забыли пользователя/пароль.
  • Запустите 32-битное приложение в 64-битной среде.

И я уверен, что есть еще много таких, о которых я никогда не думал. Вы когда-нибудь использовали chroot для запуска нескольких дистрибутивов? Как насчет восстановления системы Linux с Live CD? Дайте нам знать в комментариях.

>О чем следует помнить>Зачем?
ПОХОЖИЕ СТАТЬИ

Популярные записи