Не преграждай дорогу дуракам и сумасшедшим.
японская пословица

Меню навигации для мобильных

Установка Ubuntu 20.04 x64 на ZoL (ZFS on Linux)

Автор Shaman, 23 Апр., 2021, 18:43

« предыдущая - следующая »

Shaman

В сети достаточно много HowToo по этой теме:
Как от сторонних людей
ZFS на Linux
Так и от самих разработчиков ZoL.

Но эти вещи имеют свойство быстро устаревать. Да и создавались они изначально под конкретные условия (исключая инструкцию от самих разработчиков) и для вашей ситуации могут не подойти. Поэтому я решил написать ещё одно.  :)
Учитывая всё вышеизложенное прямо следовать ему не стоит или как минимум предварительно проверить работоспособность в ваших реалиях, к примеру на виртуальной машине.

На данный момент (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.
[свернуть]
... то и установки приводят к схожим результатам, но к сожалению обе они являются крайностями. В первой вы абсолютно всё настраиваете в ручную из терминала, во второй полагаетесь на преднастройки разработчиков. Золотой середины, графического инсталлятора с возможностью выбора параметров, пока не существует. Единственной альтернативой на данный момент остаётся редактирование скрипта установки.

Выбор типа установки зависит от поставленной задачи
В моём случае была надобность перенести раздел подкачки на другой диск и каталог пользователя на другой пул, поэтому далее я буду описывать именно этот способ.

Начнём.

1. Загружаемся с установочного носителя и выбираем пункт "Try Ubuntu (Попробовать Ubuntu)"

2. Открываем любым удобным для вас способом файл zsys-setup
Код: text
sudo gedit /usr/share/ubiquity/zsys-setup

3. Уменьшаем размер раздела подкачки.
Совсем убрать его невозможно, скрипт падает.
В самом скрипте об этом тоже написано
Код: text
        # Give us a minimum swap partition size of 4MB in case we decide on
 # no swap, just to keep the partition layout stable:
[свернуть]
Поиском находим все выражения ${ss} и меняем их на значение 4. Минимальный возможный размер. Если делать меньше скрипт отрабатывает, но установка падает.
Пример
Код: Было
${partprefix}${partswap}  :   size= ${ss}M,         type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
Код: Стало
${partprefix}${partswap}  :   size= 4M,             type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
[свернуть]
[свернуть]

4. Отключаем создание отдельной файловой системы для каталога пользователя.

4.1 Ищем и удаляем:
Код: text
zfs create rpool/USERDATA -o canmount=off -o mountpoint=/
4.2 Ищем move_user и удаляем все до init_system_partitions
↓ спойлер ↓
Код: text
move_user () {
 target="$1"
 user="$2"
 userhome="$3"
 uuid="$4"

 echo "I: Creating user $user with home $userhome"
 mv "${target}/${userhome}" "${target}/tmp/home/${user}"
 zfs create "rpool/USERDATA/${user}_${uuid}" -o canmount=on -o mountpoint=${userhome}
 chown $(chroot "${target}" id -u ${user}):$(chroot ${target} id -g ${user}) "${target}/${userhome}"
 rsync -a "${target}/tmp/home/${user}/" "${target}/${userhome}"
 bootfsdataset=$(grep "\s${target}\s" /proc/mounts | awk '{ print $1 }')
 zfs set com.ubuntu.zsys:bootfs-datasets="${bootfsdataset}" rpool/USERDATA/${user}_${UUID_ORIG}
}
[свернуть]
[свернуть]

5. Я буду использовать msql и для этого создаю дополнительный набор данных с recordsize=16K (поскольку именно такой размер блока использует эта база данных). Вам для повтора необязателен.
5.1 Ищем строку # Desktop specific system dataset и вставляем строчку
Код: text
zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/lib/mysql" -o recordsize=16K
[свернуть]

Чуть подробнее об остальных настройках
В этом блоке создаются пулы для корневой файловой системы и загрузчика, задаются флаги настроек (подробнее о флагах здесь и здесь). С параметром -O идут настройки для пула, а с -o параметры для файловой системы
↓ спойлер ↓

Код: text
  # Pools
  # rpool  
  zpool create -f \                            
 -o ashift=12 \
 -O compression=lz4 \
 -O acltype=posixacl \
 -O xattr=sa \
 -O relatime=on \
 -O normalization=formD \
 -O mountpoint=/ \
 -O canmount=off \
 -O dnodesize=auto \
 -O sync=disabled \
 -O mountpoint=/ -R "${target}" rpool "${partrpool}"

 # bpool
 # The version of bpool is set to the default version to prevent users from upgrading
 # Then only features supported by grub are enabled.
 zpool create -f \
 -o ashift=12 \
 -d \
 -o feature@async_destroy=enabled \
 -o feature@bookmarks=enabled \
 -o feature@embedded_data=enabled \
 -o feature@empty_bpobj=enabled \
 -o feature@enabled_txg=enabled \
 -o feature@extensible_dataset=enabled \
 -o feature@filesystem_limits=enabled \
 -o feature@hole_birth=enabled \
 -o feature@large_blocks=enabled \
 -o feature@lz4_compress=enabled \
 -o feature@spacemap_histogram=enabled \
 -O compression=lz4 \
 -O acltype=posixacl \
 -O xattr=sa \
 -O relatime=on \
 -O normalization=formD \
 -O canmount=off \
 -O devices=off \
 -O mountpoint=/boot -R "${target}" bpool "${partbpool}"
[свернуть]

В этом создаются сами наборы
[/b]
Код: text
# Root and boot dataset
 zfs create rpool/ROOT -o canmount=off -o mountpoint=none
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}" -o mountpoint=/
 zfs create bpool/BOOT -o canmount=off -o mountpoint=none
 zfs create "bpool/BOOT/ubuntu_${UUID_ORIG}" -o mountpoint=/boot

 # System dataset
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var" -o canmount=off
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/lib"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/lib/AccountServices"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/lib/apt"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/lib/dpkg"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/lib/NetworkManager"

 # Desktop specific system dataset
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/srv"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/usr" -o canmount=off
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/usr/local"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/games"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/log"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/mail"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/snap"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/spool"
 zfs create "rpool/ROOT/ubuntu_${UUID_ORIG}/var/www"
[свернуть]

Здесь настраивается система автоматического создания снапшотов
[/b]
Код: text
        # Set zsys properties
 zfs set com.ubuntu.zsys:bootfs='yes' "rpool/ROOT/ubuntu_${UUID_ORIG}"
 zfs set com.ubuntu.zsys:last-used=$(date +%s) "rpool/ROOT/ubuntu_${UUID_ORIG}"
 zfs set com.ubuntu.zsys:bootfs='no' "rpool/ROOT/ubuntu_${UUID_ORIG}/srv"
 zfs set com.ubuntu.zsys:bootfs='no' "rpool/ROOT/ubuntu_${UUID_ORIG}/usr"
 zfs set com.ubuntu.zsys:bootfs='no' "rpool/ROOT/ubuntu_${UUID_ORIG}/var"[/spoiler]
[свернуть]
Я с этими настройками согласен, но вы можете изменить их по своему усмотрению. Подробнее о том почему настройки именно такие написано в блоге разработчика.
[свернуть]

6. Сохраняем изменения файла zsys-setup и ...
...запускаем установку.
6.1 На этапе выбора дисков нажимаем "Earse disk and install Ubuntu (Стереть диск и установить Ubuntu)"
zfs_install_step1.png

6.2 Выбираем опцию "EXPERIMENTAL:Earse disk and use ZFS (Экспериментальное: Стереть диск и использовать ZFS"
zfs_install_step2.png

6.3 Если отобразиться "ZFS selected (Выбранка ZFS)" продолжаем установку.
zfs_install_step3.png

6.4 Если у вас более одного диска то откроется окно выбора оных. А после или вместо него окно с подтверждением настроек.
zfs_install_step4.png

6.5 После появления окна создания пользователя ждем некоторое время и, если скрипт не упал с ошибкой,  :)  продолжаем установку, которая далее не отличается от стандартной. Если же возникла ошибка заново открываем скрипт, ищем её, запоминаем, перезагружаемся и начинаем всё с начала. Поскольку без перезагрузки скрипт, даже исправленный, всё равно будет падать в ошибку.
[свернуть]

7. После установки (если всё прошло удачно и система загрузилась) перезаходим под рутом.

8. Создание пула для каталога пользователя
8.1 Для создания пула вводим команду:

Код: text
# zpool create -o ashift=12 -O xattr=sa -o autoexpand=on -o autoreplace=on -O atime=off -O compression=lz4 -o autotrim=on -O acltype=posixacl -O relatime=on -O normalization=formD -O canmount=off -O dnodesize=auto -O sync=disabled  USER -f -m none raidz  /dev/sd[c-f]
Где:
  • 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*
Код: text
# zpool export USER
# zpool import -d /dev/disk/by-id USER
Зачем это надо
Первая команда отключит пул, вторая соберёт его заново, но с другими именами дисков. Это необходимо поскольку если по какой то причине названия дисков sd*  в пуле поменяются (диск будет подлючен в другой разъём, или добавиться новый и при перезагрузке названия сместятся) пул не подключиться. А в by-id диски отображаются по серийным номерам, независимо от физического подключения.
Можно было сразу создать пул через эти имена, но тогда бы пришлось в ручную их прописывать, а это неудобно.
[свернуть]

8.3 Создаём в каталоге mnt подкаталог 1 и скопируем в него каталог пользователя.
Код: text
# mkdir /mnt/1
# rsync -avPX /home/user1 /mnt/1
Здесь и далее в место user1 подставляем имя вашего пользователя.

8.4Удаляем каталог пользователя.
Важно!!!
Следующая команда удаляет данные без подтверждения поэтому внимательно проверте путь, а также, что копирование в п 8.3 прошло успешно.
Код: text
# rm -rf /home/user1

8.5 Cоздаём наборы данных для каталога home и пользователя.
Код: text
# zfs create USER/home
# zfs create USER/home/user1
Команды также смонтируют эти наборы данных в одноимённые каталоги. Монтирование невозможно если каталог не пустой. Поэтому были необходимы п 8.3 и 8.4.

8.6Скопируем данные пользователя обратно.
Код: text
# rsync -avPX /mnt/1 /home/user1

8.7 Выходим из рута и логинимся под вашим пользователем. И, если всё прошло успешно, удаляем временный каталог 1.
Код: text
# rm -rf /mnt/1
[свернуть]

Поздравляю, установка завершена!

Shaman

#1
Меня постигла печаль, почил системный SSD, на сервере ради которого была создана эта тема.  :(
Но не беда, данные с этой файлопомойки остались на пуле, а систему можно поставить заново, тем более пора обновить её версию, а так же, наконец, перейти на облако nextcloud, но сейчас не об этом.
Разжившись новым диском я столкнулся с проблемой, что скрипт по которому проходит установка теперь упрятан в недра инсталлятора и простого способа его отредактировать нет (с непростым я не справился). И, соответственно, остаются только 2 официальных способа установки: это ручной, ссылка есть в первом посте, и автоматический через самостоятельно написанный скрипт автоустановки, образцы которого любезно предоставлены нам разработчиками и лежат на диске с ОС. Но вот беда ни один из них не работает.
Лирическое отступление. ОСТОРОЖНО!!! Поток мыслей
Как оказалось впоследствии это нормально и скрипт написанный для одной системы может не запуститься на другой из-за разницы в железе, ссылок на устройства и т.п., а, для того чтобы написать универсальный (даже имея неплохую документацию) скрипт нужно быть программистом со стажем.
Нет базовую инсталляцию быстро осилить вполне можно, но ту что надо мне: такое, как пользователь с нужными правами, создание необходимых zfs пулов и подмонтирование уже существующих, осилить за хоть сколько-нибудь вменяемое время мне не удалось, потому как этот скрипт представляет собой какое-то дикое нагромождение джейсон скрипта со вставками из питона и баша.
Мне нужен рабочий сервер с моими параметрами, а не ваш автоистал. Ну что мешало за 6... ШЕСТЬ КАРЛ ЛЕТ!!! написать нормальный инсталлятор с выбором пунктов в ручную, так нет они ещё и скрипт утолкали так что его теперь не поправишь.
Я предупреждал.  ::)
[свернуть]
Поэтому для ускорения процесса я воспользовался очень грубым хаком. И пост пишу дабы не забыть последовательность действий, буде ещё пригодятся. Но повторяете вы их только на свой страх и риск, как минимум потому, что посекторное перемещение раздела влево не очень хорошо влияет на SSD, но один раз сделать можно.
Пссс..
На самом деле можно и не один, но я вам этого не говорил  ::)
[свернуть]


Комментарий: Поскольку процесс установки работает по принципу Далее, Далее, Далее, Далее все малозначимые изображения с я буду убирать под спойлер и если перед вами выпрыгнуло окно которого нет в описании шага его можно просто прокликать.

Т.к. процесс установки не управляем и выбор диска для установки ложится на плечи (и совесть) разработчиков я предпочитаю отключать все диски кроме системного, дабы инсталлятор не запорол данные. Если в вашем случае это затруднительно или невозможно в окне Ready to install внимательно смотрим что установка пройдёт на нужный вам диск (по умолчанию инсталлятор выбирает самый большой).
18.png
И если сие не произошло то: либо выбираем в предыдущем окне нужный (появляется не всегда поэтому скрина не сделал), либо всё-таки отключаем ненужные диски.

И так начинаем.

1. Загружаемся с диска, выбираем Try or install Ubuntu  и прокликиваем инсталлятор до окна с предложением подключится к интернету. Все предыдущее пункты не имеют значения т.к. инсталлятор мы в последствии перезапустим.
01.png

В этом окне выбираем ваше подключение. Установку без интернета не рекомендую, почему читаем далее.

06.png

2.
Обновляем и перезапускаем инсталлятор
07.png 08.png 09.png
[свернуть]
Сие необходимо т.к. на момент написания статьи версия инсталятора, зашитая в образ, содержит критичный для установки zfs баг (на который я потерял ссылку :) ), но поправленный в обновлённой версии.

3.
 a. Выбираем язык и раскладку
03.png 05.png
[свернуть]
Я предпочитаю устанавливать на аглицком, поскольку:
Во первых необходимо будет вводить данные пользователя и пароль и при выборе отличного от дефолтного языка раскладка переключается на выбранный язык, а переключиться  обратно можно только мышкой через меню т.к. комбинации клавиш ещё не настроены.
Во вторых каталоги пользователя создаются на латинице, что значительно упрощает работу с ними в дальнейшем. Да и доустановить необходимый языковой пакет можно позже.
[свернуть]
b. В окне Type of instalation выбираем пункт Interactive instalation
11.png

c.
Далее смотрим скрины под спойлером
12.png 13.png 14.png 15.png
[свернуть]

d. Вводим данные пользователя. Галочку Requri my password to log in оставляем, поскольку позднее будет необходимо чтобы при загрузке не было автовхода.
16.png
e.
Выбираем часовой пояс, проверяем параметры, начинаем установку...
17.png 18.png 19.png
[свернуть]
... и дожидаемся её завершения.
21.png

4. Перезагружаемся в установленную систему, проверяем что всё установилось и работает. Если были отключены, подключаем диски и снова грузимся с Live CD. Без первой загрузки в систему дальнейшие действия часто завершаются бутлупом (даже если выйти из среды установленной системы), предполагаю что при первой загрузке система, что-то корректирует.

5. a. Запускаем Gparted выбираем наш диск и видим следующую таблицу разделов:
24.png

b. Отключаем свап (Swapoff) и удаляем раздел (Delete).
30.png 31.png

c. Выбираем 4-й раздел, двигаем его влево через пункт Resize/Move и нажимаем Resize/Move;D
27.png 28.png 29.png

d. Принимаем предупреждение о том, что система может не загрузиться
32.png

Нажимаем Apply All Operation.
34.png

Затем Apply и дожидаемся окончания
35.png 37.png

6. a. Запускаем терминал (Ctrl+Alt+T) и командой ...
Код: text
sudo parted -s -a opt /dev/sda4 "print  free"
... (где sda нужный диск, а 4 раздел на диске) смотрим размер интересующего нас раздела.
39.png

как видим он заканчивается на 12,1GB
b. Расширяем раздел до конца дискового пространства командой:
Код: text
sudo parted -s -a opt /dev/sda4 "resizepart 4 100%"
41.png

c. Поскольку команда ничего не возвращает проверяем статус исполнения командой...
Код: text
echo $?
Данная команда вернет статус выхода последней исполненной команды.
42.png

Выход 0, команда завершилась успешно.

d. Вновь вводим команду из п.6.а и видим что раздел теперь занимает всё дисковое пространство.
43.png

Лирическое отступление
Если кто знает как вышеуказанные операции произвести в одной программе скажите пожалуйста. Gparted не дает расширить раздел с zfs, а как сдвинуть раздел влево программой parted (и другими консольными) я не нашел. Подозреваю, что данное действие можно проделать чередой других команд, но каких я не знаю.
[свернуть]
Если всё выше перечисленное прошло успешно работа в Live CD законченна перезагружаемся в основную систему.

7. Сейчас наша задача расширить файловую систему ZFS на весь раздел.
a. Команда
Код: text
# zpool list
должна показать в графе EXPANDSZ, что у пула появилось пространство для расширения
45.png

b.  Командой
# zpool set autoexpand=on rpool
включим свойство авторасширения пула на всё доступное пространство.
46.png

По идее можно подождать и система сама должна расширить пул, но быстрее будет сделать это в ручную.
Лирическое отступление
И команда zpool online -e должна нам в этом помочь. Но у меня случился затык. Команда в качестве аргумента принимает на вход имя пула и имя диска, или раздела на оном, где расположена zfs. И почему-то при указании в качестве аргумента sda4 команда исполняется, но расширения не происходит, однако если указать серийный номер диска с разделом всё проходит нормально.
[свернуть]
d. Выясняем ID раздела
Код: text
# ls /dev/disk/by-id
В выводе команды ищем наш диск и раздел.
49.png

Чтобы это сделать нужно пояснить из чего состоит серийный номер.
И для этого под спойлером я приведу вывод команды с реального ПК с пояснениями
sudo ls /dev/disk/by-id
ata-KINGSTON_SV300S37A120G_50026B7672027A42
ata-KINGSTON_SV300S37A120G_50026B7672027A42-part1
ata-PIONEER_BD-RW_BDR-209D
ata-WDC_WD40PURZ-85AKKY0_WD-WX42D3014LA5
ata-WDC_WD40PURZ-85AKKY0_WD-WX42D3014LA5-part1
ata-WDC_WD40PURZ-85AKKY0_WD-WX42D3014LA5-part9
ata-WDC_WD40PURZ-85AKKY0_WD-WX62D10HTSNS
ata-WDC_WD40PURZ-85AKKY0_WD-WX62D10HTSNS-part1
ata-WDC_WD40PURZ-85AKKY0_WD-WX62D10HTSNS-part9
ata-WDC_WD40PURZ-85TTDY0_WD-WCC7K4SLL7DU
ata-WDC_WD40PURZ-85TTDY0_WD-WCC7K4SLL7DU-part1
ata-WDC_WD40PURZ-85TTDY0_WD-WCC7K4SLL7DU-part9
ata-WDC_WD40PURZ-85TTDYO_P4H42YTC
ata-WDC_WD40PURZ-85TTDYO_P4H42YTC-part1
ata-WDC_WD40PURZ-85TTDYO_P4H42YTC-part9
nvme-WD_Blue_SN570_250GB_SSD_2144D7448305
nvme-WD_Blue_SN570_250GB_SSD_2144D7448305_1
nvme-WD_Blue_SN570_250GB_SSD_2144D7448305_1-part1
nvme-WD_Blue_SN570_250GB_SSD_2144D7448305_1-part2
nvme-WD_Blue_SN570_250GB_SSD_2144D7448305_1-part4
nvme-WD_Blue_SN570_250GB_SSD_2144D7448305-part1
nvme-WD_Blue_SN570_250GB_SSD_2144D7448305-part2
nvme-WD_Blue_SN570_250GB_SSD_2144D7448305-part4

Первая часть до тире это интерфейс по которому подключен диск. Вторая часть с нижними подчеркиваниями это модель диска и его серийный номер, которые написаны на шильдике часть содержащая partX это раздел на этом диске (где X номер раздела). Из этого следует что если мы хотим обратиться ко всему диску то в команду вставляем всё до -partX если к разделу то после тире пишем номер раздела.
[свернуть]
В нашем примере этот диск выделен на скрине.


c. Вводим команду с номером диска
Код: text
# zpool online -e rpool ata-VBOX_HARDDISK_VB6a47226c-0ae752f0-part4
50.png

f. Проверяем...
Код: text
# zpool list
... и видим что размер пула увеличился.
51.png

8. Подключаем пользовательский пул в место созданного при установке.
a. Если у вас не задан пароль для root задаем:
Код: text
# passwd root
Перезагружаемся, не логинимся и заходим под рутом в другой консоли. Для перехода в которую нажимаем комбинацию клавиш Ctrl+Alt+F3...6, по выбору.
b. Смотрим имя пользовательского набора данных:
Код: text
zfs list
Набор который нас интересует имеет имя home_5kh6xm цифро-буквенное обозначение задаётся случайным образом во время создания набора и у вас будет другим.
59.png

c. Отключаем автомонтирование тома.
Код: text
zfs set canmount=noauto rpool/USERDATA/home_5kh6xm
60.png

d. Отключаем том, перезагружаемся и сова заходим под рутом, см. п. 8.a.
Код: text
zfs set canmount=off rpool/USERDATA/home_5kh6xm
61.png

e. Удаляем том
Код: text
zfs destroy -f -r rpool/USERDATA/home_5kh6xm
f. Проверяем что том удалён
Код: text
zfs list
64.png

Как видим он пропал. Если команда destroy не удаляет том скорее всего он не отмонтировался. Это происходит если вы зашли под пользователем который использует этот набор данных (в примере это test-user) и он был смонтирован. Тогда пункты 8.a-d  необходимо выполнить заного.
g. Для подключения пула необходимо знать его имя. Если оно вам неизвестно его можно узнать командой zpool import -d (путь до пула) в нашем случае она принимает вид:
Код: text
zpool import -d /dev/disk/by-id
65.png

Видим что имя пула USER и нам рекомендуют для его подключения использовать флаг -f т.к. он небыл правильно импортирован.
h. Так и поступим:
Код: text
zpool import -f USER -d /dev/disk/by-id
i.Проверяем и видим что пул подключился
68.png

k. Монтируем том USER/home в каталог home
Код: text
zfs set mountpoint=/home USER/home
И проверяем:
70.png

У тома USER/home поямилась точка монтирования /home. Все подчинённые наборы смонтируются автоматически.

l. По желанию можно установить автологон основного пользователя для этого в файл /etc/gdm3/custom.conf, любым удобным для вас способом, нужно добавить строки:
Код: text
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=test-user


На этом всё, перезагружаемся и радуемся.