Компьютеры, программы, интернет => Программы и сети => Тема начата: Shaman от 23 Апр., 2021, 18:43
Название: Установка Ubuntu 20.04 x64 на ZoL (ZFS on Linux)
Отправлено: Shaman от 23 Апр., 2021, 18:43
В сети достаточно много HowToo по этой теме: Как от сторонних людей ZFS на Linux (https://www.youtube.com/watch?v=ZhlkwTNkh58&list=PL87aOEDNxKL_L3GtVzjkw5Q-w_gHo_Awg) Так и от самих разработчиков ZoL. (https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html#ubuntu-installer)
Но эти вещи имеют свойство быстро устаревать. Да и создавались они изначально под конкретные условия (исключая инструкцию от самих разработчиков) и для вашей ситуации могут не подойти. Поэтому я решил написать ещё одно. :) Учитывая всё вышеизложенное прямо следовать ему не стоит или как минимум предварительно проверить работоспособность в ваших реалиях, к примеру на виртуальной машине.
На данный момент (22.04.21) есть два основных способа установки Ubuntu на ZFS, это вышеуказанный способ от разработчиков ZoL и от разработчиков Ubuntu, встроенный в инсталлятор. Поскольку эти команды работают с оглядкой друг на друга... ↓ спойлер ↓
The Ubuntu installer has support for root-on-ZFS. This HOWTO produces nearly identical results as the Ubuntu installer because of bidirectional collaboration.
[свернуть]
... то и установки приводят к схожим результатам, но к сожалению обе они являются крайностями. В первой вы абсолютно всё настраиваете в ручную из терминала, во второй полагаетесь на преднастройки разработчиков. Золотой середины, графического инсталлятора с возможностью выбора параметров, пока не существует. Единственной альтернативой на данный момент остаётся редактирование скрипта (https://gist.github.com/andaag/1379d6c2adcf4a84c91957a46bee3418) установки.
Выбор типа установки зависит от поставленной задачи В моём случае была надобность перенести раздел подкачки на другой диск и каталог пользователя на другой пул, поэтому далее я буду описывать именно этот способ.
Начнём.
1. Загружаемся с установочного носителя и выбираем пункт "Try Ubuntu (Попробовать Ubuntu)"
2. Открываем любым удобным для вас способом файл zsys-setup
3. Уменьшаем размер раздела подкачки.
Совсем убрать его невозможно, скрипт падает. В самом скрипте об этом тоже написано
[свернуть]
Поиском находим все выражения ${ss} и меняем их на значение 4. Минимальный возможный размер. Если делать меньше скрипт отрабатывает, но установка падает. Пример
[свернуть]
[свернуть]
4. Отключаем создание отдельной файловой системы для каталога пользователя.
4.1 Ищем и удаляем: 4.2 Ищем move_user и удаляем все до init_system_partitions ↓ спойлер ↓
[свернуть]
[свернуть]
5. Я буду использовать msql и для этого создаю дополнительный набор данных с recordsize=16K (поскольку именно такой размер блока использует эта база данных). Вам для повтора необязателен.
5.1 Ищем строку # Desktop specific system dataset и вставляем строчку
[свернуть]
Чуть подробнее об остальных настройках
В этом блоке создаются пулы для корневой файловой системы и загрузчика, задаются флаги настроек (подробнее о флагах здесь и здесь). С параметром -O идут настройки для пула, а с -o параметры для файловой системы ↓ спойлер ↓
[свернуть]
В этом создаются сами наборы
[/b]
[свернуть]
Здесь настраивается система автоматического создания снапшотов
[/b]
[свернуть]
Я с этими настройками согласен, но вы можете изменить их по своему усмотрению. Подробнее о том почему настройки именно такие написано в блоге разработчика.
[свернуть]
6. Сохраняем изменения файла zsys-setup и ... ...запускаем установку.
6.1 На этапе выбора дисков нажимаем "Earse disk and install Ubuntu (Стереть диск и установить Ubuntu)"
6.2 Выбираем опцию "EXPERIMENTAL:Earse disk and use ZFS (Экспериментальное: Стереть диск и использовать ZFS"
6.3 Если отобразиться "ZFS selected (Выбранка ZFS)" продолжаем установку.
6.4 Если у вас более одного диска то откроется окно выбора оных. А после или вместо него окно с подтверждением настроек.
6.5 После появления окна создания пользователя ждем некоторое время и, если скрипт не упал с ошибкой, :) продолжаем установку, которая далее не отличается от стандартной. Если же возникла ошибка заново открываем скрипт, ищем её, запоминаем, перезагружаемся и начинаем всё с начала. Поскольку без перезагрузки скрипт, даже исправленный, всё равно будет падать в ошибку.
[свернуть]
7. После установки (если всё прошло удачно и система загрузилась) перезаходим под рутом.
8. Создание пула для каталога пользователя
8.1 Для создания пула вводим команду:
Где:
USER - имя вашего пула (может быть любым),
-m none - точка монтирования (в данном случае её нет),
raidz - тип пула,
Типы пулов
stripe - страйп, нечто среднее между RAID0 и JBOD. Не имеет избыточности, вся информация теряется при смерти любого из дисков.
mirror - зеркало, примерный аналог RAID1. Каждый диск зеркала содержит полную копию всей информации. Выдерживает смерть одного любого диска. Возможно и тройное зеркало.
raidz1 - примерный аналог RAID5, требует минимум 3 дисков, объем одного диска уходит на избыточность. Выдерживает смерть одного любого диска.
raidz2 - примерный аналог RAID6, требует минимум 4 диска, объем двух дисков уходит на избыточность. Выдерживает смерть двух любых дисков.
raidz3 - требует минимум 5 дисков, объем трёх дисков уходит на избыточность. Выдерживает смерть трёх любых дисков.
[свернуть]
/dev/sd[c-f] - диски из которых собирается пулл. Если диски идут не по порядку то путь до каждого диска необходимо прописать отдельно разделяя пробелами
Подробнее об остальных параметрах команды в ссылках под спойлером Чуть подробнее об остальных настройках
8.2 Перемонтируем пул для использования /dev/disk/by-id в место /dev/sd* Зачем это надо
Первая команда отключит пул, вторая соберёт его заново, но с другими именами дисков. Это необходимо поскольку если по какой то причине названия дисков sd* в пуле поменяются (диск будет подлючен в другой разъём, или добавиться новый и при перезагрузке названия сместятся) пул не подключиться. А в by-id диски отображаются по серийным номерам, независимо от физического подключения. Можно было сразу создать пул через эти имена, но тогда бы пришлось в ручную их прописывать, а это неудобно.
[свернуть]
8.3 Создаём в каталоге mnt подкаталог 1 и скопируем в него каталог пользователя. Здесь и далее в место user1 подставляем имя вашего пользователя.
8.4Удаляем каталог пользователя.
Важно!!!
Следующая команда удаляет данные без подтверждения поэтому внимательно проверте путь, а также, что копирование в п 8.3 прошло успешно.
8.5 Cоздаём наборы данных для каталога home и пользователя. Команды также смонтируют эти наборы данных в одноимённые каталоги. Монтирование невозможно если каталог не пустой. Поэтому были необходимы п 8.3 и 8.4.
8.6Скопируем данные пользователя обратно.
8.7 Выходим из рута и логинимся под вашим пользователем. И, если всё прошло успешно, удаляем временный каталог 1.