У меня Linux (Debian Jessie) установлен на жесткий диск. Drive - sda1
, ext4fs и sda2
- swap
У меня есть /chroot
папка. В /chroot
папке установлена другая система .
Вопрос:
Как сказать загрузчику, загружаться не основной системой (основной, Debian Jessie), а системой в / chroot ? Возможно, поменять /menu.lst
а /chroot/etc/fstab
? ( vmlinuz root=/dev/sda1/chroot
?)
Или другой вариант вопроса: возможно ли установить linux не в корневой каталог раздела, а в папку? ( /another_linux/bin
, /another_linux/home
, /another_linux/etc
...)
vmlinuz root=/dev/sda1/chroot
не сработает Вероятно, можно смоделировать это с помощью метода, аналогичного тому, который используется вinitrd
. Смотрите, например, здесь . Вы монтируете,/new_root
как описано там, затем вместоcd /new_root
docd /new_root/chroot
и продолжаете.Ответы:
Это не может быть сделано загрузчиком или ядром. Параметр для
root
опции ядра, такой как in,root=/dev/sda1
выглядит как стандартное имя пути Unix, но такие пути интерпретируются в соответствии с текущей смонтированной файловой системой. На моментroot
интерпретации опции нет смонтированных файловых систем. Ну, почти нет. Во время инициализации ядра существует экземпляр минимальнойramfs
файловой системы, называемойrootfs
смонтированной в качестве корня для начального запуска процессаstart_kernel()
. Фактическая интерпретацияroot
параметра option выполняется в вызываемой подпрограммеname_to_dev_t()
. Одним из поддерживаемых синтаксисов является/dev/name
формат, где имя интерпретируется путем временного монтированияsysfs
файловой системы вrootfs
root, и ищет запись блочного устройства, соответствующую имени в/sys/block
. Этот процесс объясняется более подробно здесь .Описанную настройку необходимо выполнить, сначала загрузившись в минимальной среде, такой как предоставляемая
initrd
, монтируя настоящую корневую файловую систему с/dev/sda1
временной точки монтирования, например/mnt/rootfs
, затем измените корневой каталог на/mnt/rootfs/chroot
использованиеpivot_root(8)
.Это несколько похоже на настройку корневых файловых систем для контейнеров LinuX ( LXC ). LXC - это реализация виртуализации на уровне операционной системы для Linux. Виртуализация на уровне операционной системы обычно используется в средах виртуального хостинга как легкая альтернатива полной виртуализации, управляемой гипервизором. При виртуализации на уровне операционной системы одно ядро операционной системы совместно используется несколькими изолированными экземплярами пространства пользователя. Каждый экземпляр, часто называемый контейнером, тюрьмой, виртуальным частным сервером (VPE) или виртуальной средой (VE), по сути является отдельной установкой операционной системы, размещенной в собственном каталоге на хост-системе.
источник
Я столкнулся с той же проблемой и закончил тем, что написал ее, чтобы она работала безболезненно в разных системах (Debian, Ubuntu в настоящее время):
Запустите
make_chroot_initrd
скрипт для создания нового образа initrd с поддержкой chroot из существующего:Новый образ будет точно таким же, за исключением того, что теперь он может обрабатывать
chroot=
загрузочный параметр.С grub2 в качестве загрузчика вы можете добавить запись в
/boot/grub/grub.cfg
:(или, возможно, лучше
/etc/grub.d/40_custom
)(измените файлы / разделы, чтобы они соответствовали вашим)
Общесистемная установка
Как только вы довольны этим, вы можете сделать изменения постоянными
(пока не будет обновлен пакет initramfs-tools).
В корневой системе:
С этого момента обычный образ initrd будет поддерживать загрузку chroot.
Нет необходимости использовать отдельный файл initrd.chroot, который может быть не синхронизирован с ним.
Смотрите boot_chroot для деталей.
источник
Да, вы можете сделать трюк, используя Btrfs subvolumes .
Сначала вам нужно конвертировать ext4 в btrfs, как описано здесь .
Преобразуйте ваш chroot в subvilume, если это еще не так:
Теперь у вас есть подобъем с именем path / to / chroot . Вы можете проверить это с
sudo btrfs subvol list /
Теперь вы можете создать загрузочную запись в grub. Просто добавьте
rootflags=subvol=path/to/chroot
строку загрузки ядра Linux в пункт меню grub или используйте ее для автоматического зондирования.источник