Я хотел бы попытаться настроить компьютер так, чтобы на нем было несколько установок Linux в одной файловой системе. Например, filesytem будет иметь 3 папки: /Ubuntu_Precise
, /Ubuntu_Oneiric
и /Ubuntu_Natty
.
(Я знаю, что вы можете сделать это с BTRFS и вложенными томами, но я хотел бы использовать EXT4 для скорости).
Однажды я установил несколько установок разных дистрибутивов, используя BTRFS, и, получив это, я знаю, что Grub отлично справляется с загрузкой образа vmlinuz и initrd из «нестандартных» путей. Но когда я занимался BTRFS, было то, rootflags=subvol=@<subvolume_name>
что ядро указывало монтировать этот подобъем как / в файловой системе. Есть ли какой-либо аргумент, что вы можете передать ядру, которое заставит его связать, смонтировать подпапку в разделе как / и затем загрузиться?
Я думаю, что для других частей, я довольно близок. Я знаю, как определить привязку в /etc/fstab
. Кроме того, с тех пор, как я установил свою систему с несколькими установками linux в подобъемах BTRFS, я привык устанавливать дистрибутив на ВМ, а затем переносить его с помощью rsync, поэтому я не слишком беспокоюсь о том, что мне нужно сделать, чтобы получить правильную конфигурацию, я просто пытаюсь выяснить, какая будет правильная конфигурация. Как только я это узнаю, я смогу достаточно легко выполнить миграцию в подпапки и редактирование файлов.
Я уже знаю о виртуализации и разделах, но это не то, что я ищу. Целевой компьютер не обладает достаточной мощностью для виртуализации, а разделы не разделяют свободное пространство. Я пытаюсь настроить систему, в которой двойной / тройной / quad / etc загружает дистрибутивы linux, но это делается с одной файловой системой, чтобы не было случая «у меня есть свободное место, но оно не в том разделе!»
Если у кого-то есть предложения, как отредактировать мой вопрос или его название, чтобы быть более понятным, я все уши.
источник
Ответы:
Краткий ответ - насколько я знаю, нет готового решения для ваших конкретных требований. Вам нужно будет настроить каждое initramfs каждого дистрибутива для удовлетворения ваших конкретных потребностей.
Длинный ответ - да, это возможно. В настоящее время большинство дистрибутивов Linux используют initramfs, который будет загружен в память загрузчиком, а затем распакован ядром. Там он будет работать,
/sbin/init
который отвечает за настройку раннего пространства пользователя (запуск udev, загрузка модулей, запуск plymouth, запрос криптофразы, настройка сети для монтирования сети,… вы называете это). Так же вы можете запускать свои собственные скрипты и оценивать пользовательские параметры загрузки.Пример для Debian
Если вы используете Debian (должно быть то же самое с Ubuntu), вы должны иметь возможность разместить скрипт,
/etc/initramfs-tools/scripts/init-bottom/
который будет выполняться перед запуском init. Для получения дополнительной информации о скрипте, различные каталоги и макет взгляните на man initramfs-tools . Вам нужно будет настроитьrootmnt
и добавить целевой каталог.Пример (непроверенный) сценария, который должен быть установлен как
/etc/initramfs-tools/scripts/local-bottom/00-myroot
или/usr/share/initramfs-tools/scripts/init-top/00-myroot
:Идея состоит в том, чтобы настроить,
rootmnt
который используется вinit
скрипте initramfs для запуска / выполнения реального init. Поскольку корневое устройство уже смонтировано наinit-bootom
этапе, вы можете просто настроить / изменить целевой каталог.Чтобы использовать этот сценарий, просто добавьте новый параметр загрузки, скопируйте сценарий, сделайте его исполняемым, заново сгенерируйте ваши initramfs и добавьте параметр загрузки для вашего дистрибутива Linux, например
rootdir=/Ubuntu_Precise
.источник
mount /dev/rootdevice /mountpoint
после запуска системыВот два способа, которые работают в Ubuntu Bionic (и, возможно, в другом месте). у меня недостаточно репутации, чтобы комментировать, но bionic: / usr / share / initramfs-tools / init просматривает / etc / fstab для / usr сразу после вызова mountroot и перед вызовом *-нижних сценариев, поэтому добавление init- Нижний сценарий (как предлагается в другом ответе здесь) "слишком поздно". вместо этого я рекомендую это:
источник
Загрузка разных linux без вмешательства в таблицу разделов интересна для разных целей, альтернативное решение для общей файловой системы - это использовать тома цикла, здесь нужно внести несколько изменений, предполагая, что у вас есть файл / том цикла / debian в файловой системе / dev / sdb1 (Я использую текущий GNU / Debian sid / unstable как для основной, так и для петлевой ОС).
Аргументы, определенные в grub как командная строка linux, устанавливаются в env initrd / init, поэтому:
Цикл позволяет монтировать том поверх «себя», поток сценариев по умолчанию делает a,
mount /dev/sdb1 /root
мы просто необязательно перемонтируем / dev / sdb1 как rw, если это был ro, тогда всегда добавляем amount -o loop /root/debian /root
.Также необходимо предварительно загрузить модуль в initram (тогда не забудьте запустить update-initramfs)
Не знаю, насколько использование циклов влияет на производительность или тратит ресурсы, мне интересно, если монтирование ext4 поверх ext4 удваивает вероятность сбоя файловой системы, но думаю, что некоторые настройки могут быть сделаны. Может быть, есть лучший способ использовать цикл, менее хакерский, если есть, пожалуйста, дайте мне знать, потому что я не нашел.
источник
Это не ответ, но я хочу уточнить некоторые моменты относительно ответа и комментариев Ульриха (я не могу комментировать выше).
Решение, которое предлагает Ульрих, «может» работать (пока не проверено), но тогда вы получите неустранимую файловую систему . В качестве обходного пути (IMHO некрасиво) вы можете смонтировать fs как rw перед chroot ( как предлагается здесь ), но будьте осторожны с неработающими скриптами инициализации. Я предполагаю, что у этого обходного пути есть больше побочных эффектов (как сломанный fs, пытающийся перемонтировать ro и терпящий неудачу).
Я использую ядро 3.2 с ext4, а монтирование уже смонтированного dev внутри chroot все еще дает EBUSY, как прокомментировал psusi.
источник