Учебники (How-To & F.A.Q)

МУЛЬТИ-УСТАНОВКА дистрибутивов 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
К слову, снимок системы, то есть SNAPSHOT по факту ничего не весит и не замимает места на вашем SSD или HDD, а так же его создание занимает, ну хорошо если 1 секунду :) Таким образом мы сейчас установили на один раздел 2 копии НЕЗАВИСИМЫХ друг от друга систем! Которые не занимают места на диске. Я думаю из названий снимков уже понятно, какая будет у нас основной, а какая второстепенной. А та система, которая была установлена при установке в "/@" пусть там и лежит. Если что-то пойдёт не так, то мы просто загрузимся с LiveCD/USB или из второй системы "@MSECOND", смонтируем нашу систему в "/mnt/SUB" командой «mount -L SYSTEM /mnt/SUB», переименуем наш SNAPSHOT "/@MSTABLE" в "/@MOLD" и сделаем ещё один снимок (SNAPSHOT) командой «btrfs subvolume snapshot /mnt/SUB/@ /mnt/SUB/@MSTABLE». И не забывайте, 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

Всем спасибо за внимание и всем добра!
Блог им. Lisodin

invalid partition table после установки Linux Manjaro KDE 20.0.3

Всем привет, я новенький в мире линукса и просмотрев несколько видосов, принялся установить себе его инсталить, а именно дистрибутив Linux Manjaro KDE 20.0.3, скачал-записал-установил, вытянул флешку и пожалуста, у меня invalid partition table
Как именно записывал образ:
Блог им. Lisodin: invalid partition table после установки Linux Manjaro KDE 20.0.3
После нажатия на «Почати», выходит ещё окно с выборов записать в гибридном ISO-режиме или в DD-режиме:
Блог им. Lisodin: invalid partition table после установки Linux Manjaro KDE 20.0.3 — выбрав последнее и начинается запись образа, после чего приступил к сустановке как в этом видео:
www.youtube.com/watch?v=c5u_7BKVef4&t=19s
и в итоге это сообщение invalid partition table, пробовал исправлять её, но ничего не мопогло.
Попробовал инсталить Cinamoon — и этой ошибки небыло, но она иногда подлагивала.
Так как решить проблему с Manjaro?