6546
МУЛЬТИ-УСТАНОВКА дистрибутивов Linux НА ОДИН РАЗДЕЛ в SUBVOLUME-BTRFS на примере Дистрибутива MANJARO
Статья детально описывает процесс установки со всеми пояснениями. Автор рассчитывает достучаться до начинающих пользователей тоже, поэтому, просьба сильно не критиковать подход :)
МУЛЬТИ-УСТАНОВКА дистрибутивов Linux НА ОДИН РАЗДЕЛ в SUBVOLUME-BTRFS на примере Дистрибутива MANJARO с мульти-загрузкой двух или даже многоуровнего GRUB загрузчика для каждого дистрибутива. Все мы привыкли к ситуациям, когда на одном ПК у нас стоит один Linux дистрибутив и например Windows дистрибутив. Иногда системы три, иногда четыре, но это бывает редко. В основном этот подход подразумевает под собой установку разных операционных систем или разных дистрибутивов на разные разделы ваших дисков. Но что если я сейчас вам покажу то, что различные Linux дистрибутивы или один дистрибутив с различными десктопами и для различных нужд могут уживаться на одном единственном разделе и при этом каждый будет жить своей собственной жизнью, а каталог пользователя и его подкаталоги будут объедены в один общий? Такого не может быть? Ну что же, давайте посмотрим :)
Все тесты проводились на дистрибутиве MANJARO KDE, но по сути, не имеет никакого значения какой из доступных дистрибутивов MANJARO выберете вы!
Для начала грузимся с лайв CD/USB, после чего открываем консоль, получаем постоянные root права на эту сессию через «sudo su -» и начинаем :) Нам нужно выполнить разметку диска и присвоить каждому разделу код файловой системы и название. Для этого будем последовательно использовать 2 программы, потому что в одной проще сделать разметку, а во второй присвоить коды и дать название разделам. Опытные пользователи могут выбрать свой вариант.
1. Создаем GPT метку диска утилитой «parted» — нажимаем — «p» — на экран будет выведена информация о разделах и если они есть, то удаляем их командой «rm» — где «1» это номер раздела. Команду нужно повторить для всех разделов. Их список мы смотрели на предыдущем шаге командой «p».
Теперь создаем разметку GPT, пишем «mklabel gpt» — «yes» — «q» и «ENTER»
# parted /dev/sda
2. Запускаем программу разметки диска
# cfdisk /dev/sda
2. Создаём раздел на 31МБ для будущего GRUB загрузчика. Нажимаем — «Новый» — пишем «31M» — выбираем тип файловой системы «EFI»
По этому же принципу делаем остальные разделы
3. Создаём раздел на 128МБ для будущего /BOOT раздела. Переключаемся на неразмеченную область — «Новый» — пишем «128M» — выбираем тип файловой системы «BIOS boot»
4. Создаём раздел на 50ГБ для будущего / раздела систем (у меня на виртуалке для наглядного примера это 25ГБ), переключаемся на неразмеченную область — «Новый» — пишем «50G» и «ENTER»
Дополнительные возможности
Установленных систем разных или одного дистрибутива может быть 2! на 50GB или даже 3! Тут есть один нюанс — если у вас имеется в наличии например 1SSD на 128ГБ или 256ГБ и 2SSD или HDD на 1ТБ например для /DATA файлов (по сути будущие подкаталоги /home/user/.., то можете в этом пункте отдать под этот раздел 100ГБ. Чем больше места будет в корне, тем большее кол-во разных дистрибутивов или копий одного дистрибутива вы сможете на него установить. Если конечно вам это нужно. Тут важно понимать, что /DATA (это /home/user/..) у нас будет (5) пятым разделом и места под него должно быть достаточно для ВАШИХ нужд! Например у меня на рабочей системе для этого раздела выделен отдельный HDD на 1TB и мне этого хватает для всего что мне нужно.
5. Создаём раздел на RAM+2GB (у меня на виртуалке это 4+2, вы рассчитывайте свой объём оперативной памяти и прибавляйте 2GB), переключаемся на неразмеченную область — «Новый» — пишем «размер равный вашей оперативной памяти + 2ГБ» и «ENTER» — выбираем тип файловой системы «Linux своп»
6. Создаём раздел на всё остальное место для /DATA (будущий /home/user/..), переключаемся на неразмеченную область — «Новый» — жмем «ENTER» чтобы выбрать оставшееся место на диске под будущий /DATA раздел. Нажимаем «Запись» пишем «yes» и нажимаем «ENTER» а после «Выход»
7. Запускаем программу разметки диска # gdisk /dev/sda — и далее присваиваем для каждого раздела код файловой системы и метку раздела (не путайте с меткой диска, это мы сделаем чуть позже при форматировании разделов), всё цифры и имена набираем с клавиатуры.
t - 1 - EF02 - ENTER
t - 2 - 8300 - ENTER
t - 3 - 8300 - ENTER
t - 4 - 8200 - ENTER
t - 5 - 8300 - ENTER
c - 1 - UEFI - ENTER
c - 2 - BOOT - ENTER
c - 3 - SYSTEM - ENTER
c - 4 - SWAP - ENTER
c - 5 - DATA - ENTER
Теперь нажмите p чтобы проверить всё ли вышло правильно. Должны увидеть что-то вроде этого (фото)
Number Start (sector) End (sector) Size Code Name
1 2048 67583 32.0 MiB EF02 UEFI
2 67584 2164735 128.0 MiB 8300 BOOT
3 2164736 107022335 50.0 GiB 8300 SYSTEM
4 107022336 136382463 6.0 GiB 8200 SWAP
5 136382464 500118158 18.8 GiB 8300 DATA
Не забудьте сохранить изменения и выйти, для этого нажмите «w» а после «y» и «ENTER»
8. Запускаем графический установщик. В разделе «Клавиатура» рекомендую пока выбрать «English (US)» и нажать «Далее». Второй язык сможете добавить позднее. Выбираем «Ручная разметка» после выбираем "/dev/sda3" и нажимаем «Править» — выбираем «Форматировать» — «Файловая фистема» — «Btrfs» и «Точка монтирования» — "/" чтобы система понимала, на какой раздел нужно производить установку. Потом выбираем "/dev/sda4" и нажимаем «Править» — выбираем «Форматировать» — «Файловая система» — «Область подкачки Linux» и «Точка монтирования» без изменений. После нажимаем «Ок» и «Далее» — настраиваем имена и пароли. На окно с предупреждением нажимаем «ОК» — «Далее» и у вас должно было быть сейчас что-то вроде этого. Ну всё, можем запускать графическую установку, нажимайте «Установить» и «Приступить к установке» а после завершения процесса установки не перезагружайтесь!
9. Далее переходим к настройке GRUB загрузчика, назовём его установку двухуровневой. Что это нам даёт — у каждой системы есть свой взгляд на загрузку и для того, чтобы избежать конфликтов, мы пропишем GRUB на отдельный раздел и он будет передавать управление тому GRUB загрузчику, чью систему мы будем загружать через GRUB меню при старте ПК/Ноутбука.
10. Форматирование раздела под наш загрузчик "-L BOOT" задаёт метку разделу, он же «LABEL» и "-m0" отключает резерв места для записи от пользователя
# mkfs.ext3 -L BOOT -m0 /dev/sda2
11. Создаём каталог BOOT куда будет установлен наш загрузчик
# mkdir /mnt/BOOT
12. Монтируем наш отформатированный раздел по заданной ранее при форматировании метке, то есть по «LABEL»
# mount -L BOOT /mnt/BOOT
13. Так как при установке системы она поставила свою загрузочную запись на /dev/sda, то нам нужно забрать у системного загрузчика управление назад и прописать туда наш
# grub-install --boot-directory=/mnt/BOOT/ /dev/sda
После чего вы должны получить такой ответ:
"Выполняется установка для платформы i386-pc.
Установка завершена. Ошибок нет."
14. Создадим каталог в папке /mnt/
# mkdir /mnt/SUB
15. Присвоим метку разделу, чтобы мы знали, что это системный раздел
# btrfs filesystem label /dev/sda3 SYSTEM
16. Смонтируем наш системный раздел по метке в созданный каталог для доступа к нашим /@SOBVOLUMES — он пригодится нам для будущей работы с нашими субсистемами :)
# mount -L SYSTEM /mnt/SUB
17. Для начала сделаем 2 снимка (SNAPSHOT) нашей системы установленной на /@SUBVOLUMES, она сейчас установлена в каталок "/@" — для этого выполним команду
# btrfs subvolume snapshot /mnt/SUB/@ /mnt/SUB/@MSTABLE
# btrfs subvolume snapshot /mnt/SUB/@ /mnt/SUB/@MSECOND
18. И сразу сделаем бэкап свежеустановленной системы в "/@" для того, чтобы у нас вдруг с ним не вощник конфликт делёжки GRUB конфига и заодно если что, можно будет откатиться к свежачку :)
# mv /mnt/SUB/@ /mnt/SUB/@reserved
Что представляет из себя SNAPSHOT
19. Теперь нужно прописать в загрузчик временный путь к нашему /@MSTABLE SUBVOLUME, чтобы он загрузил именно эту систему. Сделать это можно следующим образом
# nano -w /mnt/SUB/@MSTABLE/boot/grub/grub.cfg
Находим первую запись в строке с названием "### BEGIN /etc/grub.d/10_linux ###"
И заменяем в этом разделе все "/@" на "/@MSTABLE" — должно получиться вот так
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Manjaro Linux' --class manjaro --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2282e840-f7a1-4312-b6e9-912ea9f9541c' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod btrfs
set root='hd0,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 2282e840-f7a1-4312-b6e9-912ea9f9541c
else
search --no-floppy --fs-uuid --set=root 2282e840-f7a1-4312-b6e9-912ea9f9541c
fi
linux /@MSTABLE/boot/vmlinuz-5.10-x86_64 root=UUID=2282e840-f7a1-4312-b6e9-912ea9f9541c rw rootflags=subvol=@MSTABLE quiet apparmor=1 security=apparmor udev.log_priority=3
initrd /@MSTABLE/boot/intel-ucode.img /@MSTABLE/boot/initramfs-5.10-x86_64.img
}
20. Теперь проделываем всё то же самое со второй системой
# nano -w /mnt/SUB/@MSECOND/boot/grub/grub.cfg
и в конфиг GRUB копируем и вставляем следующий код
# nano -w /mnt/BOOT/grub/grub.cfg
set timeout=5
set default=0
insmod part_gpt
insmod btrfs
menuentry 'Start MANJARO STABLE'{
configfile (hd0,gpt3)/@MSTABLE/boot/grub/grub.cfg
}
menuentry 'Start MANJARO-SECOND'{
configfile (hd0,gpt3)/@MSECOND/boot/grub/grub.cfg
}
Естественно, если схема разбивки вашего диска иначе, то «hd0» подгоните под номер вашего диска и «gpt3» под номер раздела на диске :)
Вам нужны доказательства что эти системы не имеют общих папок, что это две абсолютно независимые друг от друга системы? Давайте в @MSTABLE и в @MSECOND создадим в /ROOT/ каталоге по одному файлу и назовём их @MSTABLE-proof и @MSECOND-proof :) а после их загрузки убедимся в том, что это две разные системы на одном разделе!
# touch /mnt/SUB/@MSTABLE/root/@MSTABLE-proof
# touch /mnt/SUB/@MSECOND/root/@MSECOND-proof
21. Теперь даём в консоли команды
# umount /mnt/SUB
# umount /mnt/BOOT
# reboot
22. Загрузились :) запускаем консоль, получаем root права через «sudo su -» и первым делом настраиваем все параметры конкретной загруженной системы под её загрузчик, потом повторяем то же самое для второй системы и перезагружаемся!
# grub-mkconfig -o /boot/grub/grub.cfg
23. Теперь отформатируем наш /DATA раздел, чтобы в последующем перенастроить пути к домашним каталогам пользователей, но для этого выйдет отдельная статья!
# mkfs.btrfs -L DATA /dev/sda5
# mkdir /mnt/BOOT
# mkdir /mnt/SUB
Я немного затупил вконце видео, не понял почему файл оставленный на Рабочем столе одной системы появился на второй ) Но у нас же они идентичные, юзер один и тот же и домашние каталоги общие :) Но это тема отдельной статьи!
На этом мы закончили и как видите, на одном "/dev/sda3" разделе может существовать бесконечное множество дистрибутивов. Сам я около 3 месяцев как перешёл на Линукс и мне посчастливилось познакомиться на канале @calculatelinux в Телеграм с замечательным и умнейшим человеком под ником @Kewol. Именно он рассказал мне о такой возможности и на пальцах показал все преимущества такого подхода, за что ему огромнейшее человеческое спасибо! Он так же написал статью на https://wiki.calculate-linux.org/ru/install_multy_distrs_to_btrfs_subvol/draft (к сожалению её пока не подтвердили, да и писал он больше для себя и для того, чтобы увидеть её, нужно пройти регистрацию). Дело в том, что по всей видимости не каждый дистрибутив умеет сразу ставить себя в /@ SUBVOLUME, но когда мы начали пробовать на MANJARO Linux, то он был очень удивлён, так как на этом дистрибутиве всё встало само собой! Очень надеюсь, что статья вызовет резонанс среди продвинутых пользователей и пригодится новичкам :)
Скоро выложу вторую часть по настройке домашних каталогов на другой раздел диска.
Видеоинструкция тут: www.youtube.com/watch?v=tQvttHujarY
Всем спасибо за внимание и всем добра!
7 комментариев
Примерно тоже (заморозка), но на aufs(overlayfs)
А это — если надо просто несколько линуксов на одном разделе:
aur.archlinux.org/packages/mkinitcpio-dir/
aur.archlinux.org/cgit/aur.git/tree/subdir_install?h=mkinitcpio-loop-subdir
wiki.puppyrus.org/soft/arch-initrd-rootaufs2rootdir_dirname
Плохо знаком с btrfs. Не знаю где будет физически ее snapshot и что в нем будет
Можно ли слить вместе изменения…
Кто в теме — поясните
Поэтому с плюсами btrfs метода — надо разбираться
Минусы — надо переформатировать в btrfs
Ставим систему как обычно, любой конфигрурации.На btrfs.
В конфигурации появиться субраздел для загрузки из созданных снапшотов.
Все можно перегружаться в созданные псевдо системы и делать там что хочется, но не забываем что boot у нас отдельно.) Со всеми вытекающими.
Если home будет отдельно, то не забываем создавать новых пользователей. Для каждой псевдо системы.Ну что бы не было каши с настройками.
Р.с Пользователей нужно создавать до создания снапшота.
1.0) Всего навсего установить grub-btrfs и сработает?
2.0) Я не совсем понял суть зачем создавать снимки?
2.1) Если у меня уже установлены 2 дистрибутива, то снимки нужны? Или можно обойтись без них?
3.0) ещё такой вопрос. В арч-репозитории grub-btrfs нету. Он же только в АУР. При потыке makepkg -si у меня случилась ошибка. Последние строки пишет;
==> Запускается package()…
install: не удалось выполнить stat для 'localisation/fr/grub-btrfs-git.mo': Нет такого файла или каталога
==> ОШИБКА: Произошел сбой в package().
Прерывание…
Дистрибутив Artix-linux
На другом дистрибутиве, voidlinux, grub-btrfs присутсвует. Но и там grub-mkconfig не находил артикс дистрибутив.
4.0) На гитхабе grub-btrfs читал про отдельнй /boot раздел или подраздел, чтобы grub-btrfs сработал.
Однако не понял отдельный /буут для всех дистрибутивов, как высше упомянуто с /BOOT? Или отдельный /буут подраздел на каждом дистрибутиве? Т.е.можно установить {/,/home, итд.} А можно {/,/boot,/home итд.}. Что нужно чтобы сработал grub-btrfs?
5.0) Ах да! Так же там упоминалось что то про отдельный бтрфс-подраздел, /var или /var/log. Мой английский не так плох. Но познания техники с англ. наверное не хватает. Т.к. не понял какие отдельные бтрфс-подразделы нужны чтобы grub-btrfs заметил дистрибутивы на других подразделах с корневой идентификацией 5.
по сути снимок делается немного для других целей, нежели описано в мануале, но в общих чертах снапшот — это полноценная копия(даже не копия, а некая иная сущность из-за специфики файловой системы) вашей живой системы, а grub-btrfs позволяет без лишних телодвижений в нее загрузиться.
есть в репах манджаро.
.
достаточно его установить, но это не точно)
bash.org