Установка нескольких ОС на одном BTRFS разделе.

Аватара пользователя

Автор темы
di_mok
Сообщения: 4895
Зарегистрирован: 27 авг 2016, 16:06
Решено: 30
Откуда: Арзамас
Благодарил (а): 1249 раз
Поблагодарили: 1022 раза

Установка нескольких ОС на одном BTRFS разделе.

Сообщение di_mok » 07 апр 2018, 14:26

Может быть плохо искал, но мне не удалось найти ни одной внятной статьи описывающей эту процедуру. Инструкция появилась как следствие нечеловеческих страданий, и благодаря подсказкам slant, за что ему огромное спасибо.

Внимание! К написанному стоит отнестись с осторожностью, дабы потом не рыдать над пепелищем ранее рабочей системы. Т.к., имеется ряд спорных моментов.

Вводные данные.
При установке на один раздел, Ubiquity создаёт два подтома: @ и @home.
К сожалению, пользователю не предоставлена возможность самостоятельно задавать названия подтомов, отсюда - нет возможности штатно установить две и более ОС. Поэтому, нам придётся клонировать подтома первой ОС. Я добавлял к названиям lmc, вы вольны придумать что-то своё.
Для примера я использовал LinuxMint 18.3 Cinnamon - первая ОС, и LinuxMint 18.3 Mate - вторая ОС.
Так-же, эта статья актуальна при установке Ubuntu и других дистрибутивов, использующих установщик Ubiquity. С другими установщиками не проверял.

В этом примере рассматривается рассматривается установка в режиме Legacy BIOS. Пример с EFI сделаю чуть позже.

Поехали.

Создание загрузочных флешек или дисков рассматривать не буду, будем считать, что они готовы.
Приступаем к установке ОС1.

Выбираем Другой вариант
01-type.png

Создаём новый раздел. Использовать как - btrfs Точка монтирования - /
02-create.png
Раздел swap не рассматривал, но ни кто вам не запрещает его создать.


Должно получится так:
03-table.png

Дальнейшие шаги рассматривать не имеет смысла. Всё происходит штатно.

Система установлена и запущена. Можем взглянуть, что получилось:

Код: Выделить всё

lsblk
sudo btrfs subvolume list /
04-subvolumes_after_install.png

Теперь нужно исправить /etc/fstab Как писал выше, я к названию подтомов добавлял постфикс lmc. Т.е., @ приводим к виду @lmc, а @home к @home-lmc
05-fstab.png

Далее, нужно заменить @ на @lmc в /boot/grub/grub.cfg. Это легко можно выполнить, нажав Ctrl + H
06-grub.png

Примонтируем sda1

Код: Выделить всё

sudo mount /dev/sda1 /mnt

Теперь сделаем клоны существующих подтомов.

Код: Выделить всё

sudo btrfs subvolume snapshot /mnt/@ /mnt/@lmc
sudo btrfs subvolume snapshot /mnt/@home /mnt/@home-lmc
и убедимся, что появились два снапшота

Код: Выделить всё

sudo btrfs subvolume list /mnt
07-clone.png
На этом перенос первой системы закончен. Убедимся, что всё сделали правильно, перезагрузив компьютер.

Грузимся с флешки со второй ОС.
Монтируем sda1

Код: Выделить всё

sudo mount /dev/sda1 /mnt
Удалим исходные подтома

Код: Выделить всё

sudo btrfs subvolume delete /mnt/@
sudo btrfs subvolume delete /mnt/@home
09-delete.png
Запускаем Установщик. Она проходит так-же, как и в первом случае. За исключением того, что нужно убрать галочку Форматировать раздел при его создании
01-type.png
12-create.png
13-table.png
А так-же, соглашаемся с предложением отмонтировать раздел
10-umount.png

После установки загрузится вторая ОС. И вот тут нас ждёт приятный сюрприз: GRUB не подцепил первую систему. Сделаем это сами. Сделать это можно тремя двумя способами.


Сначала, независимо от способа, монтируем sda1

Код: Выделить всё

sudo mount /dev/sda1 /mnt
Минимум возни, но пункт меню всегда будет внизу списка.

Откроем /mnt/@lmc/boot/grub/grub.cfg, найдём и скопируем блок начинающийся с menuentry 'Linux Mint 18.3 Cinnamon 64-bit' Возможно, в вашем случае, он будет начинаться иначе.
15-grub.png
Теперь добавим скопированный текст в конце файла /etc/grub.d/40_custom
17-40_custom.png
Чуть сложнее, зато можно расставлять пункты меню как угодно.
В этом примере, для каждого пункта меню будет создан отдельный файл в папке /etc/grub.d В моёт случае это: 11_lmc для Linux Mint 18.3 Cinnamon и 12_lmm для Linux Mint 18.3 Mate

Скопируем файл 40_custom

Код: Выделить всё

sudo cp /etc/grub.d/40_custom /etc/grub.d/11_lmc
Добавим в конец файла блок начинающийся с menuentry 'Linux Mint 18.3 Cinnamon 64-bit' из /mnt/@lmc/boot/grub/grub.cfg.
18_11_lmc.png
Сделаем файл исполняемым

Код: Выделить всё

sudo chmod +x /etc/grub.d/11_lmc
По аналогии поступим с 12_lmm только пункт меню копировать будем из /mnt/@/boot/grub/grub.cfg

Чтобы отключить дефолтные пункты меню, нужно запретить запуск 10_linux и 30_os-prober

Код: Выделить всё

sudo chmod -x /etc/grub.d/10_linux
sudo chmod -x /etc/grub.d/30_os-prober
Дополнительные пукты меню добавляются точно так-же. Число в имени файла определяет порядок.
Был признан ересью, и удалён.

Включим меню GRUB в /etc/default/grub закомментировав строку GRUB_HIDDEN_TIMEOUT=0
05-1-grub.png
Не забываем применить изменения:

Код: Выделить всё

sudo update-grub
Всё. После перезагрузки радуемся результату.
16-done.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
Изображение
Изображение

В сети
Аватара пользователя

slant
Сообщения: 1727
Зарегистрирован: 21 июн 2017, 15:09
Решено: 26
Благодарил (а): 12 раз
Поблагодарили: 739 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение slant » 07 апр 2018, 15:07

Дополнения/исправления:

1.
di_mok писал(а):
07 апр 2018, 14:26
Удалим исходные подтома

Код: Выделить всё

sudo btrfs subvolume snapshot /mnt/@
sudo btrfs subvolume snapshot /mnt/@home
???? Это не команда удаления подтомов.

2.
di_mok писал(а):
07 апр 2018, 14:26
А вот тут интересный момент - GRUB не подцепил первую систему. Сделаем это сами.

Монтируем sda1

Код: Выделить всё

sudo mount /dev/sda1 /mnt

Откроем /mnt/@lmc/boot/grub/grub.cfg, найдём и скопируем блок начинающийся с
А вот это укладывание промышленных граблей, чтобы потом налететь на них с размаху. Достаточно обновить ядро, или любой другой компонент, который выполнит update-grub в процессе, и получаем переписанный конфиг.
Правильно:
Идем в /etc/grub.d/ (/mnt/@lmc/etc/grub.d/) находим там файлик 40_custom, и вносим эти правки правки туда. Теперь содержимое этого файлика будет автоматически добавляться к конфигу граба при апдейтах.

Аватара пользователя

Автор темы
di_mok
Сообщения: 4895
Зарегистрирован: 27 авг 2016, 16:06
Решено: 30
Откуда: Арзамас
Благодарил (а): 1249 раз
Поблагодарили: 1022 раза

Установка нескольких ОС на одном BTRFS разделе.

Сообщение di_mok » 07 апр 2018, 15:27

slant писал(а):
07 апр 2018, 15:07
???? Это не команда удаления подтомов.
Опечатка. Поправил.
slant писал(а):
07 апр 2018, 15:07
выполнит update-grub
Специально пробовал в ОС1 - не отвалилось, я успокоился. После твоего поста проверил ещё и в ОС2 - тут отвалилось.
slant писал(а):
07 апр 2018, 15:07
вносим эти правки правки туда
Просто вставить тот-же кусок, я правильно понял?
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
Изображение
Изображение

В сети
Аватара пользователя

slant
Сообщения: 1727
Зарегистрирован: 21 июн 2017, 15:09
Решено: 26
Благодарил (а): 12 раз
Поблагодарили: 739 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение slant » 07 апр 2018, 18:13

Содержимое этого файла при пересборке просто добавляется в "активный" конфиг граба как есть, за исключением конструкции "exec tail -n +3 $0". Так что, можно просто копировать нужные пункты из этого самого активного конфига, если они там уже есть. Нужно только иметь в виду, что при обновах ядра все равно названия файлов там править надо ручками, или скрипт писать для этого. Или использовать для строк конфигурации симлинки находящиеся в корне - /vmlinuz и /initrd.img - тогда будет всегда использоваться самое последнее ядро из установленных, т.к. эти симлинки системой обновляются как раз на него.

Аватара пользователя

Автор темы
di_mok
Сообщения: 4895
Зарегистрирован: 27 авг 2016, 16:06
Решено: 30
Откуда: Арзамас
Благодарил (а): 1249 раз
Поблагодарили: 1022 раза

Установка нескольких ОС на одном BTRFS разделе.

Сообщение di_mok » 08 апр 2018, 09:31

Покурил тему, сделал исправления. Вариант с 40_custom не очень понравился, из-за того, что пункт добавляется в самом низу. Добавил более гибкий способ.
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
Изображение
Изображение

Аватара пользователя

darkfenix
Сообщения: 4973
Зарегистрирован: 27 июн 2017, 10:36
Решено: 57
Откуда: Нижний Тагил
Благодарил (а): 284 раза
Поблагодарили: 939 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение darkfenix » 08 апр 2018, 10:03

di_mok писал(а):
07 апр 2018, 14:26
Был признан ересью, и удалён.
:-D
Изображение

Аватара пользователя

StarMAUGLI
Сообщения: 1533
Зарегистрирован: 10 сен 2016, 07:16
Решено: 15
Откуда: Москва
Благодарил (а): 628 раз
Поблагодарили: 178 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение StarMAUGLI » 08 апр 2018, 17:51

Хорошо, но мало.
Нету ли в планах статьи о "плюшках" бтрфс? А то куцые обзоры почитал, интерес появился, но вот хотелось бы поподробнее с примерами от живого человека. Про снапшоты. Про трублешутинг. Ну и еще может чего интересного удалось заметить. У меня один раздел бтрфс есть под /, но как его использовать в прикладном плане я так и не понял. Снапшоты у меня не получаются. Восстановления и откаты соответственно тоже. Уже раза три переустанавливал ОС, каждый раз надеясь что разберусь, но так, до сих пор, и не разобрался. Не те мануалы мне попадаются что ли?

С подтомами твоих манипуляций я не фига не понял.
1.
di_mok писал(а):
07 апр 2018, 14:26
Создаём новый раздел. Использовать как - btrfs Точка монтирования - /
с этим, допустим, поянтно. А вот как ты создаешь @home?
2.
di_mok писал(а):
07 апр 2018, 14:26
Раздел swap не рассматривал, но ни кто вам не запрещает его создать.
Жаль, что не рассматривал. Потому что вопрос такой же как и в п. 1. Или даже хуже ибо
di_mok писал(а):
07 апр 2018, 14:26
При установке на один раздел, Ubiquity создаёт два подтома: @ и @home.
К сожалению, пользователю не предоставлена возможность самостоятельно задавать названия подтомов,
3.

Код: Выделить всё

sudo btrfs subvolume list /
Ну вот у меня для примера получается вот так

Код: Выделить всё

mugalem@mugalem-P35 ~ $ sudo btrfs subvolume list /
ID 257 gen 138142 top level 5 path @
mugalem@mugalem-P35 ~ $ 
4.
di_mok писал(а):
07 апр 2018, 14:26
Теперь сделаем клоны существующих подтомов.
- это я понял.
А вот следующий шаг
di_mok писал(а):
07 апр 2018, 14:26
Удалим исходные подтома
- не понятно. И почему нужно убрать галочку в "Форматировать раздел" тоже не понятно. Установщик при форматировании поменяет название подтома что ли?

5. И последний вопрос. Откуда все таки взялись первые два подтома в меню граба, если ты их удалил, а обратно не восстанавливал?
di_mok писал(а):
07 апр 2018, 14:26
sudo btrfs subvolume delete /mnt/@ sudo btrfs subvolume delete /mnt/@home
Или я чего-то пропустил?

Аватара пользователя

Автор темы
di_mok
Сообщения: 4895
Зарегистрирован: 27 авг 2016, 16:06
Решено: 30
Откуда: Арзамас
Благодарил (а): 1249 раз
Поблагодарили: 1022 раза

Установка нескольких ОС на одном BTRFS разделе.

Сообщение di_mok » 08 апр 2018, 18:42

StarMAUGLI писал(а):
08 апр 2018, 17:51
Нету ли в планах статьи о "плюшках" бтрфс?
Да их на просторах и так дофигища. А по этому вопросу белое пятно. Вот я и пыжился.
StarMAUGLI писал(а):
08 апр 2018, 17:51
Снапшоты у меня не получаются
TimeShift, который входит в состав LM прекрасно делает снапшоты.
StarMAUGLI писал(а):
08 апр 2018, 17:51
А вот как ты создаешь @home?
Не внимательно читал. Там будет и @ и @home. Суть всего мануала над манипуляциями над ними.
StarMAUGLI писал(а):
08 апр 2018, 17:51
Жаль, что не рассматривал.
А тут особо нечего разжёвывать. Просто создал отдельный раздел под свап, и всё. Речь не об этом, вот и не затранивал.
StarMAUGLI писал(а):
08 апр 2018, 17:51
Ну вот у меня для примера получается вот так
Потому, что @, и @home на разных разделах. А тут речь о случае когда на одном
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
Изображение
Изображение

Аватара пользователя

StarMAUGLI
Сообщения: 1533
Зарегистрирован: 10 сен 2016, 07:16
Решено: 15
Откуда: Москва
Благодарил (а): 628 раз
Поблагодарили: 178 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение StarMAUGLI » 08 апр 2018, 19:13

di_mok писал(а):
08 апр 2018, 18:42
TimeShift, который входит в состав LM прекрасно делает снапшоты.
я уже писал где-то здесь на форумах, что у меня таймшифт снапшотов категорически не делает. В чем причина так и не выяснили. Даже в какую сторону копать, не понятно.

Аватара пользователя

Автор темы
di_mok
Сообщения: 4895
Зарегистрирован: 27 авг 2016, 16:06
Решено: 30
Откуда: Арзамас
Благодарил (а): 1249 раз
Поблагодарили: 1022 раза

Установка нескольких ОС на одном BTRFS разделе.

Сообщение di_mok » 08 апр 2018, 19:31

StarMAUGLI писал(а):
08 апр 2018, 19:13
я уже писал
Ага, вспомнил. Там ещё какой-то лихой венегрет из разделов был
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
Изображение
Изображение

Аватара пользователя

Автор темы
di_mok
Сообщения: 4895
Зарегистрирован: 27 авг 2016, 16:06
Решено: 30
Откуда: Арзамас
Благодарил (а): 1249 раз
Поблагодарили: 1022 раза

Установка нескольких ОС на одном BTRFS разделе.

Сообщение di_mok » 08 апр 2018, 19:55

Что-то я не все вопросы разглядел
StarMAUGLI писал(а):
08 апр 2018, 17:51
очему нужно убрать галочку в "Форматировать раздел" тоже не понятно
Иначе раздел будет отформатирован и от первой ОС не останется даже воспоминания
StarMAUGLI писал(а):
08 апр 2018, 17:51
И последний вопрос. Откуда все таки взялись первые два подтома в меню граба, если ты их удалил, а обратно не восстанавливал?
Не понял вопроса
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
Изображение
Изображение


asa
Сообщения: 367
Зарегистрирован: 19 авг 2018, 07:45
Решено: 2
Благодарил (а): 100 раз
Поблагодарили: 172 раза

Установка нескольких ОС на одном BTRFS разделе.

Сообщение asa » 01 ноя 2018, 16:56

di_mok писал(а):
07 апр 2018, 14:26
Пример с EFI сделаю чуть позже.
А когда примерно это "позже" настанет? :smile:

Аватара пользователя

Автор темы
di_mok
Сообщения: 4895
Зарегистрирован: 27 авг 2016, 16:06
Решено: 30
Откуда: Арзамас
Благодарил (а): 1249 раз
Поблагодарили: 1022 раза

Установка нескольких ОС на одном BTRFS разделе.

Сообщение di_mok » 01 ноя 2018, 17:39

А чёрт его знает... di_mok - личность крайне занятая, не предсказуемая и ветреная. Вот как я за него поручусь?
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
Изображение
Изображение

Аватара пользователя

darkfenix
Сообщения: 4973
Зарегистрирован: 27 июн 2017, 10:36
Решено: 57
Откуда: Нижний Тагил
Благодарил (а): 284 раза
Поблагодарили: 939 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение darkfenix » 18 ноя 2018, 17:17

Только что переустанавливал ОС с efi. Шаги все те же.
1. Создание снапшетов.
2. Удаление исходных subvolume.
3. Установка ОС.
Изображение

Аватара пользователя

027
Сообщения: 297
Зарегистрирован: 31 авг 2017, 06:05
Решено: 1
Благодарил (а): 23 раза
Поблагодарили: 49 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение 027 » 08 дек 2018, 02:34

di_mok писал(а):
07 апр 2018, 14:26
сделаем клоны существующих подтомов.

Код: Выделить всё

sudo btrfs subvolume snapshot /mnt/@ /mnt/@lmc
sudo btrfs subvolume snapshot /mnt/@home /mnt/@home-lmc
di_mok писал(а):
07 апр 2018, 14:26
Удалим исходные подтома

Код: Выделить всё

sudo btrfs subvolume delete /mnt/@
sudo btrfs subvolume delete /mnt/@home
Можно проще:

Код: Выделить всё

sudo mv /mnt/@ /mnt/@lmc
sudo mv /mnt/@home /mnt/@home-lmc

Аватара пользователя

027
Сообщения: 297
Зарегистрирован: 31 авг 2017, 06:05
Решено: 1
Благодарил (а): 23 раза
Поблагодарили: 49 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение 027 » 08 дек 2018, 02:43

Простейший вариант бэкапа (врукопашную) перед опасными деяниями:

Код: Выделить всё

монтируем корень btrfs куда-нить
cd <туда-нить>
sudo btrfs subvolume snapshot @ @bak
Если что не так, грузимся с флешки и делаем:

Код: Выделить всё

...монтируем корень btrfs куда-нить
cd <туда-нить>
sudo btrfs subvolume delete @
mv @bak @

Аватара пользователя

027
Сообщения: 297
Зарегистрирован: 31 авг 2017, 06:05
Решено: 1
Благодарил (а): 23 раза
Поблагодарили: 49 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение 027 » 08 дек 2018, 02:51

StarMAUGLI писал(а):
08 апр 2018, 17:51
почему нужно убрать галочку в "Форматировать раздел" тоже не понятно. Установщик при форматировании поменяет название подтома что ли?
Форматирование поменяет UUID раздела (тома, volume), а он прописан не только в конфиге груба в полусотне мест, но и в нодах самой файловой системы btrfs.
Забудь про форматирование, это не DOS, не винда и даже не ext4. Оно попросту не нужно. Жонглируй сабволюмами, как тебе хочется. Делай снапшоты, переименовывай, создавай пустые с тем же именем, и все это на лету.
Спрячь их под другими именами, установщик создаст новые @ и @home.

BTRFS растет, как дерево, из единого корня, постепенно, по мере необходимости.
Когда ты создал на блочном устройстве файловую систему btrfs, на нем ничего не размечается. Все свободное пространство остается неразмеченным, пустым, raw. Разметка происходит по мере наполнения файлами (каталогами, подтомами). По мере необходимости. Можно присоединить еще какое-нибудь блочное устройство и продолжить дерево на нём. Типа, как LVM, только проще.
Последний раз редактировалось пользователем 1 027; всего редактировалось раз: 8

Аватара пользователя

027
Сообщения: 297
Зарегистрирован: 31 авг 2017, 06:05
Решено: 1
Благодарил (а): 23 раза
Поблагодарили: 49 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение 027 » 08 дек 2018, 03:18

Именно потому, что UUID тома (базового раздела) встроен внутрь файловой системы, его нельзя так просто поменять. В отличие от традиционных файловых систем.
Именно поэтому нельзя просто взять и скопировать subvolume, как сущность. Необходимо использовать конструкцию

Код: Выделить всё

btrfs send SOURCE | btrfs receive TARGET
Можно скопировать потроха, т.е. содержимое, каталоги с файлами, но нельзя скопировать или перенести сам подтом на другой том стандартными командами.
Только btrfs send SOURCE | btrfs receive TARGET
И нельзя так просто взять, и поменять UUID корневого тома btrfs. Когда станете искать в гугле, как это сделать, вспомните: так нельзя сделать. И не ищите.

На втором винте, не загрузочном, можно вообще не создавать никаких разделов, ни MBR, ни GPT. Тупо скомандовать

Код: Выделить всё

# mkfs.btrfs /dev/sdb
и все дела.
Далее плодим подтома, каталоги, подтома внутри каталогов и так далее на любую глубину, как нам надо. Просто имеем в виду, подтом внешне похож на каталог, только не каталог.
Самурай без меча подобен самураю с мечом, только без меча.
Подтом нельзя скопировать с помощью dd или cp, нельзя удалить через rm -r, как простой каталог. И если внутри простого каталога завелся subvolume, вы об это споткнетесь.
Но никто не возбраняет наплодить их на любую глубину в любом порядке.
Собаку в имени тоже не обязательно, имя может быть любым. Собаку ставят чисто для ориентиру, для визуального отличия.

Аватара пользователя

zuzabrik
Сообщения: 1553
Зарегистрирован: 29 авг 2016, 09:08
Решено: 19
Благодарил (а): 97 раз
Поблагодарили: 487 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение zuzabrik » 08 дек 2018, 10:55

Не надо писать 4 поста подряд, объедините все в один если с первого раза собрать все мысли в одном посте не получилось.
Наш IRC-канал для общения: #linuxmint-ru на сервере irc.spotchat.org
Для захода откройте HexChat, выберите сервер Linux Mint и наберите в чате /join #linuxmint-ru
Или любым другим удобным способом ;)


abulaev2008
Сообщения: 374
Зарегистрирован: 18 ноя 2017, 18:36
Решено: 3
Благодарил (а): 18 раз
Поблагодарили: 57 раз

Установка нескольких ОС на одном BTRFS разделе.

Сообщение abulaev2008 » 08 дек 2018, 11:56

di_mok писал(а):
07 апр 2018, 14:26
Для примера я использовал LinuxMint 18.3 Cinnamon - первая ОС, и LinuxMint 18.3 Mate - вторая ОС.
Смущает выбор ОС для примера.
Проще установить одну ОС в btrfs, второе установить из синаптикса. И пользоваться выбором при вводе пароля входе в систему

Вернуться в «Руководства»